[
  {
    "path": ".bowerrc",
    "content": "{\n  \"directory\": \"client/components\"\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules/*\ndist/*\ne2e-dist/*\nSession.vim\nnpm-debug.log\nclient/main.css\nclient/app-compiled\n"
  },
  {
    "path": ".jshintignore",
    "content": "node_modules\nclient/components\nclient/vendor\nclient/app-compiled\ndist\ne2e-dist\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n    \"bitwise\"       : false,\n    \"curly\"         : false,\n    \"eqeqeq\"        : true,\n    \"forin\"         : true,\n    \"immed\"         : true,\n    \"latedef\"       : true,\n    \"newcap\"        : true,\n    \"noarg\"         : true,\n    \"noempty\"       : true,\n    \"nonew\"         : true,\n    \"plusplus\"      : false,\n    \"quotmark\"      : \"single\",\n    \"regexp\"        : false,\n    \"undef\"         : true,\n    \"unused\"        : true,\n    \"strict\"        : false,\n    \"camelcase\"     : false,\n    \"trailing\"      : true,\n    \"indent\"        : 2,\n    \"maxlen\"        : 120,\n    \"maxdepth\"      : 4,\n    \"maxstatements\" : 30,\n    \"maxcomplexity\" : 5,\n\n    \"asi\"           : false,\n    \"boss\"          : true,\n    \"debug\"         : true,\n    \"eqnull\"        : true,\n    \"esnext\"        : true,\n    \"evil\"          : true,\n    \"expr\"          : true,\n    \"funcscope\"     : false,\n    \"globalstrict\"  : false,\n    \"iterator\"      : false,\n    \"lastsemic\"     : true,\n    \"laxbreak\"      : false,\n    \"laxcomma\"      : false,\n    \"loopfunc\"      : false,\n    \"multistr\"      : false,\n    \"onecase\"       : false,\n    \"proto\"         : false,\n    \"regexdash\"     : false,\n    \"scripturl\"     : false,\n    \"smarttabs\"     : false,\n    \"shadow\"        : false,\n    \"sub\"           : false,\n    \"supernew\"      : false,\n    \"validthis\"     : false,\n\n    \"browser\"       : true,\n    \"couch\"         : false,\n    \"devel\"         : true,\n    \"dojo\"          : false,\n    \"jquery\"        : true,\n    \"mootools\"      : false,\n    \"node\"          : true,\n    \"nonstandard\"   : false,\n    \"prototypejs\"   : false,\n    \"rhino\"         : false,\n    \"wsh\"           : false,\n\n    \"nomen\"         : false,\n    \"onevar\"        : false,\n    \"passfail\"      : false,\n    \"white\"         : false,\n\n    \"maxerr\"        : 100,\n    \"globals\": {\n      \"_\": true,\n      \"queryCss\": true,\n      \"SVGInjector\": true\n    },\n    \"predef\"        : [\n      \"__dirname\",\n      \"System\",\n      \"element\",\n      \"browser\",\n      \"require\",\n      \"jasmine\",\n      \"protractor\",\n      \"ptor\",\n      \"describe\",\n      \"ddescribe\",\n      \"xdescribe\",\n      \"it\",\n      \"iit\",\n      \"angular\",\n      \"inject\",\n      \"xit\",\n      \"beforeEach\",\n      \"afterEach\",\n      \"expect\",\n      \"input\",\n      \"pause\",\n      \"spyOn\",\n      \"runs\",\n      \"waits\",\n      \"waitsFor\",\n      \"Benchmark\",\n      \"Raphael\",\n      \"Backbone\",\n      \"Modernizr\",\n      \"Handlebars\",\n      \"Ext\",\n      \"_gaq\",\n      \"module\",\n      \"exports\",\n      \"define\",\n      \"$\",\n      \"jQuery\",\n      \"grunt\",\n      \"phantom\",\n      \"WebPage\",\n      \"by\"\n    ]\n}\n"
  },
  {
    "path": "README.md",
    "content": "ES6 + AngularJS\n===============\n\nThis is a sample Angular 1.3 application that is structured using ES6 modules and adheres to the [GoCardless Angular style guide](https://github.com/gocardless/angularjs-style-guide).\n\n## Prerequisites:\n\n- node.js: `brew install node`\n\n## Application Dependencies\n\nAll the dependencies required for the build system, testing and so on are managed with npm and defined in `package.json`. They can be installed with:\n\n```\nnpm install\n```\n\n## Running the Application\n\nYou can run `npm start` to fire up the application on `http://localhost:3010`.\n\n## Tests\n\nYou can use `npm test` to run JSHint, Karma Unit tests and our E2E tests.\n\nTypically in development we run only unit tests. You can run these with Karma:\n\n```\n./node_modules/.bin/karma start\n```\n\nKarma will automatically watch the files and rerun tests when files change.\n\n## Live Reloading\n\nInstall the [fb-flo](https://chrome.google.com/webstore/detail/fb-flo/ahkfhobdidabddlalamkkiafpipdfchp?hl=en) chrome extension.\n\nTo enable live-reloading have the developer tools open and activate fb-flo.\n\n## Build & Deployment\n\nCreate a production optimized build using [AssetGraph Builder](https://github.com/assetgraph/assetgraph-builder):\n\n```\nDIST=./dist ./script/build\n```\n\n## Debugging Protractor (E2E) tests\n\n### Running individual files\n\nServe `client/` on port `3010`\n\n```\nnpm start\n```\n\nRun protractor with `--specs` option\n\n```\nHTTP_PORT=3010 ./node_modules/.bin/protractor --specs client/app/routes/mandates/show/mandates-show.e2e.js\n```\n\n### Pausing the browser\n\nAdd `browser.pause();` to your spec.\n\n```js\nit('renders index', function() {\n  browser.get('app/index.html');\n\n  // Use browser.pause() in your test to enter the protractor debugger from\n  // that point in the control flow. Does not require changes to the command line\n  // (no need to add 'debug').\n  browser.pause();\n});\n```\n\n## Credits\n\n- Build system/ES6 tooling: [Guy Bedford](https://github.com/guybedford)\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"ES6 + AngularJS\",\n  \"version\": \"0.0.1-pre\",\n  \"homepage\": \"https://github.com/gocardless/es6-angularjs\",\n  \"authors\": [\n    \"GoCardless\"\n  ],\n  \"private\": true,\n  \"dependencies\": {\n    \"traceur-runtime\": \"0.0.74\",\n    \"system.js\": \"~0.10.2\",\n    \"plugin-text\": \"git@github.com:systemjs/plugin-text.git\",\n    \"plugin-json\": \"git@github.com:systemjs/plugin-json.git\",\n    \"angular\": \"1.3.6\",\n    \"angular-i18n\": \"1.3.6\",\n    \"angular-animate\": \"1.3.6\",\n    \"angular-touch\": \"1.3.6\",\n    \"angular-aria\": \"1.3.6\",\n    \"angular-messages\": \"1.3.6\",\n    \"angular-mocks\": \"1.3.6\",\n    \"angular-ui-router\": \"~0.2.13\",\n    \"normalize-css\": \"~3.0.2\",\n    \"lodash\": \"~2.4.1\",\n    \"assert\": \"git@github.com:angular/assert.git\"\n  },\n  \"resolutions\": {\n    \"angular\": \"1.3.6\"\n  }\n}\n"
  },
  {
    "path": "client/404.html",
    "content": "<!doctype html>\n<html>\n<meta charset=utf-8>\n<title>Oops! Page not found - ES6 + AngularJS</title>\n<style>\n  *, :before, :after {\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n\n  html, body {\n    height: 100%;\n  }\n\n  body {\n    margin: 0;\n    background: #F6F6F6;\n    font-family: Arial, sans-serif;\n    font-size: 14px;\n    line-height: 1.6;\n    color: #333;\n    -webkit-font-smoothing: antialiased;\n  }\n\n  h1 {\n    font-weight: normal;\n    font-size: 20px;\n  }\n\n  a {\n    color: #2891cd;\n    text-decoration: none;\n  }\n\n  a:hover {\n    text-decoration: underline;\n  }\n\n  hr {\n    border: none;\n    border-top: 1px solid #ccc;\n  }\n\n  .center {\n    display: table;\n    table-layout: fixed;\n    width: 100%;\n    height: 100%;\n  }\n\n  .center__inner {\n    display: table-cell;\n    vertical-align: middle;\n    width: 100%;\n    text-align: center;\n  }\n\n  .sticky-footer {\n    display: table;\n    table-layout: fixed;\n    width: 100%;\n    height: 100%;\n  }\n\n  .sticky-footer__container {\n    display: table-row;\n    height: 100%;\n  }\n\n  .sticky-footer__footer {\n    display: table-row;\n    height: 50px;\n    background: #FFFFFF;\n  }\n\n  .site-footer {\n    font-size: 13px;\n    border-top: 1px solid #E4E4E4;\n    padding: 0 20px;\n    line-height: 55px;\n  }\n\n  .site-footer__link {\n    margin-right: 25px;\n    color: #77777F;\n  }\n\n  .page-container {\n    max-width: 320px;\n    margin-left: auto;\n    margin-right: auto;\n  }\n</style>\n\n<body class=\"sticky-footer\">\n  <div class=\"sticky-footer__container\">\n    <div class=\"center\">\n      <div class=\"center__inner\">\n        <div class=\"page-container\">\n          <h1>Oops! This link appears broken.</h1>\n          <p>The page may have moved, or perhaps <br>\n            you mis-typed the address.</p>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"sticky-footer__footer\">\n    <div class=\"site-footer\">\n      <a href=\"https://github.com/gocardless/es6-angularjs\" class=\"site-footer__link\">ES6 + AngularJS</a>\n    </div>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "client/app/bootstrap.js",
    "content": "import angular from 'angular';\nimport {mainModule} from './main';\n\nangular.element(document).ready(function() {\n  angular.bootstrap(document.querySelector('[data-main-app]'), [\n    mainModule.name\n  ], {\n    strictDi: true\n  });\n});\n"
  },
  {
    "path": "client/app/components/auth-required/auth-required.controller.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\nimport _ from 'lodash';\n\nexport var authRequiredControllerModule = angular.module('authRequiredControllerModule', [\n  'ui.router'\n]).controller('AuthRequiredController', [\n  '$state',\n  function AuthRequiredController($state) {\n    var ctrl = this;\n\n    function isParentStateActive(parentState) {\n      return $state.includes(parentState);\n    }\n\n    _.extend(ctrl, {\n      isParentStateActive: isParentStateActive\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/components/auth-required/auth-required.directive.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\n\nimport {authRequiredControllerModule} from './auth-required.controller';\nimport template from './auth-required.template.html!text';\n\nexport var authRequiredComponentModule = angular.module('authRequiredComponentModule', [\n  'ui.router',\n  authRequiredControllerModule.name,\n]).directive('authRequired', [\n  function authRequiredDirective() {\n    return {\n      restrict: 'E',\n      template: template,\n      controller: 'AuthRequiredController',\n      controllerAs: 'ctrl',\n      bindToController: true,\n      scope: {}\n    };\n  }\n]);\n"
  },
  {
    "path": "client/app/components/auth-required/auth-required.template.html",
    "content": "<div>\n  <nav>\n    <a ui-sref=\"authRequired.home.index\"\n       ng-class=\"{ 'is-active': ctrl.isParentStateActive('authRequired.home') }\">\n      <span>Home</span>\n    </a>\n  </nav>\n\n  <main>\n    <ui-view></ui-view>\n  </main>\n</div>\n"
  },
  {
    "path": "client/app/components/site-header/site-header.directive.js",
    "content": "import angular from 'angular';\n\nimport template from './site-header.template.html!text';\n\nexport var siteHeaderComponentModule = angular.module('siteHeaderComponentModule', [\n]).directive('siteHeader', [\n  function siteHeader() {\n    return {\n      restrict: 'E',\n      template: template,\n      controller: angular.noop,\n      controllerAs: 'ctrl',\n      bindToController: true,\n      scope: {\n        currentUser: '='\n      }\n    };\n  }\n]);\n"
  },
  {
    "path": "client/app/components/site-header/site-header.template.html",
    "content": "<div>\n  <h1>ES6 + AngularJS</h1>\n  <p>User: {{ ctrl.currentUser.name }}</p>\n</div>\n"
  },
  {
    "path": "client/app/config/main.config.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\n\nimport {errorsRouteModule} from 'app/routes/errors/errors.route';\n\nexport var mainConfigModule = angular.module('mainConfigModule', [\n  'ui.router',\n  errorsRouteModule.name,\n]).config([\n  '$locationProvider', '$urlRouterProvider', '$httpProvider', '$compileProvider',\n  '$controllerProvider', '$rootScopeProvider',\n  function ($locationProvider, $urlRouterProvider, $httpProvider, $compileProvider,\n    $controllerProvider, $rootScopeProvider) {\n    $locationProvider.html5Mode(true);\n\n    $httpProvider.useApplyAsync(true);\n\n    $compileProvider.debugInfoEnabled(false);\n\n    $rootScopeProvider.digestTtl(8);\n\n    $urlRouterProvider.rule(function($injector, $location) {\n      var path = $location.path();\n\n      // Remove trailing slashes from path\n      if (path !== '/' && path.slice(-1) === '/') {\n        $location.replace().path(path.slice(0, -1));\n      }\n    });\n\n    $urlRouterProvider.otherwise('/404');\n  }\n]).run([\n  '$rootScope',\n  function($rootScope) {\n    $rootScope.$on('$stateChangeError', function $stateChangeError(event, toState,\n      toParams, fromState, fromParams, error) {\n      console.group();\n      console.error('$stateChangeError', error);\n      console.error(error.stack);\n      console.info('event', event);\n      console.info('toState', toState);\n      console.info('toParams', toParams);\n      console.info('fromState', fromState);\n      console.info('fromParams', fromParams);\n      console.groupEnd();\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/main.js",
    "content": "import angular from 'angular';\nimport 'angular-touch';\nimport 'angular-animate';\nimport 'angular-aria';\nimport 'angular-messages';\nimport 'angular-i18n-en-gb';\n\nimport {mainConfigModule} from 'app/config/main.config';\n\nimport {homeRouteModule} from 'app/routes/home/home.route';\n\nexport var mainModule = angular.module('mainModule', [\n  // ngTouch has to be BEFORE ngAria, else ng-clicks happen twice\n  'ngTouch',\n  'ngAnimate',\n  'ngAria',\n  'ngMessages',\n  mainConfigModule.name,\n\n  homeRouteModule.name\n]).run();\n"
  },
  {
    "path": "client/app/routes/auth-required.route.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\n\nimport {currentUserModule} from 'app/services/current-user/current-user';\nimport {siteHeaderComponentModule} from 'app/components/site-header/site-header.directive';\nimport {authRequiredComponentModule} from 'app/components/auth-required/auth-required.directive';\n\nexport var authRequiredRouteModule = angular.module('authRequiredRouteModule', [\n  'ui.router',\n  currentUserModule.name,\n  siteHeaderComponentModule.name,\n  authRequiredComponentModule.name,\n]).config([\n  '$stateProvider',\n  function authRequiredRoute($stateProvider) {\n\n    $stateProvider.state('authRequired', {\n      abstract: true,\n      views: {\n        '': {\n          template: '<auth-required></auth-required>'\n        },\n        'site-header': {\n          template: '<site-header current-user=\"ctrl.currentUser\"></site-header>',\n          controllerAs: 'ctrl',\n          controller: [\n            'currentUser',\n            function authRequiredSiteHeaderController(currentUser) {\n              var ctrl = this;\n              ctrl.currentUser = currentUser;\n            }\n          ]\n        }\n      },\n      resolve: {\n        currentUser: [\n          'CurrentUser',\n          function currentUserResolver(CurrentUser) {\n            return CurrentUser.get();\n          }\n        ]\n      }\n    });\n\n  }\n]);\n"
  },
  {
    "path": "client/app/routes/errors/404/errors-404.route.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\nimport template from './errors-404.template.html!text';\n\nexport var errors404RouteModule = angular.module('errors404RouteModule', [\n  'ui.router'\n]).config([\n  '$stateProvider',\n  function usersLoginRoute($stateProvider) {\n    $stateProvider.state('errors.404', {\n      url: '/404',\n      template: template\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/routes/errors/404/errors-404.template.html",
    "content": "<h1>Oops! This link appears broken.</h1>\n<p>The page may have moved, or perhaps <br>\n  you mis-typed the address.</p>\n"
  },
  {
    "path": "client/app/routes/errors/errors.route.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\nimport {errors404RouteModule} from './404/errors-404.route';\n\nexport var errorsRouteModule = angular.module('errorsRouteModule', [\n  'ui.router',\n  errors404RouteModule.name\n]).config([\n  '$stateProvider',\n  function errorsRoute($stateProvider) {\n    $stateProvider.state('errors', {\n      abstract: true,\n      template: '<ui-view></ui-view>'\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/routes/home/home.route.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\n\nimport {homeIndexRouteModule} from './index/home-index.route';\nimport {authRequiredRouteModule} from 'app/routes/auth-required.route';\n\nexport var homeRouteModule = angular.module('homeRouteModule', [\n  'ui.router',\n  authRequiredRouteModule.name,\n  homeIndexRouteModule.name\n]).config([\n  '$stateProvider',\n  function homeRoute($stateProvider) {\n    $stateProvider.state('authRequired.home', {\n      abstract: true,\n      template: '<ui-view></ui-view>'\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/routes/home/index/home-index.e2e.js",
    "content": "describe('home index', function() {\n  it('has heading', function() {\n    browser.get('/');\n    expect(element(by.css('h2')).getText()).toEqual('Example');\n  });\n});\n"
  },
  {
    "path": "client/app/routes/home/index/home-index.route.js",
    "content": "import angular from 'angular';\nimport 'angular-ui-router';\n\nimport {authRequiredRouteModule} from 'app/routes/auth-required.route';\nimport template from './home-index.template.html!text';\n\nexport var homeIndexRouteModule = angular.module('homeIndexRouteModule', [\n  'ui.router',\n  authRequiredRouteModule.name\n]).config([\n  '$stateProvider',\n  function homeRoute($stateProvider) {\n    $stateProvider.state('authRequired.home.index', {\n      url: '/',\n      template: template\n    });\n  }\n]);\n"
  },
  {
    "path": "client/app/routes/home/index/home-index.template.html",
    "content": "<div>\n  <h2>Example</h2>\n</div>\n"
  },
  {
    "path": "client/app/services/current-user/current-user.js",
    "content": "import angular from 'angular';\n\nexport var currentUserModule = angular.module('currentUserModule', [\n]).factory('CurrentUser', [\n  '$q',\n  function CurrentUser($q) {\n    function get() {\n      var deferred = $q.defer();\n\n      deferred.resolve({\n        name: 'GoCardless'\n      });\n\n      return deferred.promise;\n    }\n\n    return {\n      get: get\n    };\n  }\n]);\n"
  },
  {
    "path": "client/app/services/current-user/current-user.spec.js",
    "content": "import angular from 'angular';\nimport 'angular-mock';\n\nimport {currentUserModule} from './current-user';\n\ndescribe('CurrentUser', function() {\n  beforeEach(angular.mock.module(currentUserModule.name));\n\n  var CurrentUser, scope;\n\n  beforeEach(inject(function($injector) {\n    CurrentUser = $injector.get('CurrentUser');\n    scope = $injector.get('$rootScope');\n  }));\n\n  describe('.get', function() {\n    it('has a user', function() {\n      var user;\n      CurrentUser.get().then(function(data) {\n        user = data;\n      });\n      scope.$digest();\n      expect(user).toEqual({ name: 'GoCardless' });\n    });\n  });\n});\n"
  },
  {
    "path": "client/assets/stylesheets/main.css",
    "content": "@import 'variables.css';\n\n@import '../../components/normalize-css/normalize.css';\n\n@import 'shared/base.css';\n\n"
  },
  {
    "path": "client/assets/stylesheets/shared/base.css",
    "content": "/* ==========================================================================\n   Base\n   ========================================================================== */\n\n/**\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications. Removes the default spacing and border for\n * appropriate elements.\n */\n\n*, *:before, *:after {\n  box-sizing: border-box;\n}\n\nhtml,\nbody {\n  height: 100%;\n}\n\nhtml {\n  background: inherit;\n  font-size: var(--font-size-s);\n}\n\nhtml,\nbutton,\ninput,\nselect,\ntextarea {\n  color: var(--color-gray-vdark);\n  font-family: var(--font-family-base);\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n  line-height: var(--base-line-height);\n}\n\na {\n  color: var(--color-primary);\n  text-decoration: none;\n}\n\na:focus\na:hover,\na:active {\n  color: var(--color-primary);\n}\n\na:hover,\na:active {\n  text-decoration: underline;\n}\n\na:focus {\n  text-decoration: none;\n}\n\n:focus {\n  outline: 1px dotted var(--color-gray);\n}\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nbutton {\n  background: transparent;\n  border: 0;\n  padding: 0;\n}\n\nfieldset {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n\niframe {\n  border: 0;\n}\n\nol,\nul {\n  margin: 0;\n  list-style: none;\n  padding: 0;\n}\n\n/**\n * Suppress the focus outline on links that cannot be accessed via keyboard.\n * This prevents an unwanted focus outline from appearing around elements that\n * might still respond to pointer events.\n */\n\n[tabindex=\"-1\"]:focus {\n  outline: none !important;\n}\n\n/*\n* A better looking default horizontal rule\n*/\nhr {\n  box-sizing: border-box;\n  display: block;\n  height: 1px;\n  margin: 1.626 0;\n  padding: 0;\n  border: 0;\n  border-top: 1px solid var(--color-gray-vlight);\n}\n\n/*\n * Remove the gap between images and the bottom of their containers: h5bp.com/i/440\n */\nimg {\n  vertical-align: middle;\n  max-width: 100%;\n}\n\n/* Override normalize */\ninput[type=\"search\"] {\n  box-sizing: border-box;\n}\n\n/*\n * Allow only vertical resizing of textareas.\n * Reset height since textareas have rows\n */\ntextarea {\n  height: auto;\n  resize: vertical;\n}\n\n /* Make multiple select elements height not fixed  */\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\ninput[type='number']::-webkit-outer-spin-button,\ninput[type='number']::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n\n/* FF < 19  */\ninput:-moz-placeholder,\ntextarea:-moz-placeholder {\n  color: var(--color-gray);\n}\n\n/* FF >= 19  */\ninput::-moz-placeholder,\ntextarea::-moz-placeholder {\n  color: var(--color-gray);\n}\n\n/* IE 10  */\ninput:-ms-input-placeholder,\ntextarea:-ms-input-placeholder {\n  color: var(--color-gray);\n}\n\ninput::-webkit-input-placeholder,\ntextarea::-webkit-input-placeholder {\n  color: var(--color-gray);\n}\n\n/**\n * Hide when Angular is not yet loaded and initialized\n */\n[ng-cloak] {\n  display: none;\n}\n"
  },
  {
    "path": "client/assets/stylesheets/variables.css",
    "content": ":root {\n  --font-family-base: sans-serif;\n  --font-family-monospace: monospace;\n\n  --font-size-xxxl: 24px;\n  --font-size-xxl: 20px;\n  --font-size-xl: 18px;\n  --font-size-l: 16px;\n  --font-size-m: 15px;\n  --font-size-s: 14px;\n  --font-size-xs: 13px;\n  --font-size-xxs: 12px;\n  --font-size-xxxs: 11px;\n\n  --base-line-height: 1.625;\n\n  --color-gray-vdark: #555;\n  --color-gray: #A5A5A5;\n  --color-gray-vlight: #EEE;\n  --color-primary: #5092DA;\n}\n"
  },
  {
    "path": "client/components/angular/.bower.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular.js\",\n  \"ignore\": [],\n  \"dependencies\": {},\n  \"homepage\": \"https://github.com/angular/bower-angular\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"9acb014af4fd7b0ab001c64fa7bcac454ab4050b\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular\"\n}"
  },
  {
    "path": "client/components/angular/README.md",
    "content": "# packaged angular\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular\n```\n\nThen add a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular/angular.js\"></script>\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`.\nIf you're using [Browserify](https://github.com/substack/node-browserify), you can use\n[exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular`\nglobal.\n\n### bower\n\n```shell\nbower install angular\n```\n\nThen add a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular/angular.js\"></script>\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular/angular-csp.css",
    "content": "/* Include this file in your html if you are using the CSP mode. */\n\n@charset \"UTF-8\";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide:not(.ng-hide-animate) {\n  display: none !important;\n}\n\nng\\:form {\n  display: block;\n}\n"
  },
  {
    "path": "client/components/angular/angular.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, document, undefined) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning\n *   error from returned function, for cases when a particular type of error is useful.\n * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance\n */\n\nfunction minErr(module, ErrorConstructor) {\n  ErrorConstructor = ErrorConstructor || Error;\n  return function() {\n    var code = arguments[0],\n      prefix = '[' + (module ? module + ':' : '') + code + '] ',\n      template = arguments[1],\n      templateArgs = arguments,\n\n      message, i;\n\n    message = prefix + template.replace(/\\{\\d+\\}/g, function(match) {\n      var index = +match.slice(1, -1), arg;\n\n      if (index + 2 < templateArgs.length) {\n        return toDebugString(templateArgs[index + 2]);\n      }\n      return match;\n    });\n\n    message = message + '\\nhttp://errors.angularjs.org/1.3.5/' +\n      (module ? module + '/' : '') + code;\n    for (i = 2; i < arguments.length; i++) {\n      message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +\n        encodeURIComponent(toDebugString(arguments[i]));\n    }\n    return new ErrorConstructor(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global angular: true,\n  msie: true,\n  jqLite: true,\n  jQuery: true,\n  slice: true,\n  splice: true,\n  push: true,\n  toString: true,\n  ngMinErr: true,\n  angularModule: true,\n  uid: true,\n  REGEX_STRING_REGEXP: true,\n  VALIDITY_STATE_PROPERTY: true,\n\n  lowercase: true,\n  uppercase: true,\n  manualLowercase: true,\n  manualUppercase: true,\n  nodeName_: true,\n  isArrayLike: true,\n  forEach: true,\n  sortedKeys: true,\n  forEachSorted: true,\n  reverseParams: true,\n  nextUid: true,\n  setHashKey: true,\n  extend: true,\n  int: true,\n  inherit: true,\n  noop: true,\n  identity: true,\n  valueFn: true,\n  isUndefined: true,\n  isDefined: true,\n  isObject: true,\n  isString: true,\n  isNumber: true,\n  isDate: true,\n  isArray: true,\n  isFunction: true,\n  isRegExp: true,\n  isWindow: true,\n  isScope: true,\n  isFile: true,\n  isBlob: true,\n  isBoolean: true,\n  isPromiseLike: true,\n  trim: true,\n  escapeForRegexp: true,\n  isElement: true,\n  makeMap: true,\n  includes: true,\n  arrayRemove: true,\n  copy: true,\n  shallowCopy: true,\n  equals: true,\n  csp: true,\n  concat: true,\n  sliceArgs: true,\n  bind: true,\n  toJsonReplacer: true,\n  toJson: true,\n  fromJson: true,\n  startingTag: true,\n  tryDecodeURIComponent: true,\n  parseKeyValue: true,\n  toKeyValue: true,\n  encodeUriSegment: true,\n  encodeUriQuery: true,\n  angularInit: true,\n  bootstrap: true,\n  getTestability: true,\n  snake_case: true,\n  bindJQuery: true,\n  assertArg: true,\n  assertArgFn: true,\n  assertNotHasOwnProperty: true,\n  getter: true,\n  getBlockNodes: true,\n  hasOwnProperty: true,\n  createMap: true,\n\n  NODE_TYPE_ELEMENT: true,\n  NODE_TYPE_TEXT: true,\n  NODE_TYPE_COMMENT: true,\n  NODE_TYPE_DOCUMENT: true,\n  NODE_TYPE_DOCUMENT_FRAGMENT: true,\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc module\n * @name ng\n * @module ng\n * @description\n *\n * # ng (core module)\n * The ng module is loaded by default when an AngularJS application is started. The module itself\n * contains the essential components for an AngularJS application to function. The table below\n * lists a high level breakdown of each of the services/factories, filters, directives and testing\n * components available within this core module.\n *\n * <div doc-module-components=\"ng\"></div>\n */\n\nvar REGEX_STRING_REGEXP = /^\\/(.+)\\/([a-z]*)$/;\n\n// The name of a form control's ValidityState property.\n// This is used so that it's possible for internal tests to create mock ValidityStates.\nvar VALIDITY_STATE_PROPERTY = 'validity';\n\n/**\n * @ngdoc function\n * @name angular.lowercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to lowercase.\n * @param {string} string String to be converted to lowercase.\n * @returns {string} Lowercased string.\n */\nvar lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * @ngdoc function\n * @name angular.uppercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to uppercase.\n * @param {string} string String to be converted to uppercase.\n * @returns {string} Uppercased string.\n */\nvar uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives.\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar\n    msie,             // holds major version number for IE, or NaN if UA is not IE.\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    splice            = [].splice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    ngMinErr          = minErr('ng'),\n\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    uid               = 0;\n\n/**\n * documentMode is an IE-only property\n * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx\n */\nmsie = document.documentMode;\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n  if (obj == null || isWindow(obj)) {\n    return false;\n  }\n\n  var length = obj.length;\n\n  if (obj.nodeType === NODE_TYPE_ELEMENT && length) {\n    return true;\n  }\n\n  return isString(obj) || isArray(obj) || length === 0 ||\n         typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @module ng\n * @kind function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`\n * is the value of an object property or an array element, `key` is the object property key or\n * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.\n *\n * It is worth noting that `.forEach` does not iterate over inherited properties because it filters\n * using the `hasOwnProperty` method.\n *\n * Unlike ES262's\n * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),\n * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just\n * return the value provided.\n *\n   ```js\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key) {\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender: male']);\n   ```\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\n\nfunction forEach(obj, iterator, context) {\n  var key, length;\n  if (obj) {\n    if (isFunction(obj)) {\n      for (key in obj) {\n        // Need to check if hasOwnProperty exists,\n        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    } else if (isArray(obj) || isArrayLike(obj)) {\n      var isPrimitive = typeof obj !== 'object';\n      for (key = 0, length = obj.length; key < length; key++) {\n        if (isPrimitive || key in obj) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n        obj.forEach(iterator, context, obj);\n    } else {\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction sortedKeys(obj) {\n  return Object.keys(obj).sort();\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = sortedKeys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) { iteratorFn(key, value); };\n}\n\n/**\n * A consistent way of creating unique IDs in angular.\n *\n * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before\n * we hit number precision issues in JavaScript.\n *\n * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M\n *\n * @returns {number} an unique alpha-numeric string\n */\nfunction nextUid() {\n  return ++uid;\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  }\n  else {\n    delete obj.$$hashKey;\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @module ng\n * @kind function\n *\n * @description\n * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so\n * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.\n * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  var h = dst.$$hashKey;\n\n  for (var i = 1, ii = arguments.length; i < ii; i++) {\n    var obj = arguments[i];\n    if (obj) {\n      var keys = Object.keys(obj);\n      for (var j = 0, jj = keys.length; j < jj; j++) {\n        var key = keys[j];\n        dst[key] = obj[key];\n      }\n    }\n  }\n\n  setHashKey(dst, h);\n  return dst;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(Object.create(parent), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @module ng\n * @kind function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   ```js\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   ```\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @module ng\n * @kind function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   ```js\n     function transformer(transformationFn, value) {\n       return (transformationFn || angular.identity)(value);\n     };\n   ```\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function() {return value;};}\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value) {return typeof value === 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value) {return typeof value !== 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value) {\n  // http://jsperf.com/isobject4\n  return value !== null && typeof value === 'object';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value) {return typeof value === 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value) {return typeof value === 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value) {\n  return toString.call(value) === '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nvar isArray = Array.isArray;\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value) {return typeof value === 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.call(value) === '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.window === obj;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.call(obj) === '[object File]';\n}\n\n\nfunction isBlob(obj) {\n  return toString.call(obj) === '[object Blob]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\n\nfunction isPromiseLike(obj) {\n  return obj && isFunction(obj.then);\n}\n\n\nvar trim = function(value) {\n  return isString(value) ? value.trim() : value;\n};\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021\n// Prereq: s is a string.\nvar escapeForRegexp = function(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n};\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return !!(node &&\n    (node.nodeName  // we are a direct element\n    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str) {\n  var obj = {}, items = str.split(\",\"), i;\n  for (i = 0; i < items.length; i++)\n    obj[ items[i] ] = true;\n  return obj;\n}\n\n\nfunction nodeName_(element) {\n  return lowercase(element.nodeName || (element[0] && element[0].nodeName));\n}\n\nfunction includes(array, obj) {\n  return Array.prototype.indexOf.call(array, obj) != -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = array.indexOf(value);\n  if (index >= 0)\n    array.splice(index, 1);\n  return value;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @module ng\n * @kind function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for array) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to 'destination' an exception will be thrown.\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n <example module=\"copyExample\">\n <file name=\"index.html\">\n <div ng-controller=\"ExampleController\">\n <form novalidate class=\"simple-form\">\n Name: <input type=\"text\" ng-model=\"user.name\" /><br />\n E-mail: <input type=\"email\" ng-model=\"user.email\" /><br />\n Gender: <input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male\n <input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female<br />\n <button ng-click=\"reset()\">RESET</button>\n <button ng-click=\"update(user)\">SAVE</button>\n </form>\n <pre>form = {{user | json}}</pre>\n <pre>master = {{master | json}}</pre>\n </div>\n\n <script>\n  angular.module('copyExample', [])\n    .controller('ExampleController', ['$scope', function($scope) {\n      $scope.master= {};\n\n      $scope.update = function(user) {\n        // Example with 1 argument\n        $scope.master= angular.copy(user);\n      };\n\n      $scope.reset = function() {\n        // Example with 2 arguments\n        angular.copy($scope.master, $scope.user);\n      };\n\n      $scope.reset();\n    }]);\n </script>\n </file>\n </example>\n */\nfunction copy(source, destination, stackSource, stackDest) {\n  if (isWindow(source) || isScope(source)) {\n    throw ngMinErr('cpws',\n      \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n  }\n\n  if (!destination) {\n    destination = source;\n    if (source) {\n      if (isArray(source)) {\n        destination = copy(source, [], stackSource, stackDest);\n      } else if (isDate(source)) {\n        destination = new Date(source.getTime());\n      } else if (isRegExp(source)) {\n        destination = new RegExp(source.source, source.toString().match(/[^\\/]*$/)[0]);\n        destination.lastIndex = source.lastIndex;\n      } else if (isObject(source)) {\n        var emptyObject = Object.create(Object.getPrototypeOf(source));\n        destination = copy(source, emptyObject, stackSource, stackDest);\n      }\n    }\n  } else {\n    if (source === destination) throw ngMinErr('cpi',\n      \"Can't copy! Source and destination are identical.\");\n\n    stackSource = stackSource || [];\n    stackDest = stackDest || [];\n\n    if (isObject(source)) {\n      var index = stackSource.indexOf(source);\n      if (index !== -1) return stackDest[index];\n\n      stackSource.push(source);\n      stackDest.push(destination);\n    }\n\n    var result;\n    if (isArray(source)) {\n      destination.length = 0;\n      for (var i = 0; i < source.length; i++) {\n        result = copy(source[i], null, stackSource, stackDest);\n        if (isObject(source[i])) {\n          stackSource.push(source[i]);\n          stackDest.push(result);\n        }\n        destination.push(result);\n      }\n    } else {\n      var h = destination.$$hashKey;\n      if (isArray(destination)) {\n        destination.length = 0;\n      } else {\n        forEach(destination, function(value, key) {\n          delete destination[key];\n        });\n      }\n      for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n          result = copy(source[key], null, stackSource, stackDest);\n          if (isObject(source[key])) {\n            stackSource.push(source[key]);\n            stackDest.push(result);\n          }\n          destination[key] = result;\n        }\n      }\n      setHashKey(destination,h);\n    }\n\n  }\n  return destination;\n}\n\n/**\n * Creates a shallow copy of an object, an array or a primitive.\n *\n * Assumes that there are no proto properties for objects.\n */\nfunction shallowCopy(src, dst) {\n  if (isArray(src)) {\n    dst = dst || [];\n\n    for (var i = 0, ii = src.length; i < ii; i++) {\n      dst[i] = src[i];\n    }\n  } else if (isObject(src)) {\n    dst = dst || {};\n\n    for (var key in src) {\n      if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst || src;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @module ng\n * @kind function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavaScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2) {\n    if (t1 == 'object') {\n      if (isArray(o1)) {\n        if (!isArray(o2)) return false;\n        if ((length = o1.length) == o2.length) {\n          for (key = 0; key < length; key++) {\n            if (!equals(o1[key], o2[key])) return false;\n          }\n          return true;\n        }\n      } else if (isDate(o1)) {\n        if (!isDate(o2)) return false;\n        return equals(o1.getTime(), o2.getTime());\n      } else if (isRegExp(o1) && isRegExp(o2)) {\n        return o1.toString() == o2.toString();\n      } else {\n        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;\n        keySet = {};\n        for (key in o1) {\n          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n          if (!equals(o1[key], o2[key])) return false;\n          keySet[key] = true;\n        }\n        for (key in o2) {\n          if (!keySet.hasOwnProperty(key) &&\n              key.charAt(0) !== '$' &&\n              o2[key] !== undefined &&\n              !isFunction(o2[key])) return false;\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nvar csp = function() {\n  if (isDefined(csp.isActive_)) return csp.isActive_;\n\n  var active = !!(document.querySelector('[ng-csp]') ||\n                  document.querySelector('[data-ng-csp]'));\n\n  if (!active) {\n    try {\n      /* jshint -W031, -W054 */\n      new Function('');\n      /* jshint +W031, +W054 */\n    } catch (e) {\n      active = true;\n    }\n  }\n\n  return (csp.isActive_ = active);\n};\n\n\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @module ng\n * @kind function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, concat(curryArgs, arguments, 0))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @module ng\n * @kind function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n */\nfunction toJson(obj, pretty) {\n  if (typeof obj === 'undefined') return undefined;\n  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @module ng\n * @kind function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|string|number} Deserialized thingy.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.empty();\n  } catch (e) {}\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });\n  } catch (e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    // Ignore any invalid uri component\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns {Object.<string,boolean|Array>}\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {}, key_value, key;\n  forEach((keyValue || \"\").split('&'), function(keyValue) {\n    if (keyValue) {\n      key_value = keyValue.replace(/\\+/g,'%20').split('=');\n      key = tryDecodeURIComponent(key_value[0]);\n      if (isDefined(key)) {\n        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;\n        if (!hasOwnProperty.call(obj, key)) {\n          obj[key] = val;\n        } else if (isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%3B/gi, ';').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\nvar ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];\n\nfunction getNgAttribute(element, ngAttr) {\n  var attr, i, ii = ngAttrPrefixes.length;\n  element = jqLite(element);\n  for (i = 0; i < ii; ++i) {\n    attr = ngAttrPrefixes[i] + ngAttr;\n    if (isString(attr = element.attr(attr))) {\n      return attr;\n    }\n  }\n  return null;\n}\n\n/**\n * @ngdoc directive\n * @name ngApp\n * @module ng\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be\n *   created in \"strict-di\" mode. This means that the application will fail to invoke functions which\n *   do not use explicit function annotation (and are thus unsuitable for minification), as described\n *   in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in\n *   tracking down the root of these bugs.\n *\n * @description\n *\n * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive\n * designates the **root element** of the application and is typically placed near the root element\n * of the page - e.g. on the `<body>` or `<html>` tags.\n *\n * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`\n * found in the document will be used to define the root element to auto-bootstrap as an\n * application. To run multiple applications in an HTML document you must manually bootstrap them using\n * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.\n *\n * You can specify an **AngularJS module** to be used as the root module for the application.  This\n * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and\n * should contain the application code needed or have dependencies on other modules that will\n * contain the code. See {@link angular.module} for more information.\n *\n * In the example below if the `ngApp` directive were not placed on the `html` element then the\n * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`\n * would not be resolved to `3`.\n *\n * `ngApp` is the easiest, and most common, way to bootstrap an application.\n *\n <example module=\"ngAppDemo\">\n   <file name=\"index.html\">\n   <div ng-controller=\"ngAppDemoController\">\n     I can add: {{a}} + {{b}} =  {{ a+b }}\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {\n     $scope.a = 1;\n     $scope.b = 2;\n   });\n   </file>\n </example>\n *\n * Using `ngStrictDi`, you would see something like this:\n *\n <example ng-app-included=\"true\">\n   <file name=\"index.html\">\n   <div ng-app=\"ngAppStrictDemo\" ng-strict-di>\n       <div ng-controller=\"GoodController1\">\n           I can add: {{a}} + {{b}} =  {{ a+b }}\n\n           <p>This renders because the controller does not fail to\n              instantiate, by using explicit annotation style (see\n              script.js for details)\n           </p>\n       </div>\n\n       <div ng-controller=\"GoodController2\">\n           Name: <input ng-model=\"name\"><br />\n           Hello, {{name}}!\n\n           <p>This renders because the controller does not fail to\n              instantiate, by using explicit annotation style\n              (see script.js for details)\n           </p>\n       </div>\n\n       <div ng-controller=\"BadController\">\n           I can add: {{a}} + {{b}} =  {{ a+b }}\n\n           <p>The controller could not be instantiated, due to relying\n              on automatic function annotations (which are disabled in\n              strict mode). As such, the content of this section is not\n              interpolated, and there should be an error in your web console.\n           </p>\n       </div>\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppStrictDemo', [])\n     // BadController will fail to instantiate, due to relying on automatic function annotation,\n     // rather than an explicit annotation\n     .controller('BadController', function($scope) {\n       $scope.a = 1;\n       $scope.b = 2;\n     })\n     // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,\n     // due to using explicit annotations using the array style and $inject property, respectively.\n     .controller('GoodController1', ['$scope', function($scope) {\n       $scope.a = 1;\n       $scope.b = 2;\n     }])\n     .controller('GoodController2', GoodController2);\n     function GoodController2($scope) {\n       $scope.name = \"World\";\n     }\n     GoodController2.$inject = ['$scope'];\n   </file>\n   <file name=\"style.css\">\n   div[ng-controller] {\n       margin-bottom: 1em;\n       -webkit-border-radius: 4px;\n       border-radius: 4px;\n       border: 1px solid;\n       padding: .5em;\n   }\n   div[ng-controller^=Good] {\n       border-color: #d6e9c6;\n       background-color: #dff0d8;\n       color: #3c763d;\n   }\n   div[ng-controller^=Bad] {\n       border-color: #ebccd1;\n       background-color: #f2dede;\n       color: #a94442;\n       margin-bottom: 0;\n   }\n   </file>\n </example>\n */\nfunction angularInit(element, bootstrap) {\n  var appElement,\n      module,\n      config = {};\n\n  // The element `element` has priority over any other element\n  forEach(ngAttrPrefixes, function(prefix) {\n    var name = prefix + 'app';\n\n    if (!appElement && element.hasAttribute && element.hasAttribute(name)) {\n      appElement = element;\n      module = element.getAttribute(name);\n    }\n  });\n  forEach(ngAttrPrefixes, function(prefix) {\n    var name = prefix + 'app';\n    var candidate;\n\n    if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\\\:') + ']'))) {\n      appElement = candidate;\n      module = candidate.getAttribute(name);\n    }\n  });\n  if (appElement) {\n    config.strictDi = getNgAttribute(appElement, \"strict-di\") !== null;\n    bootstrap(appElement, module ? [module] : [], config);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @module ng\n * @description\n * Use this function to manually start up angular application.\n *\n * See: {@link guide/bootstrap Bootstrap}\n *\n * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link ng.directive:ngApp ngApp}.\n *\n * Angular will detect if it has been loaded into the browser more than once and only allow the\n * first loaded script to be bootstrapped and will report a warning to the browser console for\n * each of the subsequent scripts. This prevents strange results in applications, where otherwise\n * multiple instances of Angular try to work on the DOM.\n *\n * ```html\n * <!doctype html>\n * <html>\n * <body>\n * <div ng-controller=\"WelcomeController\">\n *   {{greeting}}\n * </div>\n *\n * <script src=\"angular.js\"></script>\n * <script>\n *   var app = angular.module('demo', [])\n *   .controller('WelcomeController', function($scope) {\n *       $scope.greeting = 'Welcome!';\n *   });\n *   angular.bootstrap(document, ['demo']);\n * </script>\n * </body>\n * </html>\n * ```\n *\n * @param {DOMElement} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a run block.\n *     See: {@link angular.module modules}\n * @param {Object=} config an object for defining configuration options for the application. The\n *     following keys are supported:\n *\n * * `strictDi` - disable automatic function annotation for the application. This is meant to\n *   assist in finding bugs which break minified code. Defaults to `false`.\n *\n * @returns {auto.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules, config) {\n  if (!isObject(config)) config = {};\n  var defaultConfig = {\n    strictDi: false\n  };\n  config = extend(defaultConfig, config);\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === document) ? 'document' : startingTag(element);\n      //Encode angle brackets to prevent input from being sanitized to empty string #8683\n      throw ngMinErr(\n          'btstrpd',\n          \"App Already Bootstrapped with this Element '{0}'\",\n          tag.replace(/</,'&lt;').replace(/>/,'&gt;'));\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n\n    if (config.debugInfoEnabled) {\n      // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.\n      modules.push(['$compileProvider', function($compileProvider) {\n        $compileProvider.debugInfoEnabled(true);\n      }]);\n    }\n\n    modules.unshift('ng');\n    var injector = createInjector(modules, config.strictDi);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',\n       function bootstrapApply(scope, element, compile, injector) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {\n    config.debugInfoEnabled = true;\n    window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');\n  }\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    doBootstrap();\n  };\n}\n\n/**\n * @ngdoc function\n * @name angular.reloadWithDebugInfo\n * @module ng\n * @description\n * Use this function to reload the current application with debug information turned on.\n * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.\n *\n * See {@link ng.$compileProvider#debugInfoEnabled} for more.\n */\nfunction reloadWithDebugInfo() {\n  window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;\n  window.location.reload();\n}\n\n/**\n * @name angular.getTestability\n * @module ng\n * @description\n * Get the testability service for the instance of Angular on the given\n * element.\n * @param {DOMElement} element DOM element which is the root of angular application.\n */\nfunction getTestability(rootElement) {\n  return angular.element(rootElement).injector().get('$$testability');\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator) {\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nvar bindJQueryFired = false;\nvar skipDestroyOnNextJQueryCleanData;\nfunction bindJQuery() {\n  var originalCleanData;\n\n  if (bindJQueryFired) {\n    return;\n  }\n\n  // bind to jQuery if present;\n  jQuery = window.jQuery;\n  // Use jQuery if it exists with proper functionality, otherwise default to us.\n  // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.\n  // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older\n  // versions. It will not work for sure with jQuery <1.7, though.\n  if (jQuery && jQuery.fn.on) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n\n    // All nodes removed from the DOM via various jQuery APIs like .remove()\n    // are passed through jQuery.cleanData. Monkey-patch this method to fire\n    // the $destroy event on all removed nodes.\n    originalCleanData = jQuery.cleanData;\n    jQuery.cleanData = function(elems) {\n      var events;\n      if (!skipDestroyOnNextJQueryCleanData) {\n        for (var i = 0, elem; (elem = elems[i]) != null; i++) {\n          events = jQuery._data(elem, \"events\");\n          if (events && events.$destroy) {\n            jQuery(elem).triggerHandler('$destroy');\n          }\n        }\n      } else {\n        skipDestroyOnNextJQueryCleanData = false;\n      }\n      originalCleanData(elems);\n    };\n  } else {\n    jqLite = JQLite;\n  }\n\n  angular.element = jqLite;\n\n  // Prevent double-proxying.\n  bindJQueryFired = true;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {String} path path to traverse\n * @param {boolean} [bindFnToScope=true]\n * @returns {Object} value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the DOM siblings between the first and last node in the given array.\n * @param {Array} array like object\n * @returns {jqLite} jqLite collection containing the nodes\n */\nfunction getBlockNodes(nodes) {\n  // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original\n  //             collection, otherwise update the original collection.\n  var node = nodes[0];\n  var endNode = nodes[nodes.length - 1];\n  var blockNodes = [node];\n\n  do {\n    node = node.nextSibling;\n    if (!node) break;\n    blockNodes.push(node);\n  } while (node !== endNode);\n\n  return jqLite(blockNodes);\n}\n\n\n/**\n * Creates a new object without a prototype. This object is useful for lookup without having to\n * guard against prototypically inherited properties via hasOwnProperty.\n *\n * Related micro-benchmarks:\n * - http://jsperf.com/object-create2\n * - http://jsperf.com/proto-map-lookup/2\n * - http://jsperf.com/for-in-vs-object-keys2\n *\n * @returns {Object}\n */\nfunction createMap() {\n  return Object.create(null);\n}\n\nvar NODE_TYPE_ELEMENT = 1;\nvar NODE_TYPE_TEXT = 3;\nvar NODE_TYPE_COMMENT = 8;\nvar NODE_TYPE_DOCUMENT = 9;\nvar NODE_TYPE_DOCUMENT_FRAGMENT = 11;\n\n/**\n * @ngdoc type\n * @name angular.Module\n * @module ng\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n  var ngMinErr = minErr('ng');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  var angular = ensure(window, 'angular', Object);\n\n  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap\n  angular.$$minErr = angular.$$minErr || minErr;\n\n  return ensure(angular, 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @module ng\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * When passed two or more arguments, a new module is created.  If passed only one argument, an\n     * existing module (the name passed as the first argument to `module`) is retrieved.\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, controllers, filters, and configuration information.\n     * `angular.module` is used to configure the {@link auto.$injector $injector}.\n     *\n     * ```js\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(['$locationProvider', function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * }]);\n     * ```\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * ```js\n     * var injector = angular.injector(['ng', 'myModule'])\n     * ```\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n     * @param {!Array.<string>=} requires If specified then new module is being created. If\n     *        unspecified then the module is being retrieved for further configuration.\n     * @param {Function=} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#config Module#config()}.\n     * @returns {module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      var assertNotHasOwnProperty = function(name, context) {\n        if (name === 'hasOwnProperty') {\n          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);\n        }\n      };\n\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var configBlocks = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _configBlocks: configBlocks,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @module ng\n           *\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @module ng\n           *\n           * @description\n           * Name of the module.\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link auto.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLater('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link auto.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLater('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link auto.$provide#service $provide.service()}.\n           */\n          service: invokeLater('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @module ng\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link auto.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @module ng\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constant are fixed, they get applied before other provide methods.\n           * See {@link auto.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @module ng\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link ngAnimate.$animate $animate} service and directives that use this service.\n           *\n           * ```js\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * ```\n           *\n           * See {@link ng.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLater('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @module ng\n           * @param {string} name Filter name.\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           */\n          filter: invokeLater('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @module ng\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLater('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @module ng\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.\n           */\n          directive: invokeLater('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @module ng\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           * For more about how to configure services, see\n           * {@link providers#provider-recipe Provider Recipe}.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @module ng\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod, queue) {\n          if (!queue) queue = invokeQueue;\n          return function() {\n            queue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global: toDebugString: true */\n\nfunction serializeObject(obj) {\n  var seen = [];\n\n  return JSON.stringify(obj, function(key, val) {\n    val = toJsonReplacer(key, val);\n    if (isObject(val)) {\n\n      if (seen.indexOf(val) >= 0) return '<<already seen>>';\n\n      seen.push(val);\n    }\n    return val;\n  });\n}\n\nfunction toDebugString(obj) {\n  if (typeof obj === 'function') {\n    return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n  } else if (typeof obj === 'undefined') {\n    return 'undefined';\n  } else if (typeof obj !== 'string') {\n    return serializeObject(obj);\n  }\n  return obj;\n}\n\n/* global angularModule: true,\n  version: true,\n\n  $LocaleProvider,\n  $CompileProvider,\n\n  htmlAnchorDirective,\n  inputDirective,\n  inputDirective,\n  formDirective,\n  scriptDirective,\n  selectDirective,\n  styleDirective,\n  optionDirective,\n  ngBindDirective,\n  ngBindHtmlDirective,\n  ngBindTemplateDirective,\n  ngClassDirective,\n  ngClassEvenDirective,\n  ngClassOddDirective,\n  ngCspDirective,\n  ngCloakDirective,\n  ngControllerDirective,\n  ngFormDirective,\n  ngHideDirective,\n  ngIfDirective,\n  ngIncludeDirective,\n  ngIncludeFillContentDirective,\n  ngInitDirective,\n  ngNonBindableDirective,\n  ngPluralizeDirective,\n  ngRepeatDirective,\n  ngShowDirective,\n  ngStyleDirective,\n  ngSwitchDirective,\n  ngSwitchWhenDirective,\n  ngSwitchDefaultDirective,\n  ngOptionsDirective,\n  ngTranscludeDirective,\n  ngModelDirective,\n  ngListDirective,\n  ngChangeDirective,\n  patternDirective,\n  patternDirective,\n  requiredDirective,\n  requiredDirective,\n  minlengthDirective,\n  minlengthDirective,\n  maxlengthDirective,\n  maxlengthDirective,\n  ngValueDirective,\n  ngModelOptionsDirective,\n  ngAttributeAliasDirectives,\n  ngEventDirectives,\n\n  $AnchorScrollProvider,\n  $AnimateProvider,\n  $BrowserProvider,\n  $CacheFactoryProvider,\n  $ControllerProvider,\n  $DocumentProvider,\n  $ExceptionHandlerProvider,\n  $FilterProvider,\n  $InterpolateProvider,\n  $IntervalProvider,\n  $HttpProvider,\n  $HttpBackendProvider,\n  $LocationProvider,\n  $LogProvider,\n  $ParseProvider,\n  $RootScopeProvider,\n  $QProvider,\n  $$QProvider,\n  $$SanitizeUriProvider,\n  $SceProvider,\n  $SceDelegateProvider,\n  $SnifferProvider,\n  $TemplateCacheProvider,\n  $TemplateRequestProvider,\n  $$TestabilityProvider,\n  $TimeoutProvider,\n  $$RAFProvider,\n  $$AsyncCallbackProvider,\n  $WindowProvider\n*/\n\n\n/**\n * @ngdoc object\n * @name angular.version\n * @module ng\n * @description\n * An object that contains information about the current AngularJS version. This object has the\n * following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.3.5',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: 3,\n  dot: 5,\n  codeName: 'cybernetic-mercantilism'\n};\n\n\nfunction publishExternalAPI(angular) {\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop': noop,\n    'bind': bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity': identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {counter: 0},\n    'getTestability': getTestability,\n    '$$minErr': minErr,\n    '$$csp': csp,\n    'reloadWithDebugInfo': reloadWithDebugInfo\n  });\n\n  angularModule = setupModuleLoader(window);\n  try {\n    angularModule('ngLocale');\n  } catch (e) {\n    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);\n  }\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.\n      $provide.provider({\n        $$sanitizeUri: $$SanitizeUriProvider\n      });\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            pattern: patternDirective,\n            ngPattern: patternDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            minlength: minlengthDirective,\n            ngMinlength: minlengthDirective,\n            maxlength: maxlengthDirective,\n            ngMaxlength: maxlengthDirective,\n            ngValue: ngValueDirective,\n            ngModelOptions: ngModelOptionsDirective\n        }).\n        directive({\n          ngInclude: ngIncludeFillContentDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpBackend: $HttpBackendProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $$q: $$QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $templateRequest: $TemplateRequestProvider,\n        $$testability: $$TestabilityProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider,\n        $$rAF: $$RAFProvider,\n        $$asyncCallback: $$AsyncCallbackProvider\n      });\n    }\n  ]);\n}\n\n/* global JQLitePrototype: true,\n  addEventListenerFn: true,\n  removeEventListenerFn: true,\n  BOOLEAN_ATTR: true,\n  ALIASED_ATTR: true,\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @module ng\n * @kind function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or \"jqLite.\"\n *\n * <div class=\"alert alert-success\">jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most\n * commonly needed functionality with the goal of having a very small footprint.</div>\n *\n * To use jQuery, simply load it before `DOMContentLoaded` event fired.\n *\n * <div class=\"alert\">**Note:** all element references in Angular are always wrapped with jQuery or\n * jqLite; they are never raw DOM references.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/)\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters\n * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`\n * - [`data()`](http://api.jquery.com/data/)\n * - [`detach()`](http://api.jquery.com/detach/)\n * - [`empty()`](http://api.jquery.com/empty/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors\n * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/)\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/)\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.\n * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current\n *   element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to\n *   be enabled.\n * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n *   Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nJQLite.expando = 'ng339';\n\nvar jqCache = JQLite.cache = {},\n    jqId = 1,\n    addEventListenerFn = function(element, type, fn) {\n      element.addEventListener(type, fn, false);\n    },\n    removeEventListenerFn = function(element, type, fn) {\n      element.removeEventListener(type, fn, false);\n    };\n\n/*\n * !!! This is an undocumented \"private\" function !!!\n */\nJQLite._data = function(node) {\n  //jQuery always returns an object on cache miss\n  return this.cache[node[this.expando]] || {};\n};\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar MOUSE_EVENT_MAP= { mouseleave: \"mouseout\", mouseenter: \"mouseover\"};\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\nvar SINGLE_TAG_REGEXP = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/;\nvar HTML_REGEXP = /<|&#?\\w+;/;\nvar TAG_NAME_REGEXP = /<([\\w:]+)/;\nvar XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi;\n\nvar wrapMap = {\n  'option': [1, '<select multiple=\"multiple\">', '</select>'],\n\n  'thead': [1, '<table>', '</table>'],\n  'col': [2, '<table><colgroup>', '</colgroup></table>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n  'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],\n  '_default': [0, \"\", \"\"]\n};\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction jqLiteIsTextNode(html) {\n  return !HTML_REGEXP.test(html);\n}\n\nfunction jqLiteAcceptsData(node) {\n  // The window object can accept data but has no nodeType\n  // Otherwise we are only interested in elements (1) and documents (9)\n  var nodeType = node.nodeType;\n  return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;\n}\n\nfunction jqLiteBuildFragment(html, context) {\n  var tmp, tag, wrap,\n      fragment = context.createDocumentFragment(),\n      nodes = [], i;\n\n  if (jqLiteIsTextNode(html)) {\n    // Convert non-html into a text node\n    nodes.push(context.createTextNode(html));\n  } else {\n    // Convert html into DOM nodes\n    tmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n    tag = (TAG_NAME_REGEXP.exec(html) || [\"\", \"\"])[1].toLowerCase();\n    wrap = wrapMap[tag] || wrapMap._default;\n    tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, \"<$1></$2>\") + wrap[2];\n\n    // Descend through wrappers to the right content\n    i = wrap[0];\n    while (i--) {\n      tmp = tmp.lastChild;\n    }\n\n    nodes = concat(nodes, tmp.childNodes);\n\n    tmp = fragment.firstChild;\n    tmp.textContent = \"\";\n  }\n\n  // Remove wrapper from fragment\n  fragment.textContent = \"\";\n  fragment.innerHTML = \"\"; // Clear inner HTML\n  forEach(nodes, function(node) {\n    fragment.appendChild(node);\n  });\n\n  return fragment;\n}\n\nfunction jqLiteParseHTML(html, context) {\n  context = context || document;\n  var parsed;\n\n  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {\n    return [context.createElement(parsed[1])];\n  }\n\n  if ((parsed = jqLiteBuildFragment(html, context))) {\n    return parsed.childNodes;\n  }\n\n  return [];\n}\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n\n  var argIsString;\n\n  if (isString(element)) {\n    element = trim(element);\n    argIsString = true;\n  }\n  if (!(this instanceof JQLite)) {\n    if (argIsString && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (argIsString) {\n    jqLiteAddNodes(this, jqLiteParseHTML(element));\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element, onlyDescendants) {\n  if (!onlyDescendants) jqLiteRemoveData(element);\n\n  if (element.querySelectorAll) {\n    var descendants = element.querySelectorAll('*');\n    for (var i = 0, l = descendants.length; i < l; i++) {\n      jqLiteRemoveData(descendants[i]);\n    }\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var expandoStore = jqLiteExpandoStore(element);\n  var events = expandoStore && expandoStore.events;\n  var handle = expandoStore && expandoStore.handle;\n\n  if (!handle) return; //no listeners registered\n\n  if (!type) {\n    for (type in events) {\n      if (type !== '$destroy') {\n        removeEventListenerFn(element, type, handle);\n      }\n      delete events[type];\n    }\n  } else {\n    forEach(type.split(' '), function(type) {\n      if (isDefined(fn)) {\n        var listenerFns = events[type];\n        arrayRemove(listenerFns || [], fn);\n        if (listenerFns && listenerFns.length > 0) {\n          return;\n        }\n      }\n\n      removeEventListenerFn(element, type, handle);\n      delete events[type];\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element.ng339;\n  var expandoStore = expandoId && jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete expandoStore.data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      if (expandoStore.events.$destroy) {\n        expandoStore.handle({}, '$destroy');\n      }\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it\n  }\n}\n\n\nfunction jqLiteExpandoStore(element, createIfNecessary) {\n  var expandoId = element.ng339,\n      expandoStore = expandoId && jqCache[expandoId];\n\n  if (createIfNecessary && !expandoStore) {\n    element.ng339 = expandoId = jqNextId();\n    expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};\n  }\n\n  return expandoStore;\n}\n\n\nfunction jqLiteData(element, key, value) {\n  if (jqLiteAcceptsData(element)) {\n\n    var isSimpleSetter = isDefined(value);\n    var isSimpleGetter = !isSimpleSetter && key && !isObject(key);\n    var massGetter = !key;\n    var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);\n    var data = expandoStore && expandoStore.data;\n\n    if (isSimpleSetter) { // data('key', value)\n      data[key] = value;\n    } else {\n      if (massGetter) {  // data()\n        return data;\n      } else {\n        if (isSimpleGetter) { // data('key')\n          // don't force creation of expandoStore if it doesn't exist yet\n          return data && data[key];\n        } else { // mass-setter: data({key1: val1, key2: val2})\n          extend(data, key);\n        }\n      }\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf(\" \" + selector + \" \") > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\n\nfunction jqLiteAddNodes(root, elements) {\n  // THIS CODE IS VERY HOT. Don't make changes without benchmarking.\n\n  if (elements) {\n\n    // if a Node (the most common case)\n    if (elements.nodeType) {\n      root[root.length++] = elements;\n    } else {\n      var length = elements.length;\n\n      // if an Array or NodeList and not a Window\n      if (typeof length === 'number' && elements.window !== elements) {\n        if (length) {\n          for (var i = 0; i < length; i++) {\n            root[root.length++] = elements[i];\n          }\n        }\n      } else {\n        root[root.length++] = elements;\n      }\n    }\n  }\n}\n\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if (element.nodeType == NODE_TYPE_DOCUMENT) {\n    element = element.documentElement;\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element) {\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if ((value = jqLite.data(element, names[i])) !== undefined) return value;\n    }\n\n    // If dealing with a document fragment node with a host element, and no parent, use the host\n    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM\n    // to lookup parent controllers.\n    element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);\n  }\n}\n\nfunction jqLiteEmpty(element) {\n  jqLiteDealoc(element, true);\n  while (element.firstChild) {\n    element.removeChild(element.firstChild);\n  }\n}\n\nfunction jqLiteRemove(element, keepData) {\n  if (!keepData) jqLiteDealoc(element);\n  var parent = element.parentNode;\n  if (parent) parent.removeChild(element);\n}\n\n\nfunction jqLiteDocumentLoaded(action, win) {\n  win = win || window;\n  if (win.document.readyState === 'complete') {\n    // Force the action to be run async for consistent behaviour\n    // from the action's point of view\n    // i.e. it will definitely not be in a $apply\n    win.setTimeout(action);\n  } else {\n    // No need to unbind this handler as load is only ever called once\n    jqLite(win).on('load', action);\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document is already loaded\n    if (document.readyState === 'complete') {\n      setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e) { value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[value] = true;\n});\nvar ALIASED_ATTR = {\n  'ngMinlength': 'minlength',\n  'ngMaxlength': 'maxlength',\n  'ngMin': 'min',\n  'ngMax': 'max',\n  'ngPattern': 'pattern'\n};\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;\n}\n\nfunction getAliasedAttrName(element, name) {\n  var nodeName = element.nodeName;\n  return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];\n}\n\nforEach({\n  data: jqLiteData,\n  removeData: jqLiteRemoveData\n}, function(fn, name) {\n  JQLite[name] = fn;\n});\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element, name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      return element.style[name];\n    }\n  },\n\n  attr: function(element, name, value) {\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name) || noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      if (isUndefined(value)) {\n        var nodeType = element.nodeType;\n        return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';\n      }\n      element.textContent = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (element.multiple && nodeName_(element) === 'select') {\n        var result = [];\n        forEach(element.options, function(option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    jqLiteDealoc(element, true);\n    element.innerHTML = value;\n  },\n\n  empty: jqLiteEmpty\n}, function(fn, name) {\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n    var nodeCount = this.length;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    // jqLiteEmpty takes no arguments but is a setter.\n    if (fn !== jqLiteEmpty &&\n        (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for (i = 0; i < nodeCount; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        // TODO: do we still need this?\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for (i = 0; i < nodeCount; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function(event, type) {\n    // jQuery specific api\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented;\n    };\n\n    var eventFns = events[type || event.type];\n    var eventFnsLength = eventFns ? eventFns.length : 0;\n\n    if (!eventFnsLength) return;\n\n    if (isUndefined(event.immediatePropagationStopped)) {\n      var originalStopImmediatePropagation = event.stopImmediatePropagation;\n      event.stopImmediatePropagation = function() {\n        event.immediatePropagationStopped = true;\n\n        if (event.stopPropagation) {\n          event.stopPropagation();\n        }\n\n        if (originalStopImmediatePropagation) {\n          originalStopImmediatePropagation.call(event);\n        }\n      };\n    }\n\n    event.isImmediatePropagationStopped = function() {\n      return event.immediatePropagationStopped === true;\n    };\n\n    // Copy event handlers in case event handlers array is modified during execution.\n    if ((eventFnsLength > 1)) {\n      eventFns = shallowCopy(eventFns);\n    }\n\n    for (var i = 0; i < eventFnsLength; i++) {\n      if (!event.isImmediatePropagationStopped()) {\n        eventFns[i].call(element, event);\n      }\n    }\n  };\n\n  // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all\n  //       events on `element`\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  on: function jqLiteOn(element, type, fn, unsupported) {\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    // Do not add event handlers to non-elements because they will not be cleaned up.\n    if (!jqLiteAcceptsData(element)) {\n      return;\n    }\n\n    var expandoStore = jqLiteExpandoStore(element, true);\n    var events = expandoStore.events;\n    var handle = expandoStore.handle;\n\n    if (!handle) {\n      handle = expandoStore.handle = createEventHandler(element, events);\n    }\n\n    // http://jsperf.com/string-indexof-vs-split\n    var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];\n    var i = types.length;\n\n    while (i--) {\n      type = types[i];\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        events[type] = [];\n\n        if (type === 'mouseenter' || type === 'mouseleave') {\n          // Refer to jQuery's implementation of mouseenter & mouseleave\n          // Read about mouseenter and mouseleave:\n          // http://www.quirksmode.org/js/events_mouse.html#link8\n\n          jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {\n            var target = this, related = event.relatedTarget;\n            // For mousenter/leave call the handler if related is outside the target.\n            // NB: No relatedTarget if the mouse left/entered the browser window\n            if (!related || (related !== target && !target.contains(related))) {\n              handle(event, type);\n            }\n          });\n\n        } else {\n          if (type !== '$destroy') {\n            addEventListenerFn(element, type, handle);\n          }\n        }\n        eventFns = events[type];\n      }\n      eventFns.push(fn);\n    }\n  },\n\n  off: jqLiteOff,\n\n  one: function(element, type, fn) {\n    element = jqLite(element);\n\n    //add the listener twice so that when it is called\n    //you can remove the original function and still be\n    //able to call element.off(ev, fn) normally\n    element.on(type, function onFn() {\n      element.off(type, fn);\n      element.off(type, onFn);\n    });\n    element.on(type, fn);\n  },\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node) {\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element) {\n      if (element.nodeType === NODE_TYPE_ELEMENT)\n        children.push(element);\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.contentDocument || element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    var nodeType = element.nodeType;\n    if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;\n\n    node = new JQLite(node);\n\n    for (var i = 0, ii = node.length; i < ii; i++) {\n      var child = node[i];\n      element.appendChild(child);\n    }\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === NODE_TYPE_ELEMENT) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child) {\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    wrapNode = jqLite(wrapNode).eq(0).clone()[0];\n    var parent = element.parentNode;\n    if (parent) {\n      parent.replaceChild(wrapNode, element);\n    }\n    wrapNode.appendChild(element);\n  },\n\n  remove: jqLiteRemove,\n\n  detach: function(element) {\n    jqLiteRemove(element, true);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    newElement = new JQLite(newElement);\n\n    for (var i = 0, ii = newElement.length; i < ii; i++) {\n      var node = newElement[i];\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    }\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (selector) {\n      forEach(selector.split(' '), function(className) {\n        var classCondition = condition;\n        if (isUndefined(classCondition)) {\n          classCondition = !jqLiteHasClass(element, className);\n        }\n        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);\n      });\n    }\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;\n  },\n\n  next: function(element) {\n    return element.nextElementSibling;\n  },\n\n  find: function(element, selector) {\n    if (element.getElementsByTagName) {\n      return element.getElementsByTagName(selector);\n    } else {\n      return [];\n    }\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, event, extraParameters) {\n\n    var dummyEvent, eventFnsCopy, handlerArgs;\n    var eventName = event.type || event;\n    var expandoStore = jqLiteExpandoStore(element);\n    var events = expandoStore && expandoStore.events;\n    var eventFns = events && events[eventName];\n\n    if (eventFns) {\n      // Create a dummy event to pass to the handlers\n      dummyEvent = {\n        preventDefault: function() { this.defaultPrevented = true; },\n        isDefaultPrevented: function() { return this.defaultPrevented === true; },\n        stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },\n        isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },\n        stopPropagation: noop,\n        type: eventName,\n        target: element\n      };\n\n      // If a custom event was provided then extend our dummy event with it\n      if (event.type) {\n        dummyEvent = extend(dummyEvent, event);\n      }\n\n      // Copy event handlers in case event handlers array is modified during execution.\n      eventFnsCopy = shallowCopy(eventFns);\n      handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];\n\n      forEach(eventFnsCopy, function(fn) {\n        if (!dummyEvent.isImmediatePropagationStopped()) {\n          fn.apply(element, handlerArgs);\n        }\n      });\n    }\n  }\n}, function(fn, name) {\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n\n    for (var i = 0, ii = this.length; i < ii; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj, nextUidFn) {\n  var key = obj && obj.$$hashKey;\n\n  if (key) {\n    if (typeof key === 'function') {\n      key = obj.$$hashKey();\n    }\n    return key;\n  }\n\n  var objType = typeof obj;\n  if (objType == 'function' || (objType == 'object' && obj !== null)) {\n    key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();\n  } else {\n    key = objType + ':' + obj;\n  }\n\n  return key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array, isolatedUid) {\n  if (isolatedUid) {\n    var uid = 0;\n    this.nextUid = function() {\n      return ++uid;\n    };\n  }\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key, this.nextUid)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns {Object} the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key, this.nextUid)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key, this.nextUid)];\n    delete this[key];\n    return value;\n  }\n};\n\n/**\n * @ngdoc function\n * @module ng\n * @name angular.injector\n * @kind function\n *\n * @description\n * Creates an injector object that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *     {@link angular.module}. The `ng` module must be explicitly added.\n * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which\n *     disallows argument name annotation inference.\n * @returns {injector} Injector object. See {@link auto.$injector $injector}.\n *\n * @example\n * Typical usage\n * ```js\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document) {\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * ```\n *\n * Sometimes you want to get access to the injector of a currently running Angular app\n * from outside Angular. Perhaps, you want to inject and compile some markup after the\n * application has been bootstrapped. You can do this using the extra `injector()` added\n * to JQuery/jqLite elements. See {@link angular.element}.\n *\n * *This is fairly rare but could be the case if a third party library is injecting the\n * markup.*\n *\n * In the following example a new block of HTML containing a `ng-controller`\n * directive is added to the end of the document body by JQuery. We then compile and link\n * it into the current AngularJS scope.\n *\n * ```js\n * var $div = $('<div ng-controller=\"MyCtrl\">{{content.label}}</div>');\n * $(document.body).append($div);\n *\n * angular.element(document).injector().invoke(function($compile) {\n *   var scope = angular.element($div).scope();\n *   $compile($div)(scope);\n * });\n * ```\n */\n\n\n/**\n * @ngdoc module\n * @name auto\n * @description\n *\n * Implicit module which gets automatically added to each {@link auto.$injector $injector}.\n */\n\nvar FN_ARGS = /^function\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\n\nfunction anonFn(fn) {\n  // For anonymous functions, showing at the very least the function signature can help in\n  // debugging.\n  var fnText = fn.toString().replace(STRIP_COMMENTS, ''),\n      args = fnText.match(FN_ARGS);\n  if (args) {\n    return 'function(' + (args[1] || '').replace(/[\\s\\r\\n]+/, ' ') + ')';\n  }\n  return 'fn';\n}\n\nfunction annotate(fn, strictDi, name) {\n  var $inject,\n      fnText,\n      argDecl,\n      last;\n\n  if (typeof fn === 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        if (strictDi) {\n          if (!isString(name) || !name) {\n            name = fn.name || anonFn(fn);\n          }\n          throw $injectorMinErr('strictdi',\n            '{0} is not using explicit annotation and cannot be invoked in strict mode', name);\n        }\n        fnText = fn.toString().replace(STRIP_COMMENTS, '');\n        argDecl = fnText.match(FN_ARGS);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {\n          arg.replace(FN_ARG, function(all, underscore, name) {\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $injector\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link auto.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * ```js\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector) {\n *     return $injector;\n *   })).toBe($injector);\n * ```\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * ```js\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * ```\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. This method of discovering\n * annotations is disallowed when the injector is in strict mode.\n * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the\n * argument names.\n *\n * ## `$inject` Annotation\n * By adding an `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name $injector#get\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name $injector#invoke\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {!Function} fn The function to invoke. Function parameters are injected according to the\n *   {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name $injector#has\n *\n * @description\n * Allows the user to query if the particular service exists.\n *\n * @param {string} name Name of the service to query.\n * @returns {boolean} `true` if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name $injector#instantiate\n * @description\n * Create a new instance of JS type. The method takes a constructor function, invokes the new\n * operator, and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {Function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name $injector#annotate\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * ```js\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * You can disallow this method by using strict injection mode.\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * ```js\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController['$inject'] = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * ```js\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * ```\n *\n * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc service\n * @name $provide\n *\n * @description\n *\n * The {@link auto.$provide $provide} service has a number of methods for registering components\n * with the {@link auto.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link auto.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link auto.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the\n *     {@link auto.$injector $injector}\n * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name $provide#provider\n * @description\n *\n * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.\n *   - `Constructor`: a new instance of the provider will be created using\n *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link auto.$provide#provider $provide.provider()}.\n *\n * ```js\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * ```\n */\n\n/**\n * @ngdoc method\n * @name $provide#factory\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand\n *                            for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * ```js\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#service\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is the service\n * constructor function that will be used to instantiate the service instance.\n *\n * You should use {@link auto.$provide#service $provide.service(class)} if you define your service\n * as a type/class.\n *\n * @param {string} name The name of the instance.\n * @param {Function} constructor A class (constructor function) that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link auto.$provide#service $provide.service(class)}.\n * ```js\n *   var Ping = function($http) {\n *     this.$http = $http;\n *   };\n *\n *   Ping.$inject = ['$http'];\n *\n *   Ping.prototype.send = function() {\n *     return this.$http.get('/ping');\n *   };\n *   $provide.service('ping', Ping);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping.send();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#value\n * @description\n *\n * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a\n * number, an array, an object or a function.  This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular\n * {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * ```js\n *   $provide.value('ADMIN_USER', 'admin');\n *\n *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.value('halfOf', function(value) {\n *     return value / 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#constant\n * @description\n *\n * Register a **constant service**, such as a string, a number, an array, an object or a function,\n * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * ```js\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#decorator\n * @description\n *\n * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator\n * intercepts the creation of a service, allowing it to override or modify the behaviour of the\n * service. The object returned by the decorator may be the original service, or a new service\n * object which replaces or wraps and delegates to the original service.\n *\n * @param {string} name The name of the service to decorate.\n * @param {function()} decorator This function will be invoked when the service needs to be\n *    instantiated and should return the decorated service instance. The function is called using\n *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * ```js\n *   $provide.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * ```\n */\n\n\nfunction createInjector(modulesToLoad, strictDi) {\n  strictDi = (strictDi === true);\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap([], true),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function() {\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      instanceInjector = (instanceCache.$injector =\n          createInternalInjector(instanceCache, function(servicename) {\n            var provider = providerInjector.get(servicename + providerSuffix);\n            return instanceInjector.invoke(provider.$get, provider, undefined, servicename);\n          }));\n\n\n  forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function enforceReturnValue(name, factory) {\n    return function enforcedReturnValue() {\n      var result = instanceInjector.invoke(factory, this, undefined, name);\n      if (isUndefined(result)) {\n        throw $injectorMinErr('undef', \"Provider '{0}' must return a value from $get factory method.\", name);\n      }\n      return result;\n    };\n  }\n\n  function factory(name, factoryFn, enforce) {\n    return provider(name, {\n      $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn\n    });\n  }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val), false); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad) {\n    var runBlocks = [], moduleFn;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      function runInvokeQueue(queue) {\n        var i, ii;\n        for (i = 0, ii = queue.length; i < ii; i++) {\n          var invokeArgs = queue[i],\n              provider = providerInjector.get(invokeArgs[0]);\n\n          provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n        }\n      }\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n          runInvokeQueue(moduleFn._invokeQueue);\n          runInvokeQueue(moduleFn._configBlocks);\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}',\n                    serviceName + ' <- ' + path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName);\n        } catch (err) {\n          if (cache[serviceName] === INSTANTIATING) {\n            delete cache[serviceName];\n          }\n          throw err;\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n    function invoke(fn, self, locals, serviceName) {\n      if (typeof locals === 'string') {\n        serviceName = locals;\n        locals = null;\n      }\n\n      var args = [],\n          $inject = annotate(fn, strictDi, serviceName),\n          length, i,\n          key;\n\n      for (i = 0, length = $inject.length; i < length; i++) {\n        key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(\n          locals && locals.hasOwnProperty(key)\n          ? locals[key]\n          : getService(key)\n        );\n      }\n      if (isArray(fn)) {\n        fn = fn[length];\n      }\n\n      // http://jsperf.com/angularjs-invoke-apply-vs-switch\n      // #5388\n      return fn.apply(self, args);\n    }\n\n    function instantiate(Type, locals, serviceName) {\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      // Object creation: http://jsperf.com/create-constructor/2\n      var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);\n      var returnedValue = invoke(Type, instance, locals, serviceName);\n\n      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;\n    }\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\ncreateInjector.$$annotate = annotate;\n\n/**\n * @ngdoc provider\n * @name $anchorScrollProvider\n *\n * @description\n * Use `$anchorScrollProvider` to disable automatic scrolling whenever\n * {@link ng.$location#hash $location.hash()} changes.\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $anchorScrollProvider#disableAutoScrolling\n   *\n   * @description\n   * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to\n   * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />\n   * Use this method to disable automatic scrolling.\n   *\n   * If automatic scrolling is disabled, one must explicitly call\n   * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the\n   * current hash.\n   */\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  /**\n   * @ngdoc service\n   * @name $anchorScroll\n   * @kind function\n   * @requires $window\n   * @requires $location\n   * @requires $rootScope\n   *\n   * @description\n   * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and\n   * scrolls to the related element, according to the rules specified in the\n   * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).\n   *\n   * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to\n   * match any anchor whenever it changes. This can be disabled by calling\n   * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.\n   *\n   * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a\n   * vertical scroll-offset (either fixed or dynamic).\n   *\n   * @property {(number|function|jqLite)} yOffset\n   * If set, specifies a vertical scroll-offset. This is often useful when there are fixed\n   * positioned elements at the top of the page, such as navbars, headers etc.\n   *\n   * `yOffset` can be specified in various ways:\n   * - **number**: A fixed number of pixels to be used as offset.<br /><br />\n   * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return\n   *   a number representing the offset (in pixels).<br /><br />\n   * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from\n   *   the top of the page to the element's bottom will be used as offset.<br />\n   *   **Note**: The element will be taken into account only as long as its `position` is set to\n   *   `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust\n   *   their height and/or positioning according to the viewport's size.\n   *\n   * <br />\n   * <div class=\"alert alert-warning\">\n   * In order for `yOffset` to work properly, scrolling should take place on the document's root and\n   * not some child element.\n   * </div>\n   *\n   * @example\n     <example module=\"anchorScrollExample\">\n       <file name=\"index.html\">\n         <div id=\"scrollArea\" ng-controller=\"ScrollController\">\n           <a ng-click=\"gotoBottom()\">Go to bottom</a>\n           <a id=\"bottom\"></a> You're at the bottom!\n         </div>\n       </file>\n       <file name=\"script.js\">\n         angular.module('anchorScrollExample', [])\n           .controller('ScrollController', ['$scope', '$location', '$anchorScroll',\n             function ($scope, $location, $anchorScroll) {\n               $scope.gotoBottom = function() {\n                 // set the location.hash to the id of\n                 // the element you wish to scroll to.\n                 $location.hash('bottom');\n\n                 // call $anchorScroll()\n                 $anchorScroll();\n               };\n             }]);\n       </file>\n       <file name=\"style.css\">\n         #scrollArea {\n           height: 280px;\n           overflow: auto;\n         }\n\n         #bottom {\n           display: block;\n           margin-top: 2000px;\n         }\n       </file>\n     </example>\n   *\n   * <hr />\n   * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).\n   * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.\n   *\n   * @example\n     <example module=\"anchorScrollOffsetExample\">\n       <file name=\"index.html\">\n         <div class=\"fixed-header\" ng-controller=\"headerCtrl\">\n           <a href=\"\" ng-click=\"gotoAnchor(x)\" ng-repeat=\"x in [1,2,3,4,5]\">\n             Go to anchor {{x}}\n           </a>\n         </div>\n         <div id=\"anchor{{x}}\" class=\"anchor\" ng-repeat=\"x in [1,2,3,4,5]\">\n           Anchor {{x}} of 5\n         </div>\n       </file>\n       <file name=\"script.js\">\n         angular.module('anchorScrollOffsetExample', [])\n           .run(['$anchorScroll', function($anchorScroll) {\n             $anchorScroll.yOffset = 50;   // always scroll by 50 extra pixels\n           }])\n           .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',\n             function ($anchorScroll, $location, $scope) {\n               $scope.gotoAnchor = function(x) {\n                 var newHash = 'anchor' + x;\n                 if ($location.hash() !== newHash) {\n                   // set the $location.hash to `newHash` and\n                   // $anchorScroll will automatically scroll to it\n                   $location.hash('anchor' + x);\n                 } else {\n                   // call $anchorScroll() explicitly,\n                   // since $location.hash hasn't changed\n                   $anchorScroll();\n                 }\n               };\n             }\n           ]);\n       </file>\n       <file name=\"style.css\">\n         body {\n           padding-top: 50px;\n         }\n\n         .anchor {\n           border: 2px dashed DarkOrchid;\n           padding: 10px 10px 200px 10px;\n         }\n\n         .fixed-header {\n           background-color: rgba(0, 0, 0, 0.2);\n           height: 50px;\n           position: fixed;\n           top: 0; left: 0; right: 0;\n         }\n\n         .fixed-header > a {\n           display: inline-block;\n           margin: 5px 15px;\n         }\n       </file>\n     </example>\n   */\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // Helper function to get first anchor from a NodeList\n    // (using `Array#some()` instead of `angular#forEach()` since it's more performant\n    //  and working in all supported browsers.)\n    function getFirstAnchor(list) {\n      var result = null;\n      Array.prototype.some.call(list, function(element) {\n        if (nodeName_(element) === 'a') {\n          result = element;\n          return true;\n        }\n      });\n      return result;\n    }\n\n    function getYOffset() {\n\n      var offset = scroll.yOffset;\n\n      if (isFunction(offset)) {\n        offset = offset();\n      } else if (isElement(offset)) {\n        var elem = offset[0];\n        var style = $window.getComputedStyle(elem);\n        if (style.position !== 'fixed') {\n          offset = 0;\n        } else {\n          offset = elem.getBoundingClientRect().bottom;\n        }\n      } else if (!isNumber(offset)) {\n        offset = 0;\n      }\n\n      return offset;\n    }\n\n    function scrollTo(elem) {\n      if (elem) {\n        elem.scrollIntoView();\n\n        var offset = getYOffset();\n\n        if (offset) {\n          // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.\n          // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the\n          // top of the viewport.\n          //\n          // IF the number of pixels from the top of `elem` to the end of the page's content is less\n          // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some\n          // way down the page.\n          //\n          // This is often the case for elements near the bottom of the page.\n          //\n          // In such cases we do not need to scroll the whole `offset` up, just the difference between\n          // the top of the element and the offset, which is enough to align the top of `elem` at the\n          // desired position.\n          var elemTop = elem.getBoundingClientRect().top;\n          $window.scrollBy(0, elemTop - offset);\n        }\n      } else {\n        $window.scrollTo(0, 0);\n      }\n    }\n\n    function scroll() {\n      var hash = $location.hash(), elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) scrollTo(null);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) scrollTo(elm);\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') scrollTo(null);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction(newVal, oldVal) {\n          // skip the initial scroll if $location.hash is empty\n          if (newVal === oldVal && newVal === '') return;\n\n          jqLiteDocumentLoaded(function() {\n            $rootScope.$evalAsync(scroll);\n          });\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\n\n/**\n * @ngdoc provider\n * @name $animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM\n * updates and calls done() callbacks.\n *\n * In order to enable animations the ngAnimate module has to be loaded.\n *\n * To see the functional implementation check out src/ngAnimate/animate.js\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n\n\n  this.$$selectors = {};\n\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#register\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`\n   *   must be called once the element animation is complete. If a function is returned then the\n   *   animation service will use this function to cancel the animation whenever a cancel event is\n   *   triggered.\n   *\n   *\n   * ```js\n   *   return {\n     *     eventFn : function(element, done) {\n     *       //code to run the animation\n     *       //once complete, then run done()\n     *       return function cancellationFunction() {\n     *         //code to cancel the animation\n     *       }\n     *     }\n     *   }\n   * ```\n   *\n   * @param {string} name The name of the animation.\n   * @param {Function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    var key = name + '-animation';\n    if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',\n        \"Expecting class selector starting with '.' got '{0}'.\", name);\n    this.$$selectors[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#classNameFilter\n   *\n   * @description\n   * Sets and/or returns the CSS class regular expression that is checked when performing\n   * an animation. Upon bootstrap the classNameFilter value is not set at all and will\n   * therefore enable $animate to attempt to perform an animation on any element.\n   * When setting the classNameFilter value, animations will only be performed on elements\n   * that successfully match the filter expression. This in turn can boost performance\n   * for low-powered devices as well as applications containing a lot of structural operations.\n   * @param {RegExp=} expression The className expression which will be checked against all animations\n   * @return {RegExp} The current CSS className expression value. If null then there is no expression value\n   */\n  this.classNameFilter = function(expression) {\n    if (arguments.length === 1) {\n      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;\n    }\n    return this.$$classNameFilter;\n  };\n\n  this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {\n\n    var currentDefer;\n\n    function runAnimationPostDigest(fn) {\n      var cancelFn, defer = $$q.defer();\n      defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {\n        cancelFn && cancelFn();\n      };\n\n      $rootScope.$$postDigest(function ngAnimatePostDigest() {\n        cancelFn = fn(function ngAnimateNotifyComplete() {\n          defer.resolve();\n        });\n      });\n\n      return defer.promise;\n    }\n\n    function resolveElementClasses(element, classes) {\n      var toAdd = [], toRemove = [];\n\n      var hasClasses = createMap();\n      forEach((element.attr('class') || '').split(/\\s+/), function(className) {\n        hasClasses[className] = true;\n      });\n\n      forEach(classes, function(status, className) {\n        var hasClass = hasClasses[className];\n\n        // If the most recent class manipulation (via $animate) was to remove the class, and the\n        // element currently has the class, the class is scheduled for removal. Otherwise, if\n        // the most recent class manipulation (via $animate) was to add the class, and the\n        // element does not currently have the class, the class is scheduled to be added.\n        if (status === false && hasClass) {\n          toRemove.push(className);\n        } else if (status === true && !hasClass) {\n          toAdd.push(className);\n        }\n      });\n\n      return (toAdd.length + toRemove.length) > 0 &&\n        [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null];\n    }\n\n    function cachedClassManipulation(cache, classes, op) {\n      for (var i=0, ii = classes.length; i < ii; ++i) {\n        var className = classes[i];\n        cache[className] = op;\n      }\n    }\n\n    function asyncPromise() {\n      // only serve one instance of a promise in order to save CPU cycles\n      if (!currentDefer) {\n        currentDefer = $$q.defer();\n        $$asyncCallback(function() {\n          currentDefer.resolve();\n          currentDefer = null;\n        });\n      }\n      return currentDefer.promise;\n    }\n\n    function applyStyles(element, options) {\n      if (angular.isObject(options)) {\n        var styles = extend(options.from || {}, options.to || {});\n        element.css(styles);\n      }\n    }\n\n    /**\n     *\n     * @ngdoc service\n     * @name $animate\n     * @description The $animate service provides rudimentary DOM manipulation functions to\n     * insert, remove and move elements within the DOM, as well as adding and removing classes.\n     * This service is the core service used by the ngAnimate $animator service which provides\n     * high-level animation hooks for CSS and JavaScript.\n     *\n     * $animate is available in the AngularJS core, however, the ngAnimate module must be included\n     * to enable full out animation support. Otherwise, $animate will only perform simple DOM\n     * manipulation operations.\n     *\n     * To learn more about enabling animation support, click here to visit the {@link ngAnimate\n     * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service\n     * page}.\n     */\n    return {\n      animate: function(element, from, to) {\n        applyStyles(element, { from: from, to: to });\n        return asyncPromise();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enter\n       * @kind function\n       * @description Inserts the element into the DOM either after the `after` element or\n       * as the first child within the `parent` element. When the function is called a promise\n       * is returned that will be resolved at a later time.\n       * @param {DOMElement} element the element which will be inserted into the DOM\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (if the after element is not present)\n       * @param {DOMElement} after the sibling element which will append the element\n       *   after itself\n       * @param {object=} options an optional collection of styles that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      enter: function(element, parent, after, options) {\n        applyStyles(element, options);\n        after ? after.after(element)\n              : parent.prepend(element);\n        return asyncPromise();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#leave\n       * @kind function\n       * @description Removes the element from the DOM. When the function is called a promise\n       * is returned that will be resolved at a later time.\n       * @param {DOMElement} element the element which will be removed from the DOM\n       * @param {object=} options an optional collection of options that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      leave: function(element, options) {\n        element.remove();\n        return asyncPromise();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#move\n       * @kind function\n       * @description Moves the position of the provided element within the DOM to be placed\n       * either after the `after` element or inside of the `parent` element. When the function\n       * is called a promise is returned that will be resolved at a later time.\n       *\n       * @param {DOMElement} element the element which will be moved around within the\n       *   DOM\n       * @param {DOMElement} parent the parent element where the element will be\n       *   inserted into (if the after element is not present)\n       * @param {DOMElement} after the sibling element where the element will be\n       *   positioned next to\n       * @param {object=} options an optional collection of options that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      move: function(element, parent, after, options) {\n        // Do not remove element before insert. Removing will cause data associated with the\n        // element to be dropped. Insert will implicitly do the remove.\n        return this.enter(element, parent, after, options);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#addClass\n       * @kind function\n       * @description Adds the provided className CSS class value to the provided element.\n       * When the function is called a promise is returned that will be resolved at a later time.\n       * @param {DOMElement} element the element which will have the className value\n       *   added to it\n       * @param {string} className the CSS class which will be added to the element\n       * @param {object=} options an optional collection of options that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      addClass: function(element, className, options) {\n        return this.setClass(element, className, [], options);\n      },\n\n      $$addClassImmediately: function(element, className, options) {\n        element = jqLite(element);\n        className = !isString(className)\n                        ? (isArray(className) ? className.join(' ') : '')\n                        : className;\n        forEach(element, function(element) {\n          jqLiteAddClass(element, className);\n        });\n        applyStyles(element, options);\n        return asyncPromise();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#removeClass\n       * @kind function\n       * @description Removes the provided className CSS class value from the provided element.\n       * When the function is called a promise is returned that will be resolved at a later time.\n       * @param {DOMElement} element the element which will have the className value\n       *   removed from it\n       * @param {string} className the CSS class which will be removed from the element\n       * @param {object=} options an optional collection of options that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      removeClass: function(element, className, options) {\n        return this.setClass(element, [], className, options);\n      },\n\n      $$removeClassImmediately: function(element, className, options) {\n        element = jqLite(element);\n        className = !isString(className)\n                        ? (isArray(className) ? className.join(' ') : '')\n                        : className;\n        forEach(element, function(element) {\n          jqLiteRemoveClass(element, className);\n        });\n        applyStyles(element, options);\n        return asyncPromise();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#setClass\n       * @kind function\n       * @description Adds and/or removes the given CSS classes to and from the element.\n       * When the function is called a promise is returned that will be resolved at a later time.\n       * @param {DOMElement} element the element which will have its CSS classes changed\n       *   removed from it\n       * @param {string} add the CSS classes which will be added to the element\n       * @param {string} remove the CSS class which will be removed from the element\n       * @param {object=} options an optional collection of options that will be applied to the element.\n       * @return {Promise} the animation callback promise\n       */\n      setClass: function(element, add, remove, options) {\n        var self = this;\n        var STORAGE_KEY = '$$animateClasses';\n        var createdCache = false;\n        element = jqLite(element);\n\n        var cache = element.data(STORAGE_KEY);\n        if (!cache) {\n          cache = {\n            classes: {},\n            options: options\n          };\n          createdCache = true;\n        } else if (options && cache.options) {\n          cache.options = angular.extend(cache.options || {}, options);\n        }\n\n        var classes = cache.classes;\n\n        add = isArray(add) ? add : add.split(' ');\n        remove = isArray(remove) ? remove : remove.split(' ');\n        cachedClassManipulation(classes, add, true);\n        cachedClassManipulation(classes, remove, false);\n\n        if (createdCache) {\n          cache.promise = runAnimationPostDigest(function(done) {\n            var cache = element.data(STORAGE_KEY);\n            element.removeData(STORAGE_KEY);\n\n            // in the event that the element is removed before postDigest\n            // is run then the cache will be undefined and there will be\n            // no need anymore to add or remove and of the element classes\n            if (cache) {\n              var classes = resolveElementClasses(element, cache.classes);\n              if (classes) {\n                self.$$setClassImmediately(element, classes[0], classes[1], cache.options);\n              }\n            }\n\n            done();\n          });\n          element.data(STORAGE_KEY, cache);\n        }\n\n        return cache.promise;\n      },\n\n      $$setClassImmediately: function(element, add, remove, options) {\n        add && this.$$addClassImmediately(element, add);\n        remove && this.$$removeClassImmediately(element, remove);\n        applyStyles(element, options);\n        return asyncPromise();\n      },\n\n      enabled: noop,\n      cancel: noop\n    };\n  }];\n}];\n\nfunction $$AsyncCallbackProvider() {\n  this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {\n    return $$rAF.supported\n      ? function(fn) { return $$rAF(fn); }\n      : function(fn) {\n        return $timeout(fn, 0, false);\n      };\n  }];\n}\n\n/* global stripHash: true */\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {object} $log window.console or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      rawDocument = document[0],\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while (outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    // force browser to execute all pollFns - this is needed so that cookies and other pollers fire\n    // at some deterministic time in respect to the test runner's actions. Leaving things up to the\n    // regular poller would result in flaky tests.\n    forEach(pollFns, function(pollFn) { pollFn(); });\n\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Poll Watcher API\n  //////////////////////////////////////////////////////////////\n  var pollFns = [],\n      pollTimeout;\n\n  /**\n   * @name $browser#addPollFn\n   *\n   * @param {function()} fn Poll function to add\n   *\n   * @description\n   * Adds a function to the list of functions that poller periodically executes,\n   * and starts polling if not started yet.\n   *\n   * @returns {function()} the added function\n   */\n  self.addPollFn = function(fn) {\n    if (isUndefined(pollTimeout)) startPoller(100, setTimeout);\n    pollFns.push(fn);\n    return fn;\n  };\n\n  /**\n   * @param {number} interval How often should browser call poll functions (ms)\n   * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.\n   *\n   * @description\n   * Configures the poller to run in the specified intervals, using the specified\n   * setTimeout fn and kicks it off.\n   */\n  function startPoller(interval, setTimeout) {\n    (function check() {\n      forEach(pollFns, function(pollFn) { pollFn(); });\n      pollTimeout = setTimeout(check, interval);\n    })();\n  }\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var cachedState, lastHistoryState,\n      lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      reloadLocation = null;\n\n  cacheState();\n  lastHistoryState = cachedState;\n\n  /**\n   * @name $browser#url\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record?\n   * @param {object=} state object to use with pushState/replaceState\n   */\n  self.url = function(url, replace, state) {\n    // In modern browsers `history.state` is `null` by default; treating it separately\n    // from `undefined` would cause `$browser.url('/foo')` to change `history.state`\n    // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.\n    if (isUndefined(state)) {\n      state = null;\n    }\n\n    // Android Browser BFCache causes location, history reference to become stale.\n    if (location !== window.location) location = window.location;\n    if (history !== window.history) history = window.history;\n\n    // setter\n    if (url) {\n      var sameState = lastHistoryState === state;\n\n      // Don't change anything if previous and current URLs and states match. This also prevents\n      // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.\n      // See https://github.com/angular/angular.js/commit/ffb2701\n      if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {\n        return self;\n      }\n      var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);\n      lastBrowserUrl = url;\n      lastHistoryState = state;\n      // Don't use history API if only the hash changed\n      // due to a bug in IE10/IE11 which leads\n      // to not firing a `hashchange` nor `popstate` event\n      // in some cases (see #9143).\n      if ($sniffer.history && (!sameBase || !sameState)) {\n        history[replace ? 'replaceState' : 'pushState'](state, '', url);\n        cacheState();\n        // Do the assignment again so that those two variables are referentially identical.\n        lastHistoryState = cachedState;\n      } else {\n        if (!sameBase) {\n          reloadLocation = url;\n        }\n        if (replace) {\n          location.replace(url);\n        } else {\n          location.href = url;\n        }\n      }\n      return self;\n    // getter\n    } else {\n      // - reloadLocation is needed as browsers don't allow to read out\n      //   the new location.href if a reload happened.\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return reloadLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  /**\n   * @name $browser#state\n   *\n   * @description\n   * This method is a getter.\n   *\n   * Return history.state or null if history.state is undefined.\n   *\n   * @returns {object} state\n   */\n  self.state = function() {\n    return cachedState;\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function cacheStateAndFireUrlChange() {\n    cacheState();\n    fireUrlChange();\n  }\n\n  // This variable should be used *only* inside the cacheState function.\n  var lastCachedState = null;\n  function cacheState() {\n    // This should be the only place in $browser where `history.state` is read.\n    cachedState = window.history.state;\n    cachedState = isUndefined(cachedState) ? null : cachedState;\n\n    // Prevent callbacks fo fire twice if both hashchange & popstate were fired.\n    if (equals(cachedState, lastCachedState)) {\n      cachedState = lastCachedState;\n    }\n    lastCachedState = cachedState;\n  }\n\n  function fireUrlChange() {\n    if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {\n      return;\n    }\n\n    lastBrowserUrl = self.url();\n    lastHistoryState = cachedState;\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url(), cachedState);\n    });\n  }\n\n  /**\n   * @name $browser#onUrlChange\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed from outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    // TODO(vojta): refactor to use node's syntax for events\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);\n      // hashchange event\n      jqLite(window).on('hashchange', cacheStateAndFireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  /**\n   * Checks whether the url has changed outside of Angular.\n   * Needs to be exported to be able to check for changes that have been done in sync,\n   * as hashchange/popstate events fire in async.\n   */\n  self.$$checkUrlChange = fireUrlChange;\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name $browser#baseHref\n   *\n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string} The current base href\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Cookies API\n  //////////////////////////////////////////////////////////////\n  var lastCookies = {};\n  var lastCookieString = '';\n  var cookiePath = self.baseHref();\n\n  function safeDecodeURIComponent(str) {\n    try {\n      return decodeURIComponent(str);\n    } catch (e) {\n      return str;\n    }\n  }\n\n  /**\n   * @name $browser#cookies\n   *\n   * @param {string=} name Cookie name\n   * @param {string=} value Cookie value\n   *\n   * @description\n   * The cookies method provides a 'private' low level access to browser cookies.\n   * It is not meant to be used directly, use the $cookie service instead.\n   *\n   * The return values vary depending on the arguments that the method was called with as follows:\n   *\n   * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify\n   *   it\n   * - cookies(name, value) -> set name to value, if value is undefined delete the cookie\n   * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that\n   *   way)\n   *\n   * @returns {Object} Hash of all cookies (if called without any parameter)\n   */\n  self.cookies = function(name, value) {\n    var cookieLength, cookieArray, cookie, i, index;\n\n    if (name) {\n      if (value === undefined) {\n        rawDocument.cookie = encodeURIComponent(name) + \"=;path=\" + cookiePath +\n                                \";expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n      } else {\n        if (isString(value)) {\n          cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +\n                                ';path=' + cookiePath).length + 1;\n\n          // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n          // - 300 cookies\n          // - 20 cookies per unique domain\n          // - 4096 bytes per cookie\n          if (cookieLength > 4096) {\n            $log.warn(\"Cookie '\" + name +\n              \"' possibly not set or overflowed because it was too large (\" +\n              cookieLength + \" > 4096 bytes)!\");\n          }\n        }\n      }\n    } else {\n      if (rawDocument.cookie !== lastCookieString) {\n        lastCookieString = rawDocument.cookie;\n        cookieArray = lastCookieString.split(\"; \");\n        lastCookies = {};\n\n        for (i = 0; i < cookieArray.length; i++) {\n          cookie = cookieArray[i];\n          index = cookie.indexOf('=');\n          if (index > 0) { //ignore nameless cookies\n            name = safeDecodeURIComponent(cookie.substring(0, index));\n            // the first value that is seen for a cookie is the most\n            // specific one.  values for the same cookie name that\n            // follow are for less specific paths.\n            if (lastCookies[name] === undefined) {\n              lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));\n            }\n          }\n        }\n      }\n      return lastCookies;\n    }\n  };\n\n\n  /**\n   * @name $browser#defer\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name $browser#defer.cancel\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider() {\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function($window, $log, $sniffer, $document) {\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc service\n * @name $cacheFactory\n *\n * @description\n * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to\n * them.\n *\n * ```js\n *\n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});\n *\n * ```\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n * @example\n   <example module=\"cacheExampleApp\">\n     <file name=\"index.html\">\n       <div ng-controller=\"CacheController\">\n         <input ng-model=\"newCacheKey\" placeholder=\"Key\">\n         <input ng-model=\"newCacheValue\" placeholder=\"Value\">\n         <button ng-click=\"put(newCacheKey, newCacheValue)\">Cache</button>\n\n         <p ng-if=\"keys.length\">Cached Values</p>\n         <div ng-repeat=\"key in keys\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"cache.get(key)\"></b>\n         </div>\n\n         <p>Cache Info</p>\n         <div ng-repeat=\"(key, value) in cache.info()\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"value\"></b>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('cacheExampleApp', []).\n         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {\n           $scope.keys = [];\n           $scope.cache = $cacheFactory('cacheId');\n           $scope.put = function(key, value) {\n             if ($scope.cache.get(key) === undefined) {\n               $scope.keys.push(key);\n             }\n             $scope.cache.put(key, value === undefined ? null : value);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       p {\n         margin: 10px 0 3px;\n       }\n     </file>\n   </example>\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = {},\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = {},\n          freshEnd = null,\n          staleEnd = null;\n\n      /**\n       * @ngdoc type\n       * @name $cacheFactory.Cache\n       *\n       * @description\n       * A cache object used to store and retrieve data, primarily used by\n       * {@link $http $http} and the {@link ng.directive:script script} directive to cache\n       * templates and other data.\n       *\n       * ```js\n       *  angular.module('superCache')\n       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {\n       *      return $cacheFactory('super-cache');\n       *    }]);\n       * ```\n       *\n       * Example test:\n       *\n       * ```js\n       *  it('should behave like a cache', inject(function(superCache) {\n       *    superCache.put('key', 'value');\n       *    superCache.put('another key', 'another value');\n       *\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 2\n       *    });\n       *\n       *    superCache.remove('another key');\n       *    expect(superCache.get('another key')).toBeUndefined();\n       *\n       *    superCache.removeAll();\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 0\n       *    });\n       *  }));\n       * ```\n       */\n      return caches[cacheId] = {\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#put\n         * @kind function\n         *\n         * @description\n         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be\n         * retrieved later, and incrementing the size of the cache if the key was not already\n         * present in the cache. If behaving like an LRU cache, it will also remove stale\n         * entries from the set.\n         *\n         * It will not insert undefined values into the cache.\n         *\n         * @param {string} key the key under which the cached data is stored.\n         * @param {*} value the value to store alongside the key. If it is undefined, the key\n         *    will not be stored.\n         * @returns {*} the value stored.\n         */\n        put: function(key, value) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n            refresh(lruEntry);\n          }\n\n          if (isUndefined(value)) return;\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#get\n         * @kind function\n         *\n         * @description\n         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the data to be retrieved\n         * @returns {*} the value stored.\n         */\n        get: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            refresh(lruEntry);\n          }\n\n          return data[key];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#remove\n         * @kind function\n         *\n         * @description\n         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the entry to be removed\n         */\n        remove: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n            if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n            link(lruEntry.n,lruEntry.p);\n\n            delete lruHash[key];\n          }\n\n          delete data[key];\n          size--;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#removeAll\n         * @kind function\n         *\n         * @description\n         * Clears the cache object of any entries.\n         */\n        removeAll: function() {\n          data = {};\n          size = 0;\n          lruHash = {};\n          freshEnd = staleEnd = null;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#destroy\n         * @kind function\n         *\n         * @description\n         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,\n         * removing it from the {@link $cacheFactory $cacheFactory} set.\n         */\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#info\n         * @kind function\n         *\n         * @description\n         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.\n         *\n         * @returns {object} an object with the following properties:\n         *   <ul>\n         *     <li>**id**: the id of the cache instance</li>\n         *     <li>**size**: the number of entries kept in the cache instance</li>\n         *     <li>**...**: any additional properties from the options object when creating the\n         *       cache.</li>\n         *   </ul>\n         */\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#info\n   *\n   * @description\n   * Get information about all the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#get\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc service\n * @name $templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n *\n * Adding via the `script` tag:\n *\n * ```html\n *   <script type=\"text/ng-template\" id=\"templateId.html\">\n *     <p>This is the content of the template</p>\n *   </script>\n * ```\n *\n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,\n * element with ng-app attribute), otherwise the template will be ignored.\n *\n * Adding via the $templateCache service:\n *\n * ```js\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * ```\n *\n * To retrieve the template later, simply use it in your HTML:\n * ```html\n * <div ng-include=\" 'templateId.html' \"></div>\n * ```\n *\n * or get it via Javascript:\n * ```js\n * $templateCache.get('templateId.html')\n * ```\n *\n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc service\n * @name $compile\n * @kind function\n *\n * @description\n * Compiles an HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a \"Directive Definition Object\" (see below) that defines the directive properties,\n * or just the `postLink` function (all other properties will have the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       transclude: false,\n *       restrict: 'A',\n *       templateNamespace: 'html',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       controllerAs: 'stringAlias',\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * ```\n *\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link ng.$compile\n * compiler}. The attributes are:\n *\n * #### `multiElement`\n * When this property is set to true, the HTML compiler will collect DOM nodes between\n * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them\n * together as the directive elements. It is recomended that this feature be used on directives\n * which are not strictly behavioural (such as {@link ngClick}), and which\n * do not manipulate or replace child nodes (such as {@link ngInclude}).\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. Pre-link functions\n * are also run in priority order, but post-link functions are run in reverse order. The order\n * of directives with the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined). Note that expressions\n * and other directives used in the directive's template will also be excluded from execution.\n *\n * #### `scope`\n * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the\n * same element request a new scope, only one new scope is created. The new scope rule does not\n * apply for the root of the template since the root of the template always gets a new scope.\n *\n * **If set to `{}` (object hash),** then a new \"isolate\" scope is created. The 'isolate' scope differs from\n * normal scope in that it does not prototypically inherit from the parent scope. This is useful\n * when creating reusable components, which should not accidentally read or modify data in the\n * parent scope.\n *\n * The 'isolate' scope takes an object hash which defines a set of local scope properties\n * derived from the parent scope. These local properties are useful for aliasing values for\n * templates. Locals definition is a hash of local scope property to its source:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified  then the\n *   attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"hello {{name}}\">` and widget definition\n *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect\n *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the\n *   `localName` property on the widget scope. The `name` is read from the parent scope (not\n *   component scope).\n *\n * * `=` or `=attr` - set up bi-directional binding between a local scope property and the\n *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`\n *   name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"parentModel\">` and widget definition of\n *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent\n *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You\n *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If\n *   you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use\n *   `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. Given `<widget my-attr=\"count = count + value\">` and widget definition of\n *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to\n *   a function wrapper for the `count = count + value` expression. Often it's desirable to\n *   pass data from the isolated scope via an expression to the parent scope, this can be\n *   done by passing a map of local variable names and values into the expression wrapper fn.\n *   For example, if the expression is `increment(amount)` then we can specify the amount value\n *   by calling the `localFn` as `localFn({amount: 22})`.\n *\n *\n * #### `bindToController`\n * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will\n * allow a component to have its properties bound to the controller, rather than to scope. When the controller\n * is instantiated, the initial values of the isolate scope bindings are already available.\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and it is shared with other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:\n *   `function([scope], cloneLinkingFn, futureParentElement)`.\n *    * `scope`: optional argument to override the scope.\n *    * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.\n *    * `futureParentElement`:\n *        * defines the parent to which the `cloneLinkingFn` will add the cloned elements.\n *        * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.\n *        * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)\n *          and when the `cloneLinkinFn` is passed,\n *          as those elements need to created and cloned in a special way when they are defined outside their\n *          usual containers (e.g. like `<svg>`).\n *        * See also the `directive.templateNamespace` property.\n *\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the\n * injected argument will be an array in corresponding order. If no such directive can be\n * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.\n * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass\n *   `null` to the `link` fn if not found.\n * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass\n *   `null` to the `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Controller alias at the directive scope. An alias for the controller so it\n * can be referenced at the directive template. The directive needs to define a scope for this\n * configuration to be used. Useful in the case when directive is used as component.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the defaults (elements and attributes) are used.\n *\n * * `E` - Element name (default): `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `templateNamespace`\n * String representing the document type used by the markup in the template.\n * AngularJS needs this information as those elements need to be created and cloned\n * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.\n *\n * * `html` - All root nodes in the template are HTML. Root nodes may also be\n *   top-level elements such as `<svg>` or `<math>`.\n * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).\n * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).\n *\n * If no `templateNamespace` is specified, then the namespace is considered to be `html`.\n *\n * #### `template`\n * HTML markup that may:\n * * Replace the contents of the directive's element (default).\n * * Replace the directive's element itself (if `replace` is true - DEPRECATED).\n * * Wrap the contents of the directive's element (if `transclude` is true).\n *\n * Value may be:\n *\n * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.\n * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`\n *   function api below) and returns a string value.\n *\n *\n * #### `templateUrl`\n * This is similar to `template` but the template is loaded from the specified URL, asynchronously.\n *\n * Because template loading is asynchronous the compiler will suspend compilation of directives on that element\n * for later when the template has been resolved.  In the meantime it will continue to compile and link\n * sibling and parent elements as though this element had not contained any directives.\n *\n * The compiler does not suspend the entire compilation to wait for templates to be loaded because this\n * would result in the whole app \"stalling\" until all templates are loaded asynchronously - even in the\n * case when only one deeply nested directive has `templateUrl`.\n *\n * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)\n * specify what the template should replace. Defaults to `false`.\n *\n * * `true` - the template will replace the directive's element.\n * * `false` - the template will replace the contents of the directive's element.\n *\n * The replacement process migrates all of the attributes / classes from the old element to the new\n * one. See the {@link guide/directive#template-expanding-directive\n * Directives Guide} for an example.\n *\n * There are very few scenarios where element replacement is required for the application function,\n * the main one being reusable custom components that are used within SVG contexts\n * (because SVG doesn't work with custom elements in the DOM tree).\n *\n * #### `transclude`\n * Extract the contents of the element where the directive appears and make it available to the directive.\n * The contents are compiled and provided to the directive as a **transclusion function**. See the\n * {@link $compile#transclusion Transclusion} section below.\n *\n * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the\n * directive's element or the entire element:\n *\n * * `true` - transclude the content (i.e. the child nodes) of the directive's element.\n * * `'element'` - transclude the whole of the directive's element including any directives on this\n *   element that defined at a lower priority than this directive. When used, the `template`\n *   property is ignored.\n *\n *\n * #### `compile`\n *\n * ```js\n *   function compile(tElement, tAttrs, transclude) { ... }\n * ```\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. The compile function takes the following arguments:\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n\n * <div class=\"alert alert-warning\">\n * **Note:** The compile function cannot handle directives that recursively use themselves in their\n * own templates or compile functions. Compiling these directives results in an infinite loop and a\n * stack overflow errors.\n *\n * This can be avoided by manually using $compile in the postLink function to imperatively compile\n * a directive's template instead of relying on automatic template compilation via `template` or\n * `templateUrl` declaration or manual compilation inside the compile function.\n * </div>\n *\n * <div class=\"alert alert-error\">\n * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it\n *   e.g. does not know about the right outer scope. Please use the transclude function that is passed\n *   to the link function instead.\n * </div>\n\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * ```js\n *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }\n * ```\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - a controller instance - A controller instance if at least one directive on the\n *     element defines a controller. The controller is shared among all the directives, which allows\n *     the directives to use the controllers as a communication channel.\n *\n *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.\n *     This is the same as the `$transclude`\n *     parameter of directive controllers, see there for details.\n *     `function([scope], cloneLinkingFn, futureParentElement)`.\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked.\n *\n * Note that child elements that contain `templateUrl` directives will not have been compiled\n * and linked since they are waiting for their template to load asynchronously and their own\n * compilation and linking has been suspended until that occurs.\n *\n * It is safe to do DOM transformation in the post-linking function on elements that are not waiting\n * for their async templates to be resolved.\n *\n *\n * ### Transclusion\n *\n * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and\n * copying them to another part of the DOM, while maintaining their connection to the original AngularJS\n * scope from where they were taken.\n *\n * Transclusion is used (often with {@link ngTransclude}) to insert the\n * original contents of a directive's element into a specified place in the template of the directive.\n * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded\n * content has access to the properties on the scope from which it was taken, even if the directive\n * has isolated scope.\n * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.\n *\n * This makes it possible for the widget to have private state for its template, while the transcluded\n * content has access to its originating scope.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** When testing an element transclude directive you must not place the directive at the root of the\n * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives\n * Testing Transclusion Directives}.\n * </div>\n *\n * #### Transclusion Functions\n *\n * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion\n * function** to the directive's `link` function and `controller`. This transclusion function is a special\n * **linking function** that will return the compiled contents linked to a new transclusion scope.\n *\n * <div class=\"alert alert-info\">\n * If you are just using {@link ngTransclude} then you don't need to worry about this function, since\n * ngTransclude will deal with it for us.\n * </div>\n *\n * If you want to manually control the insertion and removal of the transcluded content in your directive\n * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery\n * object that contains the compiled DOM, which is linked to the correct transclusion scope.\n *\n * When you call a transclusion function you can pass in a **clone attach function**. This function accepts\n * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded\n * content and the `scope` is the newly created transclusion scope, to which the clone is bound.\n *\n * <div class=\"alert alert-info\">\n * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function\n * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.\n * </div>\n *\n * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone\n * attach function**:\n *\n * ```js\n * var transcludedContent, transclusionScope;\n *\n * $transclude(function(clone, scope) {\n *   element.append(clone);\n *   transcludedContent = clone;\n *   transclusionScope = scope;\n * });\n * ```\n *\n * Later, if you want to remove the transcluded content from your DOM then you should also destroy the\n * associated transclusion scope:\n *\n * ```js\n * transcludedContent.remove();\n * transclusionScope.$destroy();\n * ```\n *\n * <div class=\"alert alert-info\">\n * **Best Practice**: if you intend to add and remove transcluded content manually in your directive\n * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it),\n * then you are also responsible for calling `$destroy` on the transclusion scope.\n * </div>\n *\n * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}\n * automatically destroy their transluded clones as necessary so you do not need to worry about this if\n * you are simply using {@link ngTransclude} to inject the transclusion into your directive.\n *\n *\n * #### Transclusion Scopes\n *\n * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion\n * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed\n * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it\n * was taken.\n *\n * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look\n * like this:\n *\n * ```html\n * <div ng-app>\n *   <div isolate>\n *     <div transclusion>\n *     </div>\n *   </div>\n * </div>\n * ```\n *\n * The `$parent` scope hierarchy will look like this:\n *\n * ```\n * - $rootScope\n *   - isolate\n *     - transclusion\n * ```\n *\n * but the scopes will inherit prototypically from different scopes to their `$parent`.\n *\n * ```\n * - $rootScope\n *   - transclusion\n * - isolate\n * ```\n *\n *\n * ### Attributes\n *\n * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * accessing *Normalized attribute names:*\n * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.\n * the attributes object allows for normalized access to\n *   the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * ```js\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * ```\n *\n * ## Example\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <example module=\"compileExample\">\n   <file name=\"index.html\">\n    <script>\n      angular.module('compileExample', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        });\n      })\n      .controller('GreeterController', ['$scope', function($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }]);\n    </script>\n    <div ng-controller=\"GreeterController\">\n      <input ng-model=\"name\"> <br>\n      <textarea ng-model=\"html\"></textarea> <br>\n      <div compile=\"html\"></div>\n    </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should auto compile', function() {\n       var textarea = $('textarea');\n       var output = $('div[compile]');\n       // The initial state reads 'Hello Angular'.\n       expect(output.getText()).toBe('Hello Angular');\n       textarea.clear();\n       textarea.sendKeys('{{name}}!');\n       expect(output.getText()).toBe('Angular!');\n     });\n   </file>\n </example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.\n *\n * <div class=\"alert alert-error\">\n * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it\n *   e.g. will not use the right outer scope. Please pass the transclude function as a\n *   `parentBoundTranscludeFn` to the link function instead.\n * </div>\n *\n * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n *  * `options` - An optional object hash with linking options. If `options` is provided, then the following\n *  keys may be used to control linking behavior:\n *\n *      * `parentBoundTranscludeFn` - the transclude function made available to\n *        directives; if given, it will be passed through to the link functions of\n *        directives found in `element` during compilation.\n *      * `transcludeControllers` - an object hash with keys that map controller names\n *        to controller instances; if given, it will make the controllers\n *        available to directives.\n *      * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add\n *        the cloned elements; only needed for transcludes that are allowed to contain non html\n *        elements (e.g. SVG elements). See also the directive.controller property.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   ```js\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   ```\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   ```js\n *     var templateElement = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clonedElement`\n *   ```\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc provider\n * @name $compileProvider\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\nfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\w\\-]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\w\\-]+)(?:\\:([^;]+))?;?)/,\n      ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),\n      REQUIRE_PREFIX_REGEXP = /^(?:(\\^\\^?)?(\\?)?(\\^\\^?)?)?/;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\n  function parseIsolateBindings(scope, directiveName) {\n    var LOCAL_REGEXP = /^\\s*([@&]|=(\\*?))(\\??)\\s*(\\w*)\\s*$/;\n\n    var bindings = {};\n\n    forEach(scope, function(definition, scopeName) {\n      var match = definition.match(LOCAL_REGEXP);\n\n      if (!match) {\n        throw $compileMinErr('iscp',\n            \"Invalid isolate scope definition for directive '{0}'.\" +\n            \" Definition: {... {1}: '{2}' ...}\",\n            directiveName, scopeName, definition);\n      }\n\n      bindings[scopeName] = {\n        mode: match[1][0],\n        collection: match[2] === '*',\n        optional: match[3] === '?',\n        attrName: match[4] || scopeName\n      };\n    });\n\n    return bindings;\n  }\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#directive\n   * @kind function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {Function|Array} directiveFactory An injectable directive factory function. See\n   *    {@link guide/directive} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n   this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = directive.require || (directive.controller && directive.name);\n                directive.restrict = directive.restrict || 'EA';\n                if (isObject(directive.scope)) {\n                  directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name);\n                }\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#aHrefSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at preventing XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#imgSrcSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name  $compileProvider#debugInfoEnabled\n   *\n   * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the\n   * current debugInfoEnabled state\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   *\n   * @kind function\n   *\n   * @description\n   * Call this method to enable/disable various debug runtime information in the compiler such as adding\n   * binding information and a reference to the current scope on to DOM elements.\n   * If enabled, the compiler will add the following to DOM elements that have been bound to the scope\n   * * `ng-binding` CSS class\n   * * `$binding` data property containing an array of the binding expressions\n   *\n   * You may want to disable this in production for a significant performance boost. See\n   * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.\n   *\n   * The default value is true.\n   */\n  var debugInfoEnabled = true;\n  this.debugInfoEnabled = function(enabled) {\n    if (isDefined(enabled)) {\n      debugInfoEnabled = enabled;\n      return this;\n    }\n    return debugInfoEnabled;\n  };\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',\n            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',\n    function($injector,   $interpolate,   $exceptionHandler,   $templateRequest,   $parse,\n             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {\n\n    var Attributes = function(element, attributesToCopy) {\n      if (attributesToCopy) {\n        var keys = Object.keys(attributesToCopy);\n        var i, l, key;\n\n        for (i = 0, l = keys.length; i < l; i++) {\n          key = keys[i];\n          this[key] = attributesToCopy[key];\n        }\n      } else {\n        this.$attr = {};\n      }\n\n      this.$$element = element;\n    };\n\n    Attributes.prototype = {\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$addClass\n       * @kind function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass: function(classVal) {\n        if (classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$removeClass\n       * @kind function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass: function(classVal) {\n        if (classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$updateClass\n       * @kind function\n       *\n       * @description\n       * Adds and removes the appropriate CSS class values to the element based on the difference\n       * between the new and old CSS class values (specified as newClasses and oldClasses).\n       *\n       * @param {string} newClasses The current CSS className value\n       * @param {string} oldClasses The former CSS className value\n       */\n      $updateClass: function(newClasses, oldClasses) {\n        var toAdd = tokenDifference(newClasses, oldClasses);\n        if (toAdd && toAdd.length) {\n          $animate.addClass(this.$$element, toAdd);\n        }\n\n        var toRemove = tokenDifference(oldClasses, newClasses);\n        if (toRemove && toRemove.length) {\n          $animate.removeClass(this.$$element, toRemove);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        // TODO: decide whether or not to throw an error if \"class\"\n        //is set through this function since it may cause $updateClass to\n        //become unstable.\n\n        var node = this.$$element[0],\n            booleanKey = getBooleanAttrName(node, key),\n            aliasedKey = getAliasedAttrName(node, key),\n            observer = key,\n            nodeName;\n\n        if (booleanKey) {\n          this.$$element.prop(key, value);\n          attrName = booleanKey;\n        } else if (aliasedKey) {\n          this[aliasedKey] = value;\n          observer = aliasedKey;\n        }\n\n        this[key] = value;\n\n        // translate normalized key to actual key\n        if (attrName) {\n          this.$attr[key] = attrName;\n        } else {\n          attrName = this.$attr[key];\n          if (!attrName) {\n            this.$attr[key] = attrName = snake_case(key, '-');\n          }\n        }\n\n        nodeName = nodeName_(this.$$element);\n\n        if ((nodeName === 'a' && key === 'href') ||\n            (nodeName === 'img' && key === 'src')) {\n          // sanitize a[href] and img[src] values\n          this[key] = value = $$sanitizeUri(value, key === 'src');\n        } else if (nodeName === 'img' && key === 'srcset') {\n          // sanitize img[srcset] values\n          var result = \"\";\n\n          // first check if there are spaces because it's not the same pattern\n          var trimmedSrcset = trim(value);\n          //                (   999x   ,|   999w   ,|   ,|,   )\n          var srcPattern = /(\\s+\\d+x\\s*,|\\s+\\d+w\\s*,|\\s+,|,\\s+)/;\n          var pattern = /\\s/.test(trimmedSrcset) ? srcPattern : /(,)/;\n\n          // split srcset into tuple of uri and descriptor except for the last item\n          var rawUris = trimmedSrcset.split(pattern);\n\n          // for each tuples\n          var nbrUrisWith2parts = Math.floor(rawUris.length / 2);\n          for (var i = 0; i < nbrUrisWith2parts; i++) {\n            var innerIdx = i * 2;\n            // sanitize the uri\n            result += $$sanitizeUri(trim(rawUris[innerIdx]), true);\n            // add the descriptor\n            result += (\" \" + trim(rawUris[innerIdx + 1]));\n          }\n\n          // split the last item into uri and descriptor\n          var lastTuple = trim(rawUris[i * 2]).split(/\\s/);\n\n          // sanitize the last uri\n          result += $$sanitizeUri(trim(lastTuple[0]), true);\n\n          // and add the last descriptor if any\n          if (lastTuple.length === 2) {\n            result += (\" \" + trim(lastTuple[1]));\n          }\n          this[key] = value = result;\n        }\n\n        if (writeAttr !== false) {\n          if (value === null || value === undefined) {\n            this.$$element.removeAttr(attrName);\n          } else {\n            this.$$element.attr(attrName, value);\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[observer], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$observe\n       * @kind function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.\n       * @returns {function()} Returns a deregistration function for this observer.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter && attrs.hasOwnProperty(key)) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n\n        return function() {\n          arrayRemove(listeners, fn);\n        };\n      }\n    };\n\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch (e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\n    compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {\n      var bindings = $element.data('$binding') || [];\n\n      if (isArray(binding)) {\n        bindings = bindings.concat(binding);\n      } else {\n        bindings.push(binding);\n      }\n\n      $element.data('$binding', bindings);\n    } : noop;\n\n    compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {\n      safeAddClass($element, 'ng-binding');\n    } : noop;\n\n    compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {\n      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';\n      $element.data(dataName, scope);\n    } : noop;\n\n    compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {\n      safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');\n    } : noop;\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      forEach($compileNodes, function(node, index) {\n        if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\\S+/) /* non-empty */ ) {\n          $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];\n        }\n      });\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      compile.$$addScopeClass($compileNodes);\n      var namespace = null;\n      return function publicLinkFn(scope, cloneConnectFn, options) {\n        assertArg(scope, 'scope');\n\n        options = options || {};\n        var parentBoundTranscludeFn = options.parentBoundTranscludeFn,\n          transcludeControllers = options.transcludeControllers,\n          futureParentElement = options.futureParentElement;\n\n        // When `parentBoundTranscludeFn` is passed, it is a\n        // `controllersBoundTransclude` function (it was previously passed\n        // as `transclude` to directive.link) so we must unwrap it to get\n        // its `boundTranscludeFn`\n        if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {\n          parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;\n        }\n\n        if (!namespace) {\n          namespace = detectNamespaceForChildElements(futureParentElement);\n        }\n        var $linkNode;\n        if (namespace !== 'html') {\n          // When using a directive with replace:true and templateUrl the $compileNodes\n          // (or a child element inside of them)\n          // might change, so we need to recreate the namespace adapted compileNodes\n          // for call to the link function.\n          // Note: This will already clone the nodes...\n          $linkNode = jqLite(\n            wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())\n          );\n        } else if (cloneConnectFn) {\n          // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n          // and sometimes changes the structure of the DOM.\n          $linkNode = JQLitePrototype.clone.call($compileNodes);\n        } else {\n          $linkNode = $compileNodes;\n        }\n\n        if (transcludeControllers) {\n          for (var controllerName in transcludeControllers) {\n            $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);\n          }\n        }\n\n        compile.$$addScopeInfo($linkNode, scope);\n\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);\n        return $linkNode;\n      };\n    }\n\n    function detectNamespaceForChildElements(parentElement) {\n      // TODO: Make this detect MathML as well...\n      var node = parentElement && parentElement[0];\n      if (!node) {\n        return 'html';\n      } else {\n        return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} maxPriority Max directive priority.\n     * @returns {Function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;\n\n      for (var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        if (nodeLinkFn && nodeLinkFn.scope) {\n          compile.$$addScopeClass(attrs.$$element);\n        }\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !(childNodes = nodeList[i].childNodes) ||\n                      !childNodes.length)\n            ? null\n            : compileNodes(childNodes,\n                 nodeLinkFn ? (\n                  (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)\n                     && nodeLinkFn.transclude) : transcludeFn);\n\n        if (nodeLinkFn || childLinkFn) {\n          linkFns.push(i, nodeLinkFn, childLinkFn);\n          linkFnFound = true;\n          nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;\n        }\n\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;\n        var stableNodeList;\n\n\n        if (nodeLinkFnFound) {\n          // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our\n          // offsets don't get screwed up\n          var nodeListLength = nodeList.length;\n          stableNodeList = new Array(nodeListLength);\n\n          // create a sparse array by only copying the elements which have a linkFn\n          for (i = 0; i < linkFns.length; i+=3) {\n            idx = linkFns[i];\n            stableNodeList[idx] = nodeList[idx];\n          }\n        } else {\n          stableNodeList = nodeList;\n        }\n\n        for (i = 0, ii = linkFns.length; i < ii;) {\n          node = stableNodeList[linkFns[i++]];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              compile.$$addScopeInfo(jqLite(node), childScope);\n            } else {\n              childScope = scope;\n            }\n\n            if (nodeLinkFn.transcludeOnThisElement) {\n              childBoundTranscludeFn = createBoundTranscludeFn(\n                  scope, nodeLinkFn.transclude, parentBoundTranscludeFn,\n                  nodeLinkFn.elementTranscludeOnThisElement);\n\n            } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {\n              childBoundTranscludeFn = parentBoundTranscludeFn;\n\n            } else if (!parentBoundTranscludeFn && transcludeFn) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);\n\n            } else {\n              childBoundTranscludeFn = null;\n            }\n\n            nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);\n\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);\n          }\n        }\n      }\n    }\n\n    function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) {\n\n      var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {\n\n        if (!transcludedScope) {\n          transcludedScope = scope.$new(false, containingScope);\n          transcludedScope.$$transcluded = true;\n        }\n\n        return transcludeFn(transcludedScope, cloneFn, {\n          parentBoundTranscludeFn: previousBoundTranscludeFn,\n          transcludeControllers: controllers,\n          futureParentElement: futureParentElement\n        });\n      };\n\n      return boundTranscludeFn;\n    }\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch (nodeType) {\n        case NODE_TYPE_ELEMENT: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            name = attr.name;\n            value = trim(attr.value);\n\n            // support ngAttr attribute binding\n            ngAttrName = directiveNormalize(name);\n            if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {\n              name = snake_case(ngAttrName.substr(6), '-');\n            }\n\n            var directiveNName = ngAttrName.replace(/(Start|End)$/, '');\n            if (directiveIsMultiElement(directiveNName)) {\n              if (ngAttrName === directiveNName + 'Start') {\n                attrStartName = name;\n                attrEndName = name.substr(0, name.length - 5) + 'end';\n                name = name.substr(0, name.length - 6);\n              }\n            }\n\n            nName = directiveNormalize(name.toLowerCase());\n            attrsMap[nName] = name;\n            if (isNgAttr || !attrs.hasOwnProperty(nName)) {\n                attrs[nName] = value;\n                if (getBooleanAttrName(node, nName)) {\n                  attrs[nName] = true; // presence means true\n                }\n            }\n            addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);\n            addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                          attrEndName);\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case NODE_TYPE_TEXT: /* Text Node */\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case NODE_TYPE_COMMENT: /* Comment */\n          try {\n            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n            if (match) {\n              nName = directiveNormalize(match[1]);\n              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[2]);\n              }\n            }\n          } catch (e) {\n            // turns out that under some circumstances IE9 throws errors when one attempts to read\n            // comment's node value.\n            // Just ignore it and continue. (Can't seem to reproduce in test case.)\n          }\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == NODE_TYPE_ELEMENT) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function(scope, element, attrs, controllers, transcludeFn) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers, transcludeFn);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns {Function} linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          controllers,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n          hasTranscludeDirective = false,\n          hasTemplate = false,\n          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          directiveValue;\n\n      // executes all directives on the current element\n      for (var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            if (isObject(directiveValue)) {\n              // This directive is trying to add an isolated scope.\n              // Check that there is no scope of any kind already\n              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,\n                                directive, $compileNode);\n              newIsolateScopeDirective = directive;\n            } else {\n              // This directive is trying to add a child scope.\n              // Check that there is no isolated scope already\n              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                                $compileNode);\n            }\n          }\n\n          newScopeDirective = newScopeDirective || directive;\n        }\n\n        directiveName = directive.name;\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || {};\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          hasTranscludeDirective = true;\n\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n            nonTlbTranscludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            hasElementTranscludeDirective = true;\n            terminalPriority = directive.priority;\n            $template = $compileNode;\n            $compileNode = templateAttrs.$$element =\n                jqLite(document.createComment(' ' + directiveName + ': ' +\n                                              templateAttrs[directiveName] + ' '));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, sliceArgs($template), compileNode);\n\n            childTranscludeFn = compile($template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective\n                                        });\n          } else {\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n            $compileNode.empty(); // clear contents\n            childTranscludeFn = compile($template, transcludeFn);\n          }\n        }\n\n        if (directive.template) {\n          hasTemplate = true;\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            if (jqLiteIsTextNode(directiveValue)) {\n              $template = [];\n            } else {\n              $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          hasTemplate = true;\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n              templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                nonTlbTranscludeDirective: nonTlbTranscludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            if (isFunction(linkFn)) {\n              addLinkFns(null, linkFn, attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;\n      nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective;\n      nodeLinkFn.templateOnThisElement = hasTemplate;\n      nodeLinkFn.transclude = childTranscludeFn;\n\n      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          pre.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          post.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n\n      function getControllers(directiveName, require, $element, elementControllers) {\n        var value, retrievalMethod = 'data', optional = false;\n        var $searchElement = $element;\n        var match;\n        if (isString(require)) {\n          match = require.match(REQUIRE_PREFIX_REGEXP);\n          require = require.substring(match[0].length);\n\n          if (match[3]) {\n            if (match[1]) match[3] = null;\n            else match[1] = match[3];\n          }\n          if (match[1] === '^') {\n            retrievalMethod = 'inheritedData';\n          } else if (match[1] === '^^') {\n            retrievalMethod = 'inheritedData';\n            $searchElement = $element.parent();\n          }\n          if (match[2] === '?') {\n            optional = true;\n          }\n\n          value = null;\n\n          if (elementControllers && retrievalMethod === 'data') {\n            if (value = elementControllers[require]) {\n              value = value.instance;\n            }\n          }\n          value = value || $searchElement[retrievalMethod]('$' + require + 'Controller');\n\n          if (!value && !optional) {\n            throw $compileMinErr('ctreq',\n                \"Controller '{0}', required by directive '{1}', can't be found!\",\n                require, directiveName);\n          }\n          return value || null;\n        } else if (isArray(require)) {\n          value = [];\n          forEach(require, function(require) {\n            value.push(getControllers(directiveName, require, $element, elementControllers));\n          });\n        }\n        return value;\n      }\n\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element,\n            attrs;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n          $element = templateAttrs.$$element;\n        } else {\n          $element = jqLite(linkNode);\n          attrs = new Attributes($element, templateAttrs);\n        }\n\n        if (newIsolateScopeDirective) {\n          isolateScope = scope.$new(true);\n        }\n\n        if (boundTranscludeFn) {\n          // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`\n          // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`\n          transcludeFn = controllersBoundTransclude;\n          transcludeFn.$$boundTransclude = boundTranscludeFn;\n        }\n\n        if (controllerDirectives) {\n          // TODO: merge `controllers` and `elementControllers` into single object.\n          controllers = {};\n          elementControllers = {};\n          forEach(controllerDirectives, function(directive) {\n            var locals = {\n              $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n              $element: $element,\n              $attrs: attrs,\n              $transclude: transcludeFn\n            }, controllerInstance;\n\n            controller = directive.controller;\n            if (controller == '@') {\n              controller = attrs[directive.name];\n            }\n\n            controllerInstance = $controller(controller, locals, true, directive.controllerAs);\n\n            // For directives with element transclusion the element is a comment,\n            // but jQuery .data doesn't support attaching data to comment nodes as it's hard to\n            // clean up (http://bugs.jquery.com/ticket/8335).\n            // Instead, we save the controllers for the element in a local hash and attach to .data\n            // later, once we have the actual element.\n            elementControllers[directive.name] = controllerInstance;\n            if (!hasElementTranscludeDirective) {\n              $element.data('$' + directive.name + 'Controller', controllerInstance.instance);\n            }\n\n            controllers[directive.name] = controllerInstance;\n          });\n        }\n\n        if (newIsolateScopeDirective) {\n          compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||\n              templateDirective === newIsolateScopeDirective.$$originalDirective)));\n          compile.$$addScopeClass($element, true);\n\n          var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name];\n          var isolateBindingContext = isolateScope;\n          if (isolateScopeController && isolateScopeController.identifier &&\n              newIsolateScopeDirective.bindToController === true) {\n            isolateBindingContext = isolateScopeController.instance;\n          }\n\n          forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) {\n            var attrName = definition.attrName,\n                optional = definition.optional,\n                mode = definition.mode, // @, =, or &\n                lastValue,\n                parentGet, parentSet, compare;\n\n            switch (mode) {\n\n              case '@':\n                attrs.$observe(attrName, function(value) {\n                  isolateBindingContext[scopeName] = value;\n                });\n                attrs.$$observers[attrName].$$scope = scope;\n                if (attrs[attrName]) {\n                  // If the attribute has been provided then we trigger an interpolation to ensure\n                  // the value is there for use in the link fn\n                  isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);\n                }\n                break;\n\n              case '=':\n                if (optional && !attrs[attrName]) {\n                  return;\n                }\n                parentGet = $parse(attrs[attrName]);\n                if (parentGet.literal) {\n                  compare = equals;\n                } else {\n                  compare = function(a, b) { return a === b || (a !== a && b !== b); };\n                }\n                parentSet = parentGet.assign || function() {\n                  // reset the change, or we will throw this exception on every $digest\n                  lastValue = isolateBindingContext[scopeName] = parentGet(scope);\n                  throw $compileMinErr('nonassign',\n                      \"Expression '{0}' used with directive '{1}' is non-assignable!\",\n                      attrs[attrName], newIsolateScopeDirective.name);\n                };\n                lastValue = isolateBindingContext[scopeName] = parentGet(scope);\n                var parentValueWatch = function parentValueWatch(parentValue) {\n                  if (!compare(parentValue, isolateBindingContext[scopeName])) {\n                    // we are out of sync and need to copy\n                    if (!compare(parentValue, lastValue)) {\n                      // parent changed and it has precedence\n                      isolateBindingContext[scopeName] = parentValue;\n                    } else {\n                      // if the parent can be assigned then do so\n                      parentSet(scope, parentValue = isolateBindingContext[scopeName]);\n                    }\n                  }\n                  return lastValue = parentValue;\n                };\n                parentValueWatch.$stateful = true;\n                var unwatch;\n                if (definition.collection) {\n                  unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch);\n                } else {\n                  unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);\n                }\n                isolateScope.$on('$destroy', unwatch);\n                break;\n\n              case '&':\n                parentGet = $parse(attrs[attrName]);\n                isolateBindingContext[scopeName] = function(locals) {\n                  return parentGet(scope, locals);\n                };\n                break;\n            }\n          });\n        }\n        if (controllers) {\n          forEach(controllers, function(controller) {\n            controller();\n          });\n          controllers = null;\n        }\n\n        // PRELINKING\n        for (i = 0, ii = preLinkFns.length; i < ii; i++) {\n          linkFn = preLinkFns[i];\n          invokeLinkFn(linkFn,\n              linkFn.isolateScope ? isolateScope : scope,\n              $element,\n              attrs,\n              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n              transcludeFn\n          );\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for (i = postLinkFns.length - 1; i >= 0; i--) {\n          linkFn = postLinkFns[i];\n          invokeLinkFn(linkFn,\n              linkFn.isolateScope ? isolateScope : scope,\n              $element,\n              attrs,\n              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n              transcludeFn\n          );\n        }\n\n        // This is the function that is injected as `$transclude`.\n        // Note: all arguments are optional!\n        function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {\n          var transcludeControllers;\n\n          // No scope passed in:\n          if (!isScope(scope)) {\n            futureParentElement = cloneAttachFn;\n            cloneAttachFn = scope;\n            scope = undefined;\n          }\n\n          if (hasElementTranscludeDirective) {\n            transcludeControllers = elementControllers;\n          }\n          if (!futureParentElement) {\n            futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;\n          }\n          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);\n        }\n      }\n    }\n\n    function markDirectivesAsIsolate(directives) {\n      // mark all directives as needing isolate scope.\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: true});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns {boolean} true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for (var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i < ii; i++) {\n          try {\n            directive = directives[i];\n            if ((maxPriority === undefined || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch (e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * looks up the directive and returns true if it is a multi-element directive,\n     * and therefore requires DOM nodes between -start and -end markers to be grouped\n     * together.\n     *\n     * @param {string} name name of the directive to look up.\n     * @returns true if directive was registered as multi-element.\n     */\n    function directiveIsMultiElement(name) {\n      if (hasDirectives.hasOwnProperty(name)) {\n        for (var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i < ii; i++) {\n          directive = directives[i];\n          if (directive.multiElement) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key] && src[key] !== value) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        if (key == 'class') {\n          safeAddClass($element, value);\n          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n        } else if (key == 'style') {\n          $element.attr('style', $element.attr('style') + ';' + value);\n          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;\n          // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n          // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n          // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n          dst[key] = value;\n          dstAttr[key] = srcAttr[key];\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          // The fact that we have to copy and patch the directive seems wrong!\n          derivedSyncDirective = extend({}, origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl,\n          templateNamespace = origAsyncDirective.templateNamespace;\n\n      $compileNode.empty();\n\n      $templateRequest($sce.getTrustedResourceUrl(templateUrl))\n        .then(function(content) {\n          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            if (jqLiteIsTextNode(content)) {\n              $template = [];\n            } else {\n              $template = removeComments(wrapTemplate(templateNamespace, trim(content)));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n          while (linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                boundTranscludeFn = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (scope.$$destroyed) continue;\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              var oldClasses = beforeTemplateLinkNode.className;\n\n              if (!(previousCompileContext.hasElementTranscludeDirective &&\n                  origAsyncDirective.replace)) {\n                // it was cloned therefore we have to clone as well.\n                linkNode = jqLiteClone(compileNode);\n              }\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\n              // Copy in CSS classes from original node\n              safeAddClass(jqLite(linkNode), oldClasses);\n            }\n            if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n            } else {\n              childBoundTranscludeFn = boundTranscludeFn;\n            }\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n              childBoundTranscludeFn);\n          }\n          linkQueue = null;\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n        var childBoundTranscludeFn = boundTranscludeFn;\n        if (scope.$$destroyed) return;\n        if (linkQueue) {\n          linkQueue.push(scope,\n                         node,\n                         rootElement,\n                         childBoundTranscludeFn);\n        } else {\n          if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n            childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n          }\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',\n            previousDirective.name, directive.name, what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: function textInterpolateCompileFn(templateNode) {\n            var templateNodeParent = templateNode.parent(),\n                hasCompileParent = !!templateNodeParent.length;\n\n            // When transcluding a template that has bindings in the root\n            // we don't have a parent and thus need to add the class during linking fn.\n            if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);\n\n            return function textInterpolateLinkFn(scope, node) {\n              var parent = node.parent();\n              if (!hasCompileParent) compile.$$addBindingClass(parent);\n              compile.$$addBindingInfo(parent, interpolateFn.expressions);\n              scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n                node[0].nodeValue = value;\n              });\n            };\n          }\n        });\n      }\n    }\n\n\n    function wrapTemplate(type, template) {\n      type = lowercase(type || 'html');\n      switch (type) {\n      case 'svg':\n      case 'math':\n        var wrapper = document.createElement('div');\n        wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';\n        return wrapper.childNodes[0].childNodes;\n      default:\n        return template;\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      if (attrNormalizedName == \"srcdoc\") {\n        return $sce.HTML;\n      }\n      var tag = nodeName_(node);\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (tag == \"form\" && attrNormalizedName == \"action\") ||\n          (tag != \"img\" && (attrNormalizedName == \"src\" ||\n                            attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {\n      var interpolateFn = $interpolate(value, true);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"select\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = {}));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // If the attribute was removed, then we are done\n                if (!attr[name]) {\n                  return;\n                }\n\n                // we need to interpolate again, in case the attribute value has been updated\n                // (e.g. by another directive's compile function)\n                interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name),\n                    ALL_OR_NOTHING_ATTRS[name] || allOrNothing);\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // initialize attr object so that it's ready in case we need the value for isolate\n                // scope initialization, otherwise the value would not be available from isolate\n                // directive's linking fn during linking phase\n                attr[name] = interpolateFn(scope);\n\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n                    //special case for class attribute addition + removal\n                    //so that class changes can tap into the animation\n                    //hooks provided by the $animate service. Be sure to\n                    //skip animations when the first digest occurs (when\n                    //both the new and the old values are the same) since\n                    //the CSS classes are the non-interpolated values\n                    if (name === 'class' && newValue != oldValue) {\n                      attr.$updateClass(newValue, oldValue);\n                    } else {\n                      attr.$set(name, newValue);\n                    }\n                  });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for (i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n\n            // If the replaced element is also the jQuery .context then replace it\n            // .context is a deprecated jQuery api, so we should set it only when jQuery set it\n            // http://api.jquery.com/context/\n            if ($rootElement.context === firstElementToRemove) {\n              $rootElement.context = newNode;\n            }\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n\n      // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?\n      var fragment = document.createDocumentFragment();\n      fragment.appendChild(firstElementToRemove);\n\n      // Copy over user data (that includes Angular's $scope etc.). Don't copy private\n      // data here because there's no public interface in jQuery to do that and copying over\n      // event listeners (which is the main use of private data) wouldn't work anyway.\n      jqLite(newNode).data(jqLite(firstElementToRemove).data());\n\n      // Remove data of the replaced element. We cannot just call .remove()\n      // on the element it since that would deallocate scope that is needed\n      // for the new node. Instead, remove the data \"manually\".\n      if (!jQuery) {\n        delete jqLite.cache[firstElementToRemove[jqLite.expando]];\n      } else {\n        // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after\n        // the replaced element. The cleanData version monkey-patched by Angular would cause\n        // the scope to be trashed and we do need the very same scope to work with the new\n        // element. However, we cannot just cache the non-patched version and use it here as\n        // that would break if another library patches the method after Angular does (one\n        // example is jQuery UI). Instead, set a flag indicating scope destroying should be\n        // skipped this one time.\n        skipDestroyOnNextJQueryCleanData = true;\n        jQuery.cleanData([firstElementToRemove]);\n      }\n\n      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {\n        var element = elementsToRemove[k];\n        jqLite(element).remove(); // must do this way to clean up expando\n        fragment.appendChild(element);\n        delete elementsToRemove[k];\n      }\n\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n\n\n    function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {\n      try {\n        linkFn(scope, $element, attrs, controllers, transcludeFn);\n      } catch (e) {\n        $exceptionHandler(e, startingTag($element));\n      }\n    }\n  }];\n}\n\nvar PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * All of these will become 'myDirective':\n *   my:Directive\n *   my-directive\n *   x-my-directive\n *   data-my:directive\n *\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc type\n * @name $compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n * ```\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n * ```\n */\n\n/**\n * @ngdoc property\n * @name $compile.directive.Attributes#$attr\n *\n * @description\n * A map of DOM element attribute names to the normalized name. This is\n * needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc method\n * @name $compile.directive.Attributes#$set\n * @kind function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n) {}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n) {}\n\nfunction tokenDifference(str1, str2) {\n  var values = '',\n      tokens1 = str1.split(/\\s+/),\n      tokens2 = str2.split(/\\s+/);\n\n  outer:\n  for (var i = 0; i < tokens1.length; i++) {\n    var token = tokens1[i];\n    for (var j = 0; j < tokens2.length; j++) {\n      if (token == tokens2[j]) continue outer;\n    }\n    values += (values.length > 0 ? ' ' : '') + token;\n  }\n  return values;\n}\n\nfunction removeComments(jqNodes) {\n  jqNodes = jqLite(jqNodes);\n  var i = jqNodes.length;\n\n  if (i <= 1) {\n    return jqNodes;\n  }\n\n  while (i--) {\n    var node = jqNodes[i];\n    if (node.nodeType === NODE_TYPE_COMMENT) {\n      splice.call(jqNodes, i, 1);\n    }\n  }\n  return jqNodes;\n}\n\n/**\n * @ngdoc provider\n * @name $controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      globals = false,\n      CNTRL_REG = /^(\\S+)(\\s+as\\s+(\\w+))?$/;\n\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#allowGlobals\n   * @description If called, allows `$controller` to find controller constructors on `window`\n   */\n  this.allowGlobals = function() {\n    globals = true;\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc service\n     * @name $controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global\n     *      `window` object (not recommended)\n     *\n     *    The string can use the `controller as property` syntax, where the controller instance is published\n     *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this\n     *    to work correctly.\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n     */\n    return function(expression, locals, later, ident) {\n      // PRIVATE API:\n      //   param `later` --- indicates that the controller's constructor is invoked at a later time.\n      //                     If true, $controller will allocate the object with the correct\n      //                     prototype chain, but will not invoke the controller until a returned\n      //                     callback is invoked.\n      //   param `ident` --- An optional label which overrides the label parsed from the controller\n      //                     expression, if any.\n      var instance, match, constructor, identifier;\n      later = later === true;\n      if (ident && isString(ident)) {\n        identifier = ident;\n      }\n\n      if (isString(expression)) {\n        match = expression.match(CNTRL_REG),\n        constructor = match[1],\n        identifier = identifier || match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) ||\n                (globals ? getter($window, constructor, true) : undefined);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      if (later) {\n        // Instantiate controller later:\n        // This machinery is used to create an instance of the object before calling the\n        // controller's constructor itself.\n        //\n        // This allows properties to be added to the controller before the constructor is\n        // invoked. Primarily, this is used for isolate scope bindings in $compile.\n        //\n        // This feature is not intended for use by applications, and is thus not documented\n        // publicly.\n        // Object creation: http://jsperf.com/create-constructor/2\n        var controllerPrototype = (isArray(expression) ?\n          expression[expression.length - 1] : expression).prototype;\n        instance = Object.create(controllerPrototype);\n\n        if (identifier) {\n          addIdentifier(locals, identifier, instance, constructor || expression.name);\n        }\n\n        return extend(function() {\n          $injector.invoke(expression, instance, locals, constructor);\n          return instance;\n        }, {\n          instance: instance,\n          identifier: identifier\n        });\n      }\n\n      instance = $injector.instantiate(expression, locals, constructor);\n\n      if (identifier) {\n        addIdentifier(locals, identifier, instance, constructor || expression.name);\n      }\n\n      return instance;\n    };\n\n    function addIdentifier(locals, identifier, instance, name) {\n      if (!(locals && isObject(locals.$scope))) {\n        throw minErr('$controller')('noscp',\n          \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n          name, identifier);\n      }\n\n      locals.$scope[identifier] = instance;\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n *\n * @example\n   <example module=\"documentExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <p>$document title: <b ng-bind=\"title\"></b></p>\n         <p>window.document title: <b ng-bind=\"windowTitle\"></b></p>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('documentExample', [])\n         .controller('ExampleController', ['$scope', '$document', function($scope, $document) {\n           $scope.title = $document[0].title;\n           $scope.windowTitle = angular.element(window.document)[0].title;\n         }]);\n     </file>\n   </example>\n */\nfunction $DocumentProvider() {\n  this.$get = ['$window', function(window) {\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n * @requires ng.$log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n *\n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n *\n * ```js\n *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {\n *     return function(exception, cause) {\n *       exception.message += ' (caused by \"' + cause + '\")';\n *       throw exception;\n *     };\n *   });\n * ```\n *\n * This example will override the normal action of `$exceptionHandler`, to make angular\n * exceptions fail hard when they happen, instead of just logging to the console.\n *\n * <hr />\n * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`\n * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}\n * (unless executed during a digest).\n *\n * If you wish, you can manually delegate exceptions, e.g.\n * `try { ... } catch(e) { $exceptionHandler(e); }`\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\nvar APPLICATION_JSON = 'application/json';\nvar CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};\nvar JSON_START = /^\\s*(\\[|\\{[^\\{])/;\nvar JSON_END = /[\\}\\]]\\s*$/;\nvar JSON_PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\nfunction defaultHttpResponseTransform(data, headers) {\n  if (isString(data)) {\n    // strip json vulnerability protection prefix\n    data = data.replace(JSON_PROTECTION_PREFIX, '');\n    var contentType = headers('Content-Type');\n    if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0 && data.trim()) ||\n        (JSON_START.test(data) && JSON_END.test(data))) {\n      data = fromJson(data);\n    }\n  }\n  return data;\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = createMap(), key, val, i;\n\n  if (!headers) return parsed;\n\n  forEach(headers.split('\\n'), function(line) {\n    i = line.indexOf(':');\n    key = lowercase(trim(line.substr(0, i)));\n    val = trim(line.substr(i + 1));\n\n    if (key) {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj = isObject(headers) ? headers : undefined;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      var value = headersObj[lowercase(name)];\n      if (value === void 0) {\n        value = null;\n      }\n      return value;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers Http headers getter fn.\n * @param {(Function|Array.<Function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, fns) {\n  if (isFunction(fns))\n    return fns(data, headers);\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\n/**\n * @ngdoc provider\n * @name $httpProvider\n * @description\n * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.\n * */\nfunction $HttpProvider() {\n  /**\n   * @ngdoc property\n   * @name $httpProvider#defaults\n   * @description\n   *\n   * Object containing default values for all {@link ng.$http $http} requests.\n   *\n   * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}\n   * that will provide the cache for all requests who set their `cache` property to `true`.\n   * If you set the `default.cache = false` then only requests that specify their own custom\n   * cache object will be cached. See {@link $http#caching $http Caching} for more information.\n   *\n   * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.\n   * Defaults value is `'XSRF-TOKEN'`.\n   *\n   * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the\n   * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.\n   *\n   * - **`defaults.headers`** - {Object} - Default headers for all $http requests.\n   * Refer to {@link ng.$http#setting-http-headers $http} for documentation on\n   * setting default headers.\n   *     - **`defaults.headers.common`**\n   *     - **`defaults.headers.post`**\n   *     - **`defaults.headers.put`**\n   *     - **`defaults.headers.patch`**\n   *\n   **/\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [defaultHttpResponseTransform],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN'\n  };\n\n  var useApplyAsync = false;\n  /**\n   * @ngdoc method\n   * @name $httpProvider#useApplyAsync\n   * @description\n   *\n   * Configure $http service to combine processing of multiple http responses received at around\n   * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in\n   * significant performance improvement for bigger applications that make many HTTP requests\n   * concurrently (common during application bootstrap).\n   *\n   * Defaults to false. If no value is specifed, returns the current configured value.\n   *\n   * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred\n   *    \"apply\" on the next tick, giving time for subsequent requests in a roughly ~10ms window\n   *    to load and share the same digest cycle.\n   *\n   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.\n   *    otherwise, returns the current configured value.\n   **/\n  this.useApplyAsync = function(value) {\n    if (isDefined(value)) {\n      useApplyAsync = !!value;\n      return this;\n    }\n    return useApplyAsync;\n  };\n\n  /**\n   * @ngdoc property\n   * @name $httpProvider#interceptors\n   * @description\n   *\n   * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}\n   * pre-processing of request or postprocessing of responses.\n   *\n   * These service factories are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   *\n   * {@link ng.$http#interceptors Interceptors detailed info}\n   **/\n  var interceptorFactories = this.interceptors = [];\n\n  this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    /**\n     * @ngdoc service\n     * @kind function\n     * @name $http\n     * @requires ng.$httpBackend\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * ## General usage\n     * The `$http` service is a function which takes a single argument — a configuration object —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}\n     * with two $http specific methods: `success` and `error`.\n     *\n     * ```js\n     *   // Simple GET request example :\n     *   $http.get('/someUrl').\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     * ```js\n     *   // Simple POST request example (passing data) :\n     *   $http.post('/someUrl', {msg:'hello word!'}).\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     *\n     * Since the returned value of calling the $http function is a `promise`, you can also use\n     * the `then` method to register callbacks, and these callbacks will receive a single argument –\n     * an object representing the response. See the API signature and type info below for more\n     * details.\n     *\n     * A response status code between 200 and 299 is considered a success status and\n     * will result in the success callback being called. Note that if the response is a redirect,\n     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n     * called for such responses.\n     *\n     * ## Writing Unit Tests that use $http\n     * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n     * request using trained responses.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $http.get(...);\n     * $httpBackend.flush();\n     * ```\n     *\n     * ## Shortcut methods\n     *\n     * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n     * request data must be passed in for POST/PUT requests.\n     *\n     * ```js\n     *   $http.get('/someUrl').success(successCallback);\n     *   $http.post('/someUrl', data).success(successCallback);\n     * ```\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#get $http.get}\n     * - {@link ng.$http#head $http.head}\n     * - {@link ng.$http#post $http.post}\n     * - {@link ng.$http#put $http.put}\n     * - {@link ng.$http#delete $http.delete}\n     * - {@link ng.$http#jsonp $http.jsonp}\n     * - {@link ng.$http#patch $http.patch}\n     *\n     *\n     * ## Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. For example:\n     *\n     * ```\n     * module.run(function($http) {\n     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'\n     * });\n     * ```\n     *\n     * In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,\n     * Use the `headers` property, setting the desired header to `undefined`. For example:\n     *\n     * ```js\n     * var req = {\n     *  method: 'POST',\n     *  url: 'http://example.com',\n     *  headers: {\n     *    'Content-Type': undefined\n     *  },\n     *  data: { test: 'test' },\n     * }\n     *\n     * $http(req).success(function(){...}).error(function(){...});\n     * ```\n     *\n     * ## Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transformation functions: `transformRequest`\n     * and `transformResponse`. These properties can be a single function that returns\n     * the transformed value (`{function(data, headersGetter)`) or an array of such transformation functions,\n     * which allows you to `push` or `unshift` a new transformation function into the transformation chain.\n     *\n     * ### Default Transformations\n     *\n     * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and\n     * `defaults.transformResponse` properties. If a request does not provide its own transformations\n     * then these will be applied.\n     *\n     * You can augment or replace the default transformations by modifying these properties by adding to or\n     * replacing the array.\n     *\n     * Angular provides the following default transformations:\n     *\n     * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     *\n     * ### Overriding the Default Transformations Per Request\n     *\n     * If you wish override the request/response transformations only for a single request then provide\n     * `transformRequest` and/or `transformResponse` properties on the configuration object passed\n     * into `$http`.\n     *\n     * Note that if you provide these properties on the config object the default transformations will be\n     * overwritten. If you wish to augment the default transformations then you must include them in your\n     * local transformation array.\n     *\n     * The following code demonstrates adding a new response transformation to be run after the default response\n     * transformations have been run.\n     *\n     * ```js\n     * function appendTransform(defaults, transform) {\n     *\n     *   // We can't guarantee that the default transformation is an array\n     *   defaults = angular.isArray(defaults) ? defaults : [defaults];\n     *\n     *   // Append the new transformation to the defaults\n     *   return defaults.concat(transform);\n     * }\n     *\n     * $http({\n     *   url: '...',\n     *   method: 'GET',\n     *   transformResponse: appendTransform($http.defaults.transformResponse, function(value) {\n     *     return doTransform(value);\n     *   })\n     * });\n     * ```\n     *\n     *\n     * ## Caching\n     *\n     * To enable caching, set the request configuration `cache` property to `true` (to use default\n     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).\n     * When the cache is enabled, `$http` stores the response from the server in the specified\n     * cache. The next time the same request is made, the response is served from the cache without\n     * sending a request to the server.\n     *\n     * Note that even if the response is served from cache, delivery of the data is asynchronous in\n     * the same way that real requests are.\n     *\n     * If there are multiple GET requests for the same URL that should be cached using the same\n     * cache, but the cache is not populated yet, only one request to the server will be made and\n     * the remaining requests will be fulfilled using the response from the first request.\n     *\n     * You can change the default cache to a new object (built with\n     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the\n     * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set\n     * their `cache` property to `true` will now use this cache object.\n     *\n     * If you set the default cache to `false` then only requests that specify their own custom\n     * cache object will be cached.\n     *\n     * ## Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with a http `config` object. The function is free to\n     *     modify the `config` object or create a new one. The function needs to return the `config`\n     *     object directly, or a promise containing the `config` or a new `config` object.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` object or create a new one. The function needs to return the `response`\n     *     object directly, or as a promise containing the `response` or a new `response` object.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config;\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response;\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       }\n     *     };\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // alternatively, register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * ```\n     *\n     * ## Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ### JSON Vulnerability Protection\n     *\n     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * allows third party website to turn your JSON resource URL into\n     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * ```js\n     * ['one','two']\n     * ```\n     *\n     * which is vulnerable to attack, your server can return:\n     * ```js\n     * )]}',\n     * ['one','two']\n     * ```\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ### Cross Site Request Forgery (XSRF) Protection\n     *\n     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which\n     * an unauthorized site can gain your user's private data. Angular provides a mechanism\n     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie\n     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only\n     * JavaScript that runs on your domain could read the cookie, your server can be assured that\n     * the XHR came from JavaScript running on your domain. The header will not be set for\n     * cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n     * or the per-request config object.\n     *\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned\n     *      to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be\n     *      JSONified.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *      See {@link ng.$http#overriding-the-default-transformations-per-request\n     *      Overriding the Default Transformations}\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body and headers and returns its transformed (typically deserialized) version.\n     *      See {@link ng.$http#overriding-the-default-transformations-per-request\n     *      Overriding the Default Transformations}\n     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n     *      GET request, otherwise if a cache instance built with\n     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n     *      caching.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the\n     *      XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)\n     *      for more information.\n     *    - **responseType** - `{string}` - see\n     *      [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the\n     *   standard `then` method and two http specific methods: `success` and `error`. The `then`\n     *   method takes two arguments a success and an error callback which will be called with a\n     *   response object. The `success` and `error` methods take a single argument - a function that\n     *   will be called when the request succeeds or fails respectively. The arguments passed into\n     *   these functions are destructured representation of the response object passed into the\n     *   `then` method. The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *   - **statusText** – `{string}` – HTTP status text of the response.\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example module=\"httpExample\">\n<file name=\"index.html\">\n  <div ng-controller=\"FetchController\">\n    <select ng-model=\"method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\"/>\n    <button id=\"fetchbtn\" ng-click=\"fetch()\">fetch</button><br>\n    <button id=\"samplegetbtn\" ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button id=\"samplejsonpbtn\"\n      ng-click=\"updateModel('JSONP',\n                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button id=\"invalidjsonpbtn\"\n      ng-click=\"updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  angular.module('httpExample', [])\n    .controller('FetchController', ['$scope', '$http', '$templateCache',\n      function($scope, $http, $templateCache) {\n        $scope.method = 'GET';\n        $scope.url = 'http-hello.html';\n\n        $scope.fetch = function() {\n          $scope.code = null;\n          $scope.response = null;\n\n          $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n            success(function(data, status) {\n              $scope.status = status;\n              $scope.data = data;\n            }).\n            error(function(data, status) {\n              $scope.data = data || \"Request failed\";\n              $scope.status = status;\n          });\n        };\n\n        $scope.updateModel = function(method, url) {\n          $scope.method = method;\n          $scope.url = url;\n        };\n      }]);\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  var status = element(by.binding('status'));\n  var data = element(by.binding('data'));\n  var fetchBtn = element(by.id('fetchbtn'));\n  var sampleGetBtn = element(by.id('samplegetbtn'));\n  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\n  it('should make an xhr GET request', function() {\n    sampleGetBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Hello, \\$http!/);\n  });\n\n// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185\n// it('should make a JSONP request to angularjs.org', function() {\n//   sampleJsonpBtn.click();\n//   fetchBtn.click();\n//   expect(status.getText()).toMatch('200');\n//   expect(data.getText()).toMatch(/Super Hero!/);\n// });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    invalidJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('0');\n    expect(data.getText()).toMatch('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n      var config = {\n        method: 'get',\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse\n      };\n      var headers = mergeHeaders(requestConfig);\n\n      if (!angular.isObject(requestConfig)) {\n        throw minErr('$http')('badreq', 'Http request configuration must be an object.  Received: {0}', requestConfig);\n      }\n\n      extend(config, requestConfig);\n      config.headers = headers;\n      config.method = uppercase(config.method);\n\n      var serverRequest = function(config) {\n        headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(reqData)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n                delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData, headers).then(transformResponse, transformResponse);\n      };\n\n      var chain = [serverRequest, undefined];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          chain.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      while (chain.length) {\n        var thenFn = chain.shift();\n        var rejectFn = chain.shift();\n\n        promise = promise.then(thenFn, rejectFn);\n      }\n\n      promise.success = function(fn) {\n        promise.then(function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      promise.error = function(fn) {\n        promise.then(null, function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      return promise;\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response);\n        if (!response.data) {\n          resp.data = response.data;\n        } else {\n          resp.data = transformData(response.data, response.headers, config.transformResponse);\n        }\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // using for-in instead of forEach to avoid unecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        // execute if header value is a function for merged headers\n        execHeaders(reqHeaders);\n        return reqHeaders;\n\n        function execHeaders(headers) {\n          var headerContent;\n\n          forEach(headers, function(headerFn, header) {\n            if (isFunction(headerFn)) {\n              headerContent = headerFn();\n              if (headerContent != null) {\n                headers[header] = headerContent;\n              } else {\n                delete headers[header];\n              }\n            }\n          });\n        }\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name $http#get\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#delete\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#head\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#jsonp\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     The name of the callback should be the string `JSON_CALLBACK`.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name $http#post\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#put\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n     /**\n      * @ngdoc method\n      * @name $http#patch\n      *\n      * @description\n      * Shortcut method to perform `PATCH` request.\n      *\n      * @param {string} url Relative or absolute URL specifying the destination of the request\n      * @param {*} data Request content\n      * @param {Object=} config Optional configuration object\n      * @returns {HttpPromise} Future object\n      */\n    createShortMethodsWithData('post', 'put', 'patch');\n\n        /**\n         * @ngdoc property\n         * @name $http#defaults\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData, reqHeaders) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          url = buildUrl(config.url, config.params);\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false &&\n          (config.method === 'GET' || config.method === 'JSONP')) {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (isPromiseLike(cachedResp)) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(removePendingReq, removePendingReq);\n            return cachedResp;\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);\n            } else {\n              resolvePromise(cachedResp, 200, {}, 'OK');\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n\n      // if we won't have the response in cache, set the xsrf headers and\n      // send the request to the backend\n      if (isUndefined(cachedResp)) {\n        var xsrfValue = urlIsSameOrigin(config.url)\n            ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]\n            : undefined;\n        if (xsrfValue) {\n          reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n        }\n\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType);\n      }\n\n      return promise;\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString, statusText) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        function resolveHttpPromise() {\n          resolvePromise(response, status, headersString, statusText);\n        }\n\n        if (useApplyAsync) {\n          $rootScope.$applyAsync(resolveHttpPromise);\n        } else {\n          resolveHttpPromise();\n          if (!$rootScope.$$phase) $rootScope.$apply();\n        }\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers, statusText) {\n        // normalize internal statuses to 0\n        status = Math.max(status, 0);\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config,\n          statusText: statusText\n        });\n      }\n\n\n      function removePendingReq() {\n        var idx = $http.pendingRequests.indexOf(config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, params) {\n      if (!params) return url;\n      var parts = [];\n      forEachSorted(params, function(value, key) {\n        if (value === null || isUndefined(value)) return;\n        if (!isArray(value)) value = [value];\n\n        forEach(value, function(v) {\n          if (isObject(v)) {\n            if (isDate(v)) {\n              v = v.toISOString();\n            } else {\n              v = toJson(v);\n            }\n          }\n          parts.push(encodeUriQuery(key) + '=' +\n                     encodeUriQuery(v));\n        });\n      });\n      if (parts.length > 0) {\n        url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');\n      }\n      return url;\n    }\n  }];\n}\n\nfunction createXhr() {\n    return new window.XMLHttpRequest();\n}\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @requires $window\n * @requires $document\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {\n    return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);\n  }];\n}\n\nfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) == 'jsonp') {\n      var callbackId = '_' + (callbacks.counter++).toString(36);\n      callbacks[callbackId] = function(data) {\n        callbacks[callbackId].data = data;\n        callbacks[callbackId].called = true;\n      };\n\n      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n          callbackId, function(status, text) {\n        completeRequest(callback, status, callbacks[callbackId].data, \"\", text);\n        callbacks[callbackId] = noop;\n      });\n    } else {\n\n      var xhr = createXhr();\n\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      xhr.onload = function requestLoaded() {\n        var statusText = xhr.statusText || '';\n\n        // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n        // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n        var response = ('response' in xhr) ? xhr.response : xhr.responseText;\n\n        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n        var status = xhr.status === 1223 ? 204 : xhr.status;\n\n        // fix status code when it is 0 (0 status is undocumented).\n        // Occurs when accessing file resources or on Android 4.1 stock browser\n        // while retrieving files from application cache.\n        if (status === 0) {\n          status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n        }\n\n        completeRequest(callback,\n            status,\n            response,\n            xhr.getAllResponseHeaders(),\n            statusText);\n      };\n\n      var requestError = function() {\n        // The response is always empty\n        // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error\n        completeRequest(callback, -1, null, null, '');\n      };\n\n      xhr.onerror = requestError;\n      xhr.onabort = requestError;\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        try {\n          xhr.responseType = responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.send(post || null);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (isPromiseLike(timeout)) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString, statusText) {\n      // cancel timeout and subsequent timeout promise resolution\n      if (timeoutId !== undefined) {\n        $browserDefer.cancel(timeoutId);\n      }\n      jsonpDone = xhr = null;\n\n      callback(status, response, headersString, statusText);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, callbackId, done) {\n    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'), callback = null;\n    script.type = \"text/javascript\";\n    script.src = url;\n    script.async = true;\n\n    callback = function(event) {\n      removeEventListenerFn(script, \"load\", callback);\n      removeEventListenerFn(script, \"error\", callback);\n      rawDocument.body.removeChild(script);\n      script = null;\n      var status = -1;\n      var text = \"unknown\";\n\n      if (event) {\n        if (event.type === \"load\" && !callbacks[callbackId].called) {\n          event = { type: \"error\" };\n        }\n        text = event.type;\n        status = event.type === \"error\" ? 404 : 200;\n      }\n\n      if (done) {\n        done(status, text);\n      }\n    };\n\n    addEventListenerFn(script, \"load\", callback);\n    addEventListenerFn(script, \"error\", callback);\n    rawDocument.body.appendChild(script);\n    return callback;\n  }\n}\n\nvar $interpolateMinErr = minErr('$interpolate');\n\n/**\n * @ngdoc provider\n * @name $interpolateProvider\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * @example\n<example module=\"customInterpolationApp\">\n<file name=\"index.html\">\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-app=\"App\" ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  it('should interpolate binding with custom symbols', function() {\n    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n  });\n</file>\n</example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#startSymbol\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value) {\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#endSymbol\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value) {\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length,\n        escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),\n        escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');\n\n    function escape(ch) {\n      return '\\\\\\\\\\\\' + ch;\n    }\n\n    /**\n     * @ngdoc service\n     * @name $interpolate\n     * @kind function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var exp = $interpolate('Hello {{name | uppercase}}!');\n     *   expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');\n     * ```\n     *\n     * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is\n     * `true`, the interpolation function will return `undefined` unless all embedded expressions\n     * evaluate to a value other than `undefined`.\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var context = {greeting: 'Hello', name: undefined };\n     *\n     *   // default \"forgiving\" mode\n     *   var exp = $interpolate('{{greeting}} {{name}}!');\n     *   expect(exp(context)).toEqual('Hello !');\n     *\n     *   // \"allOrNothing\" mode\n     *   exp = $interpolate('{{greeting}} {{name}}!', false, null, true);\n     *   expect(exp(context)).toBeUndefined();\n     *   context.name = 'Angular';\n     *   expect(exp(context)).toEqual('Hello Angular!');\n     * ```\n     *\n     * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.\n     *\n     * ####Escaped Interpolation\n     * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers\n     * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).\n     * It will be rendered as a regular start/end marker, and will not be interpreted as an expression\n     * or binding.\n     *\n     * This enables web-servers to prevent script injection attacks and defacing attacks, to some\n     * degree, while also enabling code examples to work without relying on the\n     * {@link ng.directive:ngNonBindable ngNonBindable} directive.\n     *\n     * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,\n     * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all\n     * interpolation start/end markers with their escaped counterparts.**\n     *\n     * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered\n     * output when the $interpolate service processes the text. So, for HTML elements interpolated\n     * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter\n     * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,\n     * this is typically useful only when user-data is used in rendering a template from the server, or\n     * when otherwise untrusted data is used by a directive.\n     *\n     * <example>\n     *  <file name=\"index.html\">\n     *    <div ng-init=\"username='A user'\">\n     *      <p ng-init=\"apptitle='Escaping demo'\">{{apptitle}}: \\{\\{ username = \"defaced value\"; \\}\\}\n     *        </p>\n     *      <p><strong>{{username}}</strong> attempts to inject code which will deface the\n     *        application, but fails to accomplish their task, because the server has correctly\n     *        escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)\n     *        characters.</p>\n     *      <p>Instead, the result of the attempted script injection is visible, and can be removed\n     *        from the database by an administrator.</p>\n     *    </div>\n     *  </file>\n     * </example>\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined\n     *    unless all embedded expressions evaluate to a value other than `undefined`.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     * - `context`: evaluation context for all expressions embedded in the interpolated text\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {\n      allOrNothing = !!allOrNothing;\n      var startIndex,\n          endIndex,\n          index = 0,\n          expressions = [],\n          parseFns = [],\n          textLength = text.length,\n          exp,\n          concat = [],\n          expressionPositions = [];\n\n      while (index < textLength) {\n        if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {\n          if (index !== startIndex) {\n            concat.push(unescapeText(text.substring(index, startIndex)));\n          }\n          exp = text.substring(startIndex + startSymbolLength, endIndex);\n          expressions.push(exp);\n          parseFns.push($parse(exp, parseStringifyInterceptor));\n          index = endIndex + endSymbolLength;\n          expressionPositions.push(concat.length);\n          concat.push('');\n        } else {\n          // we did not find an interpolation, so we have to add the remainder to the separators array\n          if (index !== textLength) {\n            concat.push(unescapeText(text.substring(index)));\n          }\n          break;\n        }\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && concat.length > 1) {\n          throw $interpolateMinErr('noconcat',\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n              \"interpolations that concatenate multiple expressions when a trusted value is \" +\n              \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n      }\n\n      if (!mustHaveExpression || expressions.length) {\n        var compute = function(values) {\n          for (var i = 0, ii = expressions.length; i < ii; i++) {\n            if (allOrNothing && isUndefined(values[i])) return;\n            concat[expressionPositions[i]] = values[i];\n          }\n          return concat.join('');\n        };\n\n        var getValue = function(value) {\n          return trustedContext ?\n            $sce.getTrusted(trustedContext, value) :\n            $sce.valueOf(value);\n        };\n\n        var stringify = function(value) {\n          if (value == null) { // null || undefined\n            return '';\n          }\n          switch (typeof value) {\n            case 'string':\n              break;\n            case 'number':\n              value = '' + value;\n              break;\n            default:\n              value = toJson(value);\n          }\n\n          return value;\n        };\n\n        return extend(function interpolationFn(context) {\n            var i = 0;\n            var ii = expressions.length;\n            var values = new Array(ii);\n\n            try {\n              for (; i < ii; i++) {\n                values[i] = parseFns[i](context);\n              }\n\n              return compute(values);\n            } catch (err) {\n              var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n                  err.toString());\n              $exceptionHandler(newErr);\n            }\n\n          }, {\n          // all of these properties are undocumented for now\n          exp: text, //just for compatibility with regular watchers created via $watch\n          expressions: expressions,\n          $$watchDelegate: function(scope, listener, objectEquality) {\n            var lastValue;\n            return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {\n              var currValue = compute(values);\n              if (isFunction(listener)) {\n                listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);\n              }\n              lastValue = currValue;\n            }, objectEquality);\n          }\n        });\n      }\n\n      function unescapeText(text) {\n        return text.replace(escapedStartRegexp, startSymbol).\n          replace(escapedEndRegexp, endSymbol);\n      }\n\n      function parseStringifyInterceptor(value) {\n        try {\n          value = getValue(value);\n          return allOrNothing && !isDefined(value) ? value : stringify(value);\n        } catch (err) {\n          var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n            err.toString());\n          $exceptionHandler(newErr);\n        }\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#startSymbol\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#endSymbol\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change\n     * the symbol.\n     *\n     * @returns {string} end symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q', '$$q',\n       function($rootScope,   $window,   $q,   $$q) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * <div class=\"alert alert-warning\">\n      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n      * with them.  In particular they are not automatically destroyed when a controller's scope or a\n      * directive's element are destroyed.\n      * You should take this into consideration and make sure to always cancel the interval at the\n      * appropriate moment.  See the example below for more details on how and when to do this.\n      * </div>\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {promise} A promise which will be notified on each iteration.\n      *\n      * @example\n      * <example module=\"intervalExample\">\n      * <file name=\"index.html\">\n      *   <script>\n      *     angular.module('intervalExample', [])\n      *       .controller('ExampleController', ['$scope', '$interval',\n      *         function($scope, $interval) {\n      *           $scope.format = 'M/d/yy h:mm:ss a';\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *\n      *           var stop;\n      *           $scope.fight = function() {\n      *             // Don't start a new fight if we are already fighting\n      *             if ( angular.isDefined(stop) ) return;\n      *\n      *           stop = $interval(function() {\n      *             if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n      *               $scope.blood_1 = $scope.blood_1 - 3;\n      *               $scope.blood_2 = $scope.blood_2 - 4;\n      *             } else {\n      *               $scope.stopFight();\n      *             }\n      *           }, 100);\n      *         };\n      *\n      *         $scope.stopFight = function() {\n      *           if (angular.isDefined(stop)) {\n      *             $interval.cancel(stop);\n      *             stop = undefined;\n      *           }\n      *         };\n      *\n      *         $scope.resetFight = function() {\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *         };\n      *\n      *         $scope.$on('$destroy', function() {\n      *           // Make sure that the interval is destroyed too\n      *           $scope.stopFight();\n      *         });\n      *       }])\n      *       // Register the 'myCurrentTime' directive factory method.\n      *       // We inject $interval and dateFilter service since the factory method is DI.\n      *       .directive('myCurrentTime', ['$interval', 'dateFilter',\n      *         function($interval, dateFilter) {\n      *           // return the directive link function. (compile function not needed)\n      *           return function(scope, element, attrs) {\n      *             var format,  // date format\n      *                 stopTime; // so that we can cancel the time updates\n      *\n      *             // used to update the UI\n      *             function updateTime() {\n      *               element.text(dateFilter(new Date(), format));\n      *             }\n      *\n      *             // watch the expression, and update the UI on change.\n      *             scope.$watch(attrs.myCurrentTime, function(value) {\n      *               format = value;\n      *               updateTime();\n      *             });\n      *\n      *             stopTime = $interval(updateTime, 1000);\n      *\n      *             // listen on DOM destroy (removal) event, and cancel the next UI update\n      *             // to prevent updating time after the DOM element was removed.\n      *             element.on('$destroy', function() {\n      *               $interval.cancel(stopTime);\n      *             });\n      *           }\n      *         }]);\n      *   </script>\n      *\n      *   <div>\n      *     <div ng-controller=\"ExampleController\">\n      *       Date format: <input ng-model=\"format\"> <hr/>\n      *       Current time is: <span my-current-time=\"format\"></span>\n      *       <hr/>\n      *       Blood 1 : <font color='red'>{{blood_1}}</font>\n      *       Blood 2 : <font color='red'>{{blood_2}}</font>\n      *       <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n      *       <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n      *       <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n      *     </div>\n      *   </div>\n      *\n      * </file>\n      * </example>\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          deferred = (skipApply ? $$q : $q).defer(),\n          promise = deferred.promise;\n\n      count = isDefined(count) ? count : 0;\n\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = setInterval(function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $interval#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {promise} promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        $window.clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\nfunction $LocaleProvider() {\n  this.$get = function() {\n    return {\n      id: 'en-us',\n\n      NUMBER_FORMATS: {\n        DECIMAL_SEP: '.',\n        GROUP_SEP: ',',\n        PATTERNS: [\n          { // Decimal Pattern\n            minInt: 1,\n            minFrac: 0,\n            maxFrac: 3,\n            posPre: '',\n            posSuf: '',\n            negPre: '-',\n            negSuf: '',\n            gSize: 3,\n            lgSize: 3\n          },{ //Currency Pattern\n            minInt: 1,\n            minFrac: 2,\n            maxFrac: 2,\n            posPre: '\\u00A4',\n            posSuf: '',\n            negPre: '(\\u00A4',\n            negSuf: ')',\n            gSize: 3,\n            lgSize: 3\n          }\n        ],\n        CURRENCY_SYM: '$'\n      },\n\n      DATETIME_FORMATS: {\n        MONTH:\n            'January,February,March,April,May,June,July,August,September,October,November,December'\n            .split(','),\n        SHORTMONTH:  'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n        DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n        SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n        AMPMS: ['AM','PM'],\n        medium: 'MMM d, y h:mm:ss a',\n        'short': 'M/d/yy h:mm a',\n        fullDate: 'EEEE, MMMM d, y',\n        longDate: 'MMMM d, y',\n        mediumDate: 'MMM d, y',\n        shortDate: 'M/d/yy',\n        mediumTime: 'h:mm:ss a',\n        shortTime: 'h:mm a'\n      },\n\n      pluralCat: function(num) {\n        if (num === 1) {\n          return 'one';\n        }\n        return 'other';\n      }\n    };\n  };\n}\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj) {\n  var parsedUrl = urlResolve(absoluteUrl);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\n\n/**\n *\n * @param {string} begin\n * @param {string} whole\n * @returns {string} returns text from whole after begin or undefined if it does not begin with\n *                   expected string.\n */\nfunction beginsWith(begin, whole) {\n  if (whole.indexOf(begin) === 0) {\n    return whole.substr(begin.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  var appBaseNoFile = stripFile(appBase);\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} url HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = beginsWith(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (relHref && relHref[0] === '#') {\n      // special case for links to hash fragments:\n      // keep the old url and only replace the hash fragment\n      this.hash(relHref.slice(1));\n      return true;\n    }\n    var appUrl, prevAppUrl;\n    var rewrittenUrl;\n\n    if ((appUrl = beginsWith(appBase, url)) !== undefined) {\n      prevAppUrl = appUrl;\n      if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {\n        rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n      } else {\n        rewrittenUrl = appBase + prevAppUrl;\n      }\n    } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {\n      rewrittenUrl = appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      rewrittenUrl = appBaseNoFile;\n    }\n    if (rewrittenUrl) {\n      this.$$parse(rewrittenUrl);\n    }\n    return !!rewrittenUrl;\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, hashPrefix) {\n  var appBaseNoFile = stripFile(appBase);\n\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'\n        ? beginsWith(hashPrefix, withoutBaseUrl)\n        : (this.$$html5)\n          ? withoutBaseUrl\n          : '';\n\n    if (!isString(withoutHashUrl)) {\n      throw $locationMinErr('ihshprfx', 'Invalid url \"{0}\", missing hash prefix \"{1}\".', url,\n          hashPrefix);\n    }\n    parseAppUrl(withoutHashUrl, this);\n\n    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\n    this.$$compose();\n\n    /*\n     * In Windows, on an anchor node on documents loaded from\n     * the filesystem, the browser will return a pathname\n     * prefixed with the drive name ('/C:/path') when a\n     * pathname without a drive is set:\n     *  * a.setAttribute('href', '/foo')\n     *   * a.pathname === '/C:/foo' //true\n     *\n     * Inside of Angular, we're always using pathnames that\n     * do not include drive names for routing.\n     */\n    function removeWindowsDriveName(path, url, base) {\n      /*\n      Matches paths for file protocol on windows,\n      such as /C:/foo/bar, and captures only /foo/bar.\n      */\n      var windowsFilePathExp = /^\\/[A-Z]:(\\/.*)/;\n\n      var firstPathSegmentMatch;\n\n      //Get the relative path from the input URL.\n      if (url.indexOf(base) === 0) {\n        url = url.replace(base, '');\n      }\n\n      // The input URL intentionally contains a first path segment that ends with a colon.\n      if (windowsFilePathExp.exec(url)) {\n        return path;\n      }\n\n      firstPathSegmentMatch = windowsFilePathExp.exec(path);\n      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n    }\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (stripHash(appBase) == stripHash(url)) {\n      this.$$parse(url);\n      return true;\n    }\n    return false;\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  var appBaseNoFile = stripFile(appBase);\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (relHref && relHref[0] === '#') {\n      // special case for links to hash fragments:\n      // keep the old url and only replace the hash fragment\n      this.hash(relHref.slice(1));\n      return true;\n    }\n\n    var rewrittenUrl;\n    var appUrl;\n\n    if (appBase == stripHash(url)) {\n      rewrittenUrl = url;\n    } else if ((appUrl = beginsWith(appBaseNoFile, url))) {\n      rewrittenUrl = appBase + hashPrefix + appUrl;\n    } else if (appBaseNoFile === url + '/') {\n      rewrittenUrl = appBaseNoFile;\n    }\n    if (rewrittenUrl) {\n      this.$$parse(rewrittenUrl);\n    }\n    return !!rewrittenUrl;\n  };\n\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'\n    this.$$absUrl = appBase + hashPrefix + this.$$url;\n  };\n\n}\n\n\nvar locationPrototype = {\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name $location#absUrl\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var absUrl = $location.absUrl();\n   * // => \"http://example.com/#/some/path?foo=bar&baz=xoxo\"\n   * ```\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name $location#url\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var url = $location.url();\n   * // => \"/some/path?foo=bar&baz=xoxo\"\n   * ```\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @return {string} url\n   */\n  url: function(url) {\n    if (isUndefined(url))\n      return this.$$url;\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1] || url === '') this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1] || url === '') this.search(match[3] || '');\n    this.hash(match[5] || '');\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#protocol\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var protocol = $location.protocol();\n   * // => \"http\"\n   * ```\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name $location#host\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var host = $location.host();\n   * // => \"example.com\"\n   * ```\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name $location#port\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var port = $location.port();\n   * // => 80\n   * ```\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name $location#path\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var path = $location.path();\n   * // => \"/some/path\"\n   * ```\n   *\n   * @param {(string|number)=} path New path\n   * @return {string} path\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    path = path !== null ? path.toString() : '';\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#search\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var searchObject = $location.search();\n   * // => {foo: 'bar', baz: 'xoxo'}\n   *\n   * // set foo to 'yipee'\n   * $location.search('foo', 'yipee');\n   * // $location.search() => {foo: 'yipee', baz: 'xoxo'}\n   * ```\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object.\n   *\n   * When called with a single argument the method acts as a setter, setting the `search` component\n   * of `$location` to the specified value.\n   *\n   * If the argument is a hash object containing an array of values, these values will be encoded\n   * as duplicate search parameters in the url.\n   *\n   * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`\n   * will override only a single search property.\n   *\n   * If `paramValue` is an array, it will override the property of the `search` component of\n   * `$location` specified via the first argument.\n   *\n   * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n   *\n   * If `paramValue` is `true`, the property specified via the first argument will be added with no\n   * value nor trailing equal sign.\n   *\n   * @return {Object} If called with no arguments returns the parsed `search` object. If called with\n   * one or more arguments returns `$location` object itself.\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search) || isNumber(search)) {\n          search = search.toString();\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          search = copy(search, {});\n          // remove object undefined or null properties\n          forEach(search, function(value, key) {\n            if (value == null) delete search[key];\n          });\n\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#hash\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return hash fragment when called without any parameter.\n   *\n   * Change hash fragment when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/some/path?foo=bar&baz=xoxo#hashValue\n   * var hash = $location.hash();\n   * // => \"hashValue\"\n   * ```\n   *\n   * @param {(string|number)=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', function(hash) {\n    return hash !== null ? hash.toString() : '';\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#replace\n   *\n   * @description\n   * If called, all changes to $location during current `$digest` will be replacing current history\n   * record, instead of adding new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nforEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {\n  Location.prototype = Object.create(locationPrototype);\n\n  /**\n   * @ngdoc method\n   * @name $location#state\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return the history state object when called without any parameter.\n   *\n   * Change the history state object when called with one parameter and return `$location`.\n   * The state object is later passed to `pushState` or `replaceState`.\n   *\n   * NOTE: This method is supported only in HTML5 mode and only in browsers supporting\n   * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support\n   * older browsers (like IE9 or Android < 4.0), don't use this method.\n   *\n   * @param {object=} state State object for pushState or replaceState\n   * @return {object} state\n   */\n  Location.prototype.state = function(state) {\n    if (!arguments.length)\n      return this.$$state;\n\n    if (Location !== LocationHtml5Url || !this.$$html5) {\n      throw $locationMinErr('nostate', 'History API state support is available only ' +\n        'in HTML5 mode and only in browsers supporting HTML5 History API');\n    }\n    // The user might modify `stateObject` after invoking `$location.state(stateObject)`\n    // but we're changing the $$state reference to $browser.state() during the $digest\n    // so the modification window is narrow.\n    this.$$state = isUndefined(state) ? null : state;\n\n    return this;\n  };\n});\n\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value))\n      return this[property];\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc service\n * @name $location\n *\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/$location Developer Guide: Using $location}\n */\n\n/**\n * @ngdoc provider\n * @name $locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider() {\n  var hashPrefix = '',\n      html5Mode = {\n        enabled: false,\n        requireBase: true,\n        rewriteLinks: true\n      };\n\n  /**\n   * @ngdoc method\n   * @name $locationProvider#hashPrefix\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $locationProvider#html5Mode\n   * @description\n   * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.\n   *   If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported\n   *   properties:\n   *   - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to\n   *     change urls where supported. Will fall back to hash-prefixed paths in browsers that do not\n   *     support `pushState`.\n   *   - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies\n   *     whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are\n   *     true, and a base tag is not present, an error will be thrown when `$location` is injected.\n   *     See the {@link guide/$location $location guide for more information}\n   *   - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,\n   *     enables/disables url rewriting for relative links.\n   *\n   * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isBoolean(mode)) {\n      html5Mode.enabled = mode;\n      return this;\n    } else if (isObject(mode)) {\n\n      if (isBoolean(mode.enabled)) {\n        html5Mode.enabled = mode.enabled;\n      }\n\n      if (isBoolean(mode.requireBase)) {\n        html5Mode.requireBase = mode.requireBase;\n      }\n\n      if (isBoolean(mode.rewriteLinks)) {\n        html5Mode.rewriteLinks = mode.rewriteLinks;\n      }\n\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeStart\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change.\n   *\n   * This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n   * the browser supports the HTML5 History API.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   * @param {string=} newState New history state object\n   * @param {string=} oldState History state object that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeSuccess\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n   * the browser supports the HTML5 History API.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   * @param {string=} newState New history state object\n   * @param {string=} oldState History state object that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',\n      function($rootScope, $browser, $sniffer, $rootElement) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode.enabled) {\n      if (!baseHref && html5Mode.requireBase) {\n        throw $locationMinErr('nobase',\n          \"$location in HTML5 mode requires a <base> tag to be present!\");\n      }\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    $location = new LocationMode(appBase, '#' + hashPrefix);\n    $location.$$parseLinkUrl(initialUrl, initialUrl);\n\n    $location.$$state = $browser.state();\n\n    var IGNORE_URI_REGEXP = /^\\s*(javascript|mailto):/i;\n\n    function setBrowserUrlWithFallback(url, replace, state) {\n      var oldUrl = $location.url();\n      var oldState = $location.$$state;\n      try {\n        $browser.url(url, replace, state);\n\n        // Make sure $location.state() returns referentially identical (not just deeply equal)\n        // state object; this makes possible quick checking if the state changed in the digest\n        // loop. Checking deep equality would be too expensive.\n        $location.$$state = $browser.state();\n      } catch (e) {\n        // Restore old values if pushState fails\n        $location.url(oldUrl);\n        $location.$$state = oldState;\n\n        throw e;\n      }\n    }\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.which == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (nodeName_(elm[0]) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n      // get the actual href attribute - see\n      // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx\n      var relHref = elm.attr('href') || elm.attr('xlink:href');\n\n      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n        // an animation.\n        absHref = urlResolve(absHref.animVal).href;\n      }\n\n      // Ignore when url is started with javascript: or mailto:\n      if (IGNORE_URI_REGEXP.test(absHref)) return;\n\n      if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {\n        if ($location.$$parseLinkUrl(absHref, relHref)) {\n          // We do a preventDefault for all urls that are part of the angular application,\n          // in html5mode and also without, so that we are able to abort navigation without\n          // getting double entries in the location history.\n          event.preventDefault();\n          // update location manually\n          if ($location.absUrl() != $browser.url()) {\n            $rootScope.$apply();\n            // hack to work around FF6 bug 684208 when scenario runner clicks on links\n            window.angular['ff-684208-preventDefault'] = true;\n          }\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if ($location.absUrl() != initialUrl) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    var initializing = true;\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl, newState) {\n      $rootScope.$evalAsync(function() {\n        var oldUrl = $location.absUrl();\n        var oldState = $location.$$state;\n        var defaultPrevented;\n\n        $location.$$parse(newUrl);\n        $location.$$state = newState;\n\n        defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n            newState, oldState).defaultPrevented;\n\n        // if the location was changed by a `$locationChangeStart` handler then stop\n        // processing this location change\n        if ($location.absUrl() !== newUrl) return;\n\n        if (defaultPrevented) {\n          $location.$$parse(oldUrl);\n          $location.$$state = oldState;\n          setBrowserUrlWithFallback(oldUrl, false, oldState);\n        } else {\n          initializing = false;\n          afterLocationChange(oldUrl, oldState);\n        }\n      });\n      if (!$rootScope.$$phase) $rootScope.$digest();\n    });\n\n    // update browser\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = $browser.url();\n      var oldState = $browser.state();\n      var currentReplace = $location.$$replace;\n      var urlOrStateChanged = oldUrl !== $location.absUrl() ||\n        ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);\n\n      if (initializing || urlOrStateChanged) {\n        initializing = false;\n\n        $rootScope.$evalAsync(function() {\n          var newUrl = $location.absUrl();\n          var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n              $location.$$state, oldState).defaultPrevented;\n\n          // if the location was changed by a `$locationChangeStart` handler then stop\n          // processing this location change\n          if ($location.absUrl() !== newUrl) return;\n\n          if (defaultPrevented) {\n            $location.$$parse(oldUrl);\n            $location.$$state = oldState;\n          } else {\n            if (urlOrStateChanged) {\n              setBrowserUrlWithFallback(newUrl, currentReplace,\n                                        oldState === $location.$$state ? null : $location.$$state);\n            }\n            afterLocationChange(oldUrl, oldState);\n          }\n        });\n      }\n\n      $location.$$replace = false;\n\n      // we don't need to return anything because $evalAsync will make the digest loop dirty when\n      // there is a change\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl, oldState) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,\n        $location.$$state, oldState);\n    }\n}];\n}\n\n/**\n * @ngdoc service\n * @name $log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n *\n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example module=\"logExample\">\n     <file name=\"script.js\">\n       angular.module('logExample', [])\n         .controller('LogController', ['$scope', '$log', function($scope, $log) {\n           $scope.$log = $log;\n           $scope.message = 'Hello World!';\n         }]);\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogController\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         Message:\n         <input type=\"text\" ng-model=\"message\"/>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc provider\n * @name $logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider() {\n  var debug = true,\n      self = this;\n\n  /**\n   * @ngdoc method\n   * @name $logProvider#debugEnabled\n   * @description\n   * @param {boolean=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = ['$window', function($window) {\n    return {\n      /**\n       * @ngdoc method\n       * @name $log#log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name $log#info\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name $log#warn\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name $log#error\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n\n      /**\n       * @ngdoc method\n       * @name $log#debug\n       *\n       * @description\n       * Write a debug message\n       */\n      debug: (function() {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop,\n          hasApply = false;\n\n      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n      // The reason behind this is that console.log has type \"object\" in IE8...\n      try {\n        hasApply = !!logFn.apply;\n      } catch (e) {}\n\n      if (hasApply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\nvar $parseMinErr = minErr('$parse');\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor('alert(\"evil JS code\")')\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n// Similarly we prevent invocations of function known to be dangerous, as well as assignments to\n// native objects.\n//\n// See https://docs.angularjs.org/guide/security\n\n\nfunction ensureSafeMemberName(name, fullExpression) {\n  if (name === \"__defineGetter__\" || name === \"__defineSetter__\"\n      || name === \"__lookupGetter__\" || name === \"__lookupSetter__\"\n      || name === \"__proto__\") {\n    throw $parseMinErr('isecfld',\n        'Attempting to access a disallowed field in Angular expressions! '\n        + 'Expression: {0}', fullExpression);\n  }\n  return name;\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n          'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isWindow(obj)\n        obj.window === obj) {\n      throw $parseMinErr('isecwindow',\n          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isElement(obj)\n        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n      throw $parseMinErr('isecdom',\n          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// block Object so that we can't get hold of dangerous Object.* methods\n        obj === Object) {\n      throw $parseMinErr('isecobj',\n          'Referencing Object in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    }\n  }\n  return obj;\n}\n\nvar CALL = Function.prototype.call;\nvar APPLY = Function.prototype.apply;\nvar BIND = Function.prototype.bind;\n\nfunction ensureSafeFunction(obj, fullExpression) {\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n        'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n    } else if (obj === CALL || obj === APPLY || obj === BIND) {\n      throw $parseMinErr('isecff',\n        'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n    }\n  }\n}\n\n//Keyword constants\nvar CONSTANTS = createMap();\nforEach({\n  'null': function() { return null; },\n  'true': function() { return true; },\n  'false': function() { return false; },\n  'undefined': function() {}\n}, function(constantGetter, name) {\n  constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true;\n  CONSTANTS[name] = constantGetter;\n});\n\n//Not quite a constant, but can be lex/parsed the same\nCONSTANTS['this'] = function(self) { return self; };\nCONSTANTS['this'].sharedGetter = true;\n\n\n//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter\nvar OPERATORS = extend(createMap(), {\n    '+':function(self, locals, a, b) {\n      a=a(self, locals); b=b(self, locals);\n      if (isDefined(a)) {\n        if (isDefined(b)) {\n          return a + b;\n        }\n        return a;\n      }\n      return isDefined(b) ? b : undefined;},\n    '-':function(self, locals, a, b) {\n          a=a(self, locals); b=b(self, locals);\n          return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0);\n        },\n    '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);},\n    '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);},\n    '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);},\n    '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);},\n    '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);},\n    '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);},\n    '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);},\n    '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);},\n    '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);},\n    '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);},\n    '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);},\n    '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);},\n    '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);},\n    '!':function(self, locals, a) {return !a(self, locals);},\n\n    //Tokenized as operators but parsed as assignment/filters\n    '=':true,\n    '|':true\n});\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function(options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function(text) {\n    this.text = text;\n    this.index = 0;\n    this.tokens = [];\n\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      if (ch === '\"' || ch === \"'\") {\n        this.readString(ch);\n      } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdent(ch)) {\n        this.readIdent();\n      } else if (this.is(ch, '(){}[].,;:?')) {\n        this.tokens.push({index: this.index, text: ch});\n        this.index++;\n      } else if (this.isWhitespace(ch)) {\n        this.index++;\n      } else {\n        var ch2 = ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var op1 = OPERATORS[ch];\n        var op2 = OPERATORS[ch2];\n        var op3 = OPERATORS[ch3];\n        if (op1 || op2 || op3) {\n          var token = op3 ? ch3 : (op2 ? ch2 : ch);\n          this.tokens.push({index: this.index, text: token, operator: true});\n          this.index += token.length;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n    }\n    return this.tokens;\n  },\n\n  is: function(ch, chars) {\n    return chars.indexOf(ch) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9') && typeof ch === \"string\";\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdent: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    this.tokens.push({\n      index: start,\n      text: number,\n      constant: true,\n      value: Number(number)\n    });\n  },\n\n  readIdent: function() {\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      if (!(this.isIdent(ch) || this.isNumber(ch))) {\n        break;\n      }\n      this.index++;\n    }\n    this.tokens.push({\n      index: start,\n      text: this.text.slice(start, this.index),\n      identifier: true\n    });\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i))\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          string = string + (rep || ch);\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          constant: true,\n          value: string\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\n\nfunction isConstant(exp) {\n  return exp.constant;\n}\n\n/**\n * @constructor\n */\nvar Parser = function(lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n};\n\nParser.ZERO = extend(function() {\n  return 0;\n}, {\n  sharedGetter: true,\n  constant: true\n});\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function(text) {\n    this.text = text;\n    this.tokens = this.lexer.lex(text);\n\n    var value = this.statements();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    value.literal = !!value.literal;\n    value.constant = !!value.constant;\n\n    return value;\n  },\n\n  primary: function() {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else if (this.peek().identifier) {\n      primary = this.identifier();\n    } else if (this.peek().constant) {\n      primary = this.constant();\n    } else {\n      this.throwError('not a primary expression', this.peek());\n    }\n\n    var next, context;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = this.functionCall(primary, context);\n        context = null;\n      } else if (next.text === '[') {\n        context = primary;\n        primary = this.objectIndex(primary);\n      } else if (next.text === '.') {\n        context = primary;\n        primary = this.fieldAccess(primary);\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0)\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    return this.peekAhead(0, e1, e2, e3, e4);\n  },\n  peekAhead: function(i, e1, e2, e3, e4) {\n    if (this.tokens.length > i) {\n      var token = this.tokens[i];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4) {\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  consume: function(e1) {\n    if (this.tokens.length === 0) {\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    }\n\n    var token = this.expect(e1);\n    if (!token) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n    return token;\n  },\n\n  unaryFn: function(op, right) {\n    var fn = OPERATORS[op];\n    return extend(function $parseUnaryFn(self, locals) {\n      return fn(self, locals, right);\n    }, {\n      constant:right.constant,\n      inputs: [right]\n    });\n  },\n\n  binaryFn: function(left, op, right, isBranching) {\n    var fn = OPERATORS[op];\n    return extend(function $parseBinaryFn(self, locals) {\n      return fn(self, locals, left, right);\n    }, {\n      constant: left.constant && right.constant,\n      inputs: !isBranching && [left, right]\n    });\n  },\n\n  identifier: function() {\n    var id = this.consume().text;\n\n    //Continue reading each `.identifier` unless it is a method invocation\n    while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) {\n      id += this.consume().text + this.consume().text;\n    }\n\n    return CONSTANTS[id] || getterFn(id, this.options, this.text);\n  },\n\n  constant: function() {\n    var value = this.consume().value;\n\n    return extend(function $parseConstant() {\n      return value;\n    }, {\n      constant: true,\n      literal: true\n    });\n  },\n\n  statements: function() {\n    var statements = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        statements.push(this.filterChain());\n      if (!this.expect(';')) {\n        // optimize for the common case where there is only one statement.\n        // TODO(size): maybe we should not support multiple statements?\n        return (statements.length === 1)\n            ? statements[0]\n            : function $parseStatements(self, locals) {\n                var value;\n                for (var i = 0, ii = statements.length; i < ii; i++) {\n                  value = statements[i](self, locals);\n                }\n                return value;\n              };\n      }\n    }\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while ((token = this.expect('|'))) {\n      left = this.filter(left);\n    }\n    return left;\n  },\n\n  filter: function(inputFn) {\n    var fn = this.$filter(this.consume().text);\n    var argsFn;\n    var args;\n\n    if (this.peek(':')) {\n      argsFn = [];\n      args = []; // we can safely reuse the array\n      while (this.expect(':')) {\n        argsFn.push(this.expression());\n      }\n    }\n\n    var inputs = [inputFn].concat(argsFn || []);\n\n    return extend(function $parseFilter(self, locals) {\n      var input = inputFn(self, locals);\n      if (args) {\n        args[0] = input;\n\n        var i = argsFn.length;\n        while (i--) {\n          args[i + 1] = argsFn[i](self, locals);\n        }\n\n        return fn.apply(undefined, args);\n      }\n\n      return fn(input);\n    }, {\n      constant: !fn.$stateful && inputs.every(isConstant),\n      inputs: !fn.$stateful && inputs\n    });\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var left = this.ternary();\n    var right;\n    var token;\n    if ((token = this.expect('='))) {\n      if (!left.assign) {\n        this.throwError('implies assignment but [' +\n            this.text.substring(0, token.index) + '] can not be assigned to', token);\n      }\n      right = this.ternary();\n      return extend(function $parseAssignment(scope, locals) {\n        return left.assign(scope, right(scope, locals), locals);\n      }, {\n        inputs: [left, right]\n      });\n    }\n    return left;\n  },\n\n  ternary: function() {\n    var left = this.logicalOR();\n    var middle;\n    var token;\n    if ((token = this.expect('?'))) {\n      middle = this.assignment();\n      if (this.consume(':')) {\n        var right = this.assignment();\n\n        return extend(function $parseTernary(self, locals) {\n          return left(self, locals) ? middle(self, locals) : right(self, locals);\n        }, {\n          constant: left.constant && middle.constant && right.constant\n        });\n      }\n    }\n\n    return left;\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    var token;\n    while ((token = this.expect('||'))) {\n      left = this.binaryFn(left, token.text, this.logicalAND(), true);\n    }\n    return left;\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    var token;\n    if ((token = this.expect('&&'))) {\n      left = this.binaryFn(left, token.text, this.logicalAND(), true);\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    if ((token = this.expect('==','!=','===','!=='))) {\n      left = this.binaryFn(left, token.text, this.equality());\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    if ((token = this.expect('<', '>', '<=', '>='))) {\n      left = this.binaryFn(left, token.text, this.relational());\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = this.binaryFn(left, token.text, this.multiplicative());\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = this.binaryFn(left, token.text, this.unary());\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if (this.expect('+')) {\n      return this.primary();\n    } else if ((token = this.expect('-'))) {\n      return this.binaryFn(Parser.ZERO, token.text, this.unary());\n    } else if ((token = this.expect('!'))) {\n      return this.unaryFn(token.text, this.unary());\n    } else {\n      return this.primary();\n    }\n  },\n\n  fieldAccess: function(object) {\n    var expression = this.text;\n    var field = this.consume().text;\n    var getter = getterFn(field, this.options, expression);\n\n    return extend(function $parseFieldAccess(scope, locals, self) {\n      return getter(self || object(scope, locals));\n    }, {\n      assign: function(scope, value, locals) {\n        var o = object(scope, locals);\n        if (!o) object.assign(scope, o = {});\n        return setter(o, field, value, expression);\n      }\n    });\n  },\n\n  objectIndex: function(obj) {\n    var expression = this.text;\n\n    var indexFn = this.expression();\n    this.consume(']');\n\n    return extend(function $parseObjectIndex(self, locals) {\n      var o = obj(self, locals),\n          i = indexFn(self, locals),\n          v;\n\n      ensureSafeMemberName(i, expression);\n      if (!o) return undefined;\n      v = ensureSafeObject(o[i], expression);\n      return v;\n    }, {\n      assign: function(self, value, locals) {\n        var key = ensureSafeMemberName(indexFn(self, locals), expression);\n        // prevent overwriting of Function.constructor which would break ensureSafeObject check\n        var o = ensureSafeObject(obj(self, locals), expression);\n        if (!o) obj.assign(self, o = {});\n        return o[key] = value;\n      }\n    });\n  },\n\n  functionCall: function(fnGetter, contextGetter) {\n    var argsFn = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        argsFn.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(')');\n\n    var expressionText = this.text;\n    // we can safely reuse the array across invocations\n    var args = argsFn.length ? [] : null;\n\n    return function $parseFunctionCall(scope, locals) {\n      var context = contextGetter ? contextGetter(scope, locals) : scope;\n      var fn = fnGetter(scope, locals, context) || noop;\n\n      if (args) {\n        var i = argsFn.length;\n        while (i--) {\n          args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText);\n        }\n      }\n\n      ensureSafeObject(context, expressionText);\n      ensureSafeFunction(fn, expressionText);\n\n      // IE doesn't have apply for some native functions\n      var v = fn.apply\n            ? fn.apply(context, args)\n            : fn(args[0], args[1], args[2], args[3], args[4]);\n\n      return ensureSafeObject(v, expressionText);\n      };\n  },\n\n  // This is used with json array declaration\n  arrayDeclaration: function() {\n    var elementFns = [];\n    if (this.peekToken().text !== ']') {\n      do {\n        if (this.peek(']')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        elementFns.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return extend(function $parseArrayLiteral(self, locals) {\n      var array = [];\n      for (var i = 0, ii = elementFns.length; i < ii; i++) {\n        array.push(elementFns[i](self, locals));\n      }\n      return array;\n    }, {\n      literal: true,\n      constant: elementFns.every(isConstant),\n      inputs: elementFns\n    });\n  },\n\n  object: function() {\n    var keys = [], valueFns = [];\n    if (this.peekToken().text !== '}') {\n      do {\n        if (this.peek('}')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var token = this.consume();\n        if (token.constant) {\n          keys.push(token.value);\n        } else if (token.identifier) {\n          keys.push(token.text);\n        } else {\n          this.throwError(\"invalid key\", token);\n        }\n        this.consume(':');\n        valueFns.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return extend(function $parseObjectLiteral(self, locals) {\n      var object = {};\n      for (var i = 0, ii = valueFns.length; i < ii; i++) {\n        object[keys[i]] = valueFns[i](self, locals);\n      }\n      return object;\n    }, {\n      literal: true,\n      constant: valueFns.every(isConstant),\n      inputs: valueFns\n    });\n  }\n};\n\n\n//////////////////////////////////////////////////\n// Parser helper functions\n//////////////////////////////////////////////////\n\nfunction setter(obj, path, setValue, fullExp) {\n  ensureSafeObject(obj, fullExp);\n\n  var element = path.split('.'), key;\n  for (var i = 0; element.length > 1; i++) {\n    key = ensureSafeMemberName(element.shift(), fullExp);\n    var propertyObj = ensureSafeObject(obj[key], fullExp);\n    if (!propertyObj) {\n      propertyObj = {};\n      obj[key] = propertyObj;\n    }\n    obj = propertyObj;\n  }\n  key = ensureSafeMemberName(element.shift(), fullExp);\n  ensureSafeObject(obj[key], fullExp);\n  obj[key] = setValue;\n  return setValue;\n}\n\nvar getterFnCacheDefault = createMap();\nvar getterFnCacheExpensive = createMap();\n\nfunction isPossiblyDangerousMemberName(name) {\n  return name == 'constructor';\n}\n\n/**\n * Implementation of the \"Black Hole\" variant from:\n * - http://jsperf.com/angularjs-parse-getter/4\n * - http://jsperf.com/path-evaluation-simplified/7\n */\nfunction cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n  ensureSafeMemberName(key2, fullExp);\n  ensureSafeMemberName(key3, fullExp);\n  ensureSafeMemberName(key4, fullExp);\n  var eso = function(o) {\n    return ensureSafeObject(o, fullExp);\n  };\n  var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity;\n  var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity;\n  var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity;\n  var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity;\n  var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity;\n\n  return function cspSafeGetter(scope, locals) {\n    var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;\n\n    if (pathVal == null) return pathVal;\n    pathVal = eso0(pathVal[key0]);\n\n    if (!key1) return pathVal;\n    if (pathVal == null) return undefined;\n    pathVal = eso1(pathVal[key1]);\n\n    if (!key2) return pathVal;\n    if (pathVal == null) return undefined;\n    pathVal = eso2(pathVal[key2]);\n\n    if (!key3) return pathVal;\n    if (pathVal == null) return undefined;\n    pathVal = eso3(pathVal[key3]);\n\n    if (!key4) return pathVal;\n    if (pathVal == null) return undefined;\n    pathVal = eso4(pathVal[key4]);\n\n    return pathVal;\n  };\n}\n\nfunction getterFnWithEnsureSafeObject(fn, fullExpression) {\n  return function(s, l) {\n    return fn(s, l, ensureSafeObject, fullExpression);\n  };\n}\n\nfunction getterFn(path, options, fullExp) {\n  var expensiveChecks = options.expensiveChecks;\n  var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault);\n  var fn = getterFnCache[path];\n  if (fn) return fn;\n\n\n  var pathKeys = path.split('.'),\n      pathKeysLength = pathKeys.length;\n\n  // http://jsperf.com/angularjs-parse-getter/6\n  if (options.csp) {\n    if (pathKeysLength < 6) {\n      fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks);\n    } else {\n      fn = function cspSafeGetter(scope, locals) {\n        var i = 0, val;\n        do {\n          val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],\n                                pathKeys[i++], fullExp, expensiveChecks)(scope, locals);\n\n          locals = undefined; // clear after first iteration\n          scope = val;\n        } while (i < pathKeysLength);\n        return val;\n      };\n    }\n  } else {\n    var code = '';\n    if (expensiveChecks) {\n      code += 's = eso(s, fe);\\nl = eso(l, fe);\\n';\n    }\n    var needsEnsureSafeObject = expensiveChecks;\n    forEach(pathKeys, function(key, index) {\n      ensureSafeMemberName(key, fullExp);\n      var lookupJs = (index\n                      // we simply dereference 's' on any .dot notation\n                      ? 's'\n                      // but if we are first then we check locals first, and if so read it first\n                      : '((l&&l.hasOwnProperty(\"' + key + '\"))?l:s)') + '.' + key;\n      if (expensiveChecks || isPossiblyDangerousMemberName(key)) {\n        lookupJs = 'eso(' + lookupJs + ', fe)';\n        needsEnsureSafeObject = true;\n      }\n      code += 'if(s == null) return undefined;\\n' +\n              's=' + lookupJs + ';\\n';\n    });\n    code += 'return s;';\n\n    /* jshint -W054 */\n    var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject\n    /* jshint +W054 */\n    evaledFnGetter.toString = valueFn(code);\n    if (needsEnsureSafeObject) {\n      evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp);\n    }\n    fn = evaledFnGetter;\n  }\n\n  fn.sharedGetter = true;\n  fn.assign = function(self, value) {\n    return setter(self, path, value, path);\n  };\n  getterFnCache[path] = fn;\n  return fn;\n}\n\nvar objectValueOf = Object.prototype.valueOf;\n\nfunction getValueOf(value) {\n  return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $parse\n * @kind function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * ```js\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * ```\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc provider\n * @name $parseProvider\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cacheDefault = createMap();\n  var cacheExpensive = createMap();\n\n\n\n  this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {\n    var $parseOptions = {\n          csp: $sniffer.csp,\n          expensiveChecks: false\n        },\n        $parseOptionsExpensive = {\n          csp: $sniffer.csp,\n          expensiveChecks: true\n        };\n\n    function wrapSharedExpression(exp) {\n      var wrapped = exp;\n\n      if (exp.sharedGetter) {\n        wrapped = function $parseWrapper(self, locals) {\n          return exp(self, locals);\n        };\n        wrapped.literal = exp.literal;\n        wrapped.constant = exp.constant;\n        wrapped.assign = exp.assign;\n      }\n\n      return wrapped;\n    }\n\n    return function $parse(exp, interceptorFn, expensiveChecks) {\n      var parsedExpression, oneTime, cacheKey;\n\n      switch (typeof exp) {\n        case 'string':\n          cacheKey = exp = exp.trim();\n\n          var cache = (expensiveChecks ? cacheExpensive : cacheDefault);\n          parsedExpression = cache[cacheKey];\n\n          if (!parsedExpression) {\n            if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {\n              oneTime = true;\n              exp = exp.substring(2);\n            }\n\n            var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;\n            var lexer = new Lexer(parseOptions);\n            var parser = new Parser(lexer, $filter, parseOptions);\n            parsedExpression = parser.parse(exp);\n\n            if (parsedExpression.constant) {\n              parsedExpression.$$watchDelegate = constantWatchDelegate;\n            } else if (oneTime) {\n              //oneTime is not part of the exp passed to the Parser so we may have to\n              //wrap the parsedExpression before adding a $$watchDelegate\n              parsedExpression = wrapSharedExpression(parsedExpression);\n              parsedExpression.$$watchDelegate = parsedExpression.literal ?\n                oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;\n            } else if (parsedExpression.inputs) {\n              parsedExpression.$$watchDelegate = inputsWatchDelegate;\n            }\n\n            cache[cacheKey] = parsedExpression;\n          }\n          return addInterceptor(parsedExpression, interceptorFn);\n\n        case 'function':\n          return addInterceptor(exp, interceptorFn);\n\n        default:\n          return addInterceptor(noop, interceptorFn);\n      }\n    };\n\n    function collectExpressionInputs(inputs, list) {\n      for (var i = 0, ii = inputs.length; i < ii; i++) {\n        var input = inputs[i];\n        if (!input.constant) {\n          if (input.inputs) {\n            collectExpressionInputs(input.inputs, list);\n          } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better?\n            list.push(input);\n          }\n        }\n      }\n\n      return list;\n    }\n\n    function expressionInputDirtyCheck(newValue, oldValueOfValue) {\n\n      if (newValue == null || oldValueOfValue == null) { // null/undefined\n        return newValue === oldValueOfValue;\n      }\n\n      if (typeof newValue === 'object') {\n\n        // attempt to convert the value to a primitive type\n        // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can\n        //             be cheaply dirty-checked\n        newValue = getValueOf(newValue);\n\n        if (typeof newValue === 'object') {\n          // objects/arrays are not supported - deep-watching them would be too expensive\n          return false;\n        }\n\n        // fall-through to the primitive equality check\n      }\n\n      //Primitive or NaN\n      return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);\n    }\n\n    function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var inputExpressions = parsedExpression.$$inputs ||\n                    (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, []));\n\n      var lastResult;\n\n      if (inputExpressions.length === 1) {\n        var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails\n        inputExpressions = inputExpressions[0];\n        return scope.$watch(function expressionInputWatch(scope) {\n          var newInputValue = inputExpressions(scope);\n          if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {\n            lastResult = parsedExpression(scope);\n            oldInputValue = newInputValue && getValueOf(newInputValue);\n          }\n          return lastResult;\n        }, listener, objectEquality);\n      }\n\n      var oldInputValueOfValues = [];\n      for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n        oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails\n      }\n\n      return scope.$watch(function expressionInputsWatch(scope) {\n        var changed = false;\n\n        for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n          var newInputValue = inputExpressions[i](scope);\n          if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {\n            oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);\n          }\n        }\n\n        if (changed) {\n          lastResult = parsedExpression(scope);\n        }\n\n        return lastResult;\n      }, listener, objectEquality);\n    }\n\n    function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch, lastValue;\n      return unwatch = scope.$watch(function oneTimeWatch(scope) {\n        return parsedExpression(scope);\n      }, function oneTimeListener(value, old, scope) {\n        lastValue = value;\n        if (isFunction(listener)) {\n          listener.apply(this, arguments);\n        }\n        if (isDefined(value)) {\n          scope.$$postDigest(function() {\n            if (isDefined(lastValue)) {\n              unwatch();\n            }\n          });\n        }\n      }, objectEquality);\n    }\n\n    function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch, lastValue;\n      return unwatch = scope.$watch(function oneTimeWatch(scope) {\n        return parsedExpression(scope);\n      }, function oneTimeListener(value, old, scope) {\n        lastValue = value;\n        if (isFunction(listener)) {\n          listener.call(this, value, old, scope);\n        }\n        if (isAllDefined(value)) {\n          scope.$$postDigest(function() {\n            if (isAllDefined(lastValue)) unwatch();\n          });\n        }\n      }, objectEquality);\n\n      function isAllDefined(value) {\n        var allDefined = true;\n        forEach(value, function(val) {\n          if (!isDefined(val)) allDefined = false;\n        });\n        return allDefined;\n      }\n    }\n\n    function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch;\n      return unwatch = scope.$watch(function constantWatch(scope) {\n        return parsedExpression(scope);\n      }, function constantListener(value, old, scope) {\n        if (isFunction(listener)) {\n          listener.apply(this, arguments);\n        }\n        unwatch();\n      }, objectEquality);\n    }\n\n    function addInterceptor(parsedExpression, interceptorFn) {\n      if (!interceptorFn) return parsedExpression;\n      var watchDelegate = parsedExpression.$$watchDelegate;\n\n      var regularWatch =\n          watchDelegate !== oneTimeLiteralWatchDelegate &&\n          watchDelegate !== oneTimeWatchDelegate;\n\n      var fn = regularWatch ? function regularInterceptedExpression(scope, locals) {\n        var value = parsedExpression(scope, locals);\n        return interceptorFn(value, scope, locals);\n      } : function oneTimeInterceptedExpression(scope, locals) {\n        var value = parsedExpression(scope, locals);\n        var result = interceptorFn(value, scope, locals);\n        // we only return the interceptor's result if the\n        // initial value is defined (for bind-once)\n        return isDefined(value) ? result : value;\n      };\n\n      // Propagate $$watchDelegates other then inputsWatchDelegate\n      if (parsedExpression.$$watchDelegate &&\n          parsedExpression.$$watchDelegate !== inputsWatchDelegate) {\n        fn.$$watchDelegate = parsedExpression.$$watchDelegate;\n      } else if (!interceptorFn.$stateful) {\n        // If there is an interceptor, but no watchDelegate then treat the interceptor like\n        // we treat filters - it is assumed to be a pure function unless flagged with $stateful\n        fn.$$watchDelegate = inputsWatchDelegate;\n        fn.inputs = [parsedExpression];\n      }\n\n      return fn;\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $q\n * @requires $rootScope\n *\n * @description\n * A service that helps you run functions asynchronously, and use their return values (or exceptions)\n * when they are done processing.\n *\n * This is an implementation of promises/deferred objects inspired by\n * [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred\n * implementations, and the other which resembles ES6 promises to some degree.\n *\n * # $q constructor\n *\n * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`\n * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,\n * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n *\n * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are\n * available yet.\n *\n * It can be used like so:\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     // perform some asynchronous operation, resolve or reject the promise when appropriate.\n *     return $q(function(resolve, reject) {\n *       setTimeout(function() {\n *         if (okToGreet(name)) {\n *           resolve('Hello, ' + name + '!');\n *         } else {\n *           reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       }, 1000);\n *     });\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   });\n * ```\n *\n * Note: progress/notify callbacks are not currently supported via the ES6-style interface.\n *\n * However, the more traditional CommonJS-style usage is still available, and documented below.\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       deferred.notify('About to greet ' + name + '.');\n *\n *       if (okToGreet(name)) {\n *         deferred.resolve('Hello, ' + name + '!');\n *       } else {\n *         deferred.reject('Greeting ' + name + ' is not allowed.');\n *       }\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * ```\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback`. It also notifies via the return value of the\n *   `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback\n *   method.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * ```js\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * ```\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are two main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n *  # Testing\n *\n *  ```js\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    }));\n *  ```\n *\n * @param {function(function, function)} resolver Function which is responsible for resolving or\n *   rejecting the newly created promise. The first parameter is a function which resolves the\n *   promise, the second parameter is a function which rejects the promise.\n *\n * @returns {Promise} The newly created promise.\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\nfunction $$QProvider() {\n  this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $browser.defer(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n  var $qMinErr = minErr('$q', TypeError);\n  function callOnce(self, resolveFn, rejectFn) {\n    var called = false;\n    function wrap(fn) {\n      return function(value) {\n        if (called) return;\n        called = true;\n        fn.call(self, value);\n      };\n    }\n\n    return [wrap(resolveFn), wrap(rejectFn)];\n  }\n\n  /**\n   * @ngdoc method\n   * @name ng.$q#defer\n   * @kind function\n   *\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    return new Deferred();\n  };\n\n  function Promise() {\n    this.$$state = { status: 0 };\n  }\n\n  Promise.prototype = {\n    then: function(onFulfilled, onRejected, progressBack) {\n      var result = new Deferred();\n\n      this.$$state.pending = this.$$state.pending || [];\n      this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);\n      if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);\n\n      return result.promise;\n    },\n\n    \"catch\": function(callback) {\n      return this.then(null, callback);\n    },\n\n    \"finally\": function(callback, progressBack) {\n      return this.then(function(value) {\n        return handleCallback(value, true, callback);\n      }, function(error) {\n        return handleCallback(error, false, callback);\n      }, progressBack);\n    }\n  };\n\n  //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native\n  function simpleBind(context, fn) {\n    return function(value) {\n      fn.call(context, value);\n    };\n  }\n\n  function processQueue(state) {\n    var fn, promise, pending;\n\n    pending = state.pending;\n    state.processScheduled = false;\n    state.pending = undefined;\n    for (var i = 0, ii = pending.length; i < ii; ++i) {\n      promise = pending[i][0];\n      fn = pending[i][state.status];\n      try {\n        if (isFunction(fn)) {\n          promise.resolve(fn(state.value));\n        } else if (state.status === 1) {\n          promise.resolve(state.value);\n        } else {\n          promise.reject(state.value);\n        }\n      } catch (e) {\n        promise.reject(e);\n        exceptionHandler(e);\n      }\n    }\n  }\n\n  function scheduleProcessQueue(state) {\n    if (state.processScheduled || !state.pending) return;\n    state.processScheduled = true;\n    nextTick(function() { processQueue(state); });\n  }\n\n  function Deferred() {\n    this.promise = new Promise();\n    //Necessary to support unbound execution :/\n    this.resolve = simpleBind(this, this.resolve);\n    this.reject = simpleBind(this, this.reject);\n    this.notify = simpleBind(this, this.notify);\n  }\n\n  Deferred.prototype = {\n    resolve: function(val) {\n      if (this.promise.$$state.status) return;\n      if (val === this.promise) {\n        this.$$reject($qMinErr(\n          'qcycle',\n          \"Expected promise to be resolved with value other than itself '{0}'\",\n          val));\n      }\n      else {\n        this.$$resolve(val);\n      }\n\n    },\n\n    $$resolve: function(val) {\n      var then, fns;\n\n      fns = callOnce(this, this.$$resolve, this.$$reject);\n      try {\n        if ((isObject(val) || isFunction(val))) then = val && val.then;\n        if (isFunction(then)) {\n          this.promise.$$state.status = -1;\n          then.call(val, fns[0], fns[1], this.notify);\n        } else {\n          this.promise.$$state.value = val;\n          this.promise.$$state.status = 1;\n          scheduleProcessQueue(this.promise.$$state);\n        }\n      } catch (e) {\n        fns[1](e);\n        exceptionHandler(e);\n      }\n    },\n\n    reject: function(reason) {\n      if (this.promise.$$state.status) return;\n      this.$$reject(reason);\n    },\n\n    $$reject: function(reason) {\n      this.promise.$$state.value = reason;\n      this.promise.$$state.status = 2;\n      scheduleProcessQueue(this.promise.$$state);\n    },\n\n    notify: function(progress) {\n      var callbacks = this.promise.$$state.pending;\n\n      if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {\n        nextTick(function() {\n          var callback, result;\n          for (var i = 0, ii = callbacks.length; i < ii; i++) {\n            result = callbacks[i][0];\n            callback = callbacks[i][3];\n            try {\n              result.notify(isFunction(callback) ? callback(progress) : progress);\n            } catch (e) {\n              exceptionHandler(e);\n            }\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $q#reject\n   * @kind function\n   *\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * ```js\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * ```\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    var result = new Deferred();\n    result.reject(reason);\n    return result.promise;\n  };\n\n  var makePromise = function makePromise(value, resolved) {\n    var result = new Deferred();\n    if (resolved) {\n      result.resolve(value);\n    } else {\n      result.reject(value);\n    }\n    return result.promise;\n  };\n\n  var handleCallback = function handleCallback(value, isResolved, callback) {\n    var callbackOutput = null;\n    try {\n      if (isFunction(callback)) callbackOutput = callback();\n    } catch (e) {\n      return makePromise(e, false);\n    }\n    if (isPromiseLike(callbackOutput)) {\n      return callbackOutput.then(function() {\n        return makePromise(value, isResolved);\n      }, function(error) {\n        return makePromise(error, false);\n      });\n    } else {\n      return makePromise(value, isResolved);\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $q#when\n   * @kind function\n   *\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n\n\n  var when = function(value, callback, errback, progressBack) {\n    var result = new Deferred();\n    result.resolve(value);\n    return result.promise.then(callback, errback, progressBack);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $q#all\n   * @kind function\n   *\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n\n  function all(promises) {\n    var deferred = new Deferred(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      when(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  var $Q = function Q(resolver) {\n    if (!isFunction(resolver)) {\n      throw $qMinErr('norslvr', \"Expected resolverFn, got '{0}'\", resolver);\n    }\n\n    if (!(this instanceof Q)) {\n      // More useful when $Q is the Promise itself.\n      return new Q(resolver);\n    }\n\n    var deferred = new Deferred();\n\n    function resolveFn(value) {\n      deferred.resolve(value);\n    }\n\n    function rejectFn(reason) {\n      deferred.reject(reason);\n    }\n\n    resolver(resolveFn, rejectFn);\n\n    return deferred.promise;\n  };\n\n  $Q.defer = defer;\n  $Q.reject = reject;\n  $Q.when = when;\n  $Q.all = all;\n\n  return $Q;\n}\n\nfunction $$RAFProvider() { //rAF\n  this.$get = ['$window', '$timeout', function($window, $timeout) {\n    var requestAnimationFrame = $window.requestAnimationFrame ||\n                                $window.webkitRequestAnimationFrame ||\n                                $window.mozRequestAnimationFrame;\n\n    var cancelAnimationFrame = $window.cancelAnimationFrame ||\n                               $window.webkitCancelAnimationFrame ||\n                               $window.mozCancelAnimationFrame ||\n                               $window.webkitCancelRequestAnimationFrame;\n\n    var rafSupported = !!requestAnimationFrame;\n    var raf = rafSupported\n      ? function(fn) {\n          var id = requestAnimationFrame(fn);\n          return function() {\n            cancelAnimationFrame(id);\n          };\n        }\n      : function(fn) {\n          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n          return function() {\n            $timeout.cancel(timer);\n          };\n        };\n\n    raf.supported = rafSupported;\n\n    return raf;\n  }];\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - this means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (unshift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in middle are expensive so we use linked list\n *\n * There are few watches then a lot of observers. This is why you don't want the observer to be\n * implemented in the same way as watch. Watch requires return of initialization function which\n * are expensive to construct.\n */\n\n\n/**\n * @ngdoc provider\n * @name $rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc method\n * @name $rootScopeProvider#digestTtl\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc service\n * @name $rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide an event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider() {\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n  var lastDirtyWatch = null;\n  var applyAsyncId = null;\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',\n      function($injector, $exceptionHandler, $parse, $browser) {\n\n    /**\n     * @ngdoc type\n     * @name $rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link auto.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.)\n     *\n     * Here is a simple scope snippet to show how you can interact with the scope.\n     * ```html\n     * <file src=\"./test/ng/rootScopeSpec.js\" tag=\"docs1\" />\n     * ```\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * ```js\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         child.name = \"World\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * ```\n     *\n     * When interacting with `Scope` in tests, additional helper methods are available on the\n     * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional\n     * details.\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this.$root = this;\n      this.$$destroyed = false;\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$isolateBindings = null;\n    }\n\n    /**\n     * @ngdoc property\n     * @name $rootScope.Scope#$id\n     *\n     * @description\n     * Unique scope ID (monotonically increasing) useful for debugging.\n     */\n\n     /**\n      * @ngdoc property\n      * @name $rootScope.Scope#$parent\n      *\n      * @description\n      * Reference to the parent scope.\n      */\n\n      /**\n       * @ngdoc property\n       * @name $rootScope.Scope#$root\n       *\n       * @description\n       * Reference to the root scope.\n       */\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$new\n       * @kind function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.\n       * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`\n       *                              of the newly created scope. Defaults to `this` scope if not provided.\n       *                              This is used when creating a transclude scope to correctly place it\n       *                              in the scope hierarchy while maintaining the correct prototypical\n       *                              inheritance.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate, parent) {\n        var child;\n\n        parent = parent || this;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n        } else {\n          // Only create a child scope class if somebody asks for one,\n          // but cache it to allow the VM to optimize lookups.\n          if (!this.$$ChildScope) {\n            this.$$ChildScope = function ChildScope() {\n              this.$$watchers = this.$$nextSibling =\n                  this.$$childHead = this.$$childTail = null;\n              this.$$listeners = {};\n              this.$$listenerCount = {};\n              this.$id = nextUid();\n              this.$$ChildScope = null;\n            };\n            this.$$ChildScope.prototype = this;\n          }\n          child = new this.$$ChildScope();\n        }\n        child.$parent = parent;\n        child.$$prevSibling = parent.$$childTail;\n        if (parent.$$childHead) {\n          parent.$$childTail.$$nextSibling = child;\n          parent.$$childTail = child;\n        } else {\n          parent.$$childHead = parent.$$childTail = child;\n        }\n\n        // When the new scope is not isolated or we inherit from `this`, and\n        // the parent scope is destroyed, the property `$$destroyed` is inherited\n        // prototypically. In all other cases, this property needs to be set\n        // when the parent scope is destroyed.\n        // The listener needs to be added after the parent is set\n        if (isolate || parent != this) child.$on('$destroy', destroyChild);\n\n        return child;\n\n        function destroyChild() {\n          child.$$destroyed = true;\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watch\n       * @kind function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (Since\n       *   {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the\n       *   `watchExpression` can execute multiple times per\n       *   {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). Inequality is determined according to reference inequality,\n       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)\n       *    via the `!==` Javascript operator, unless `objectEquality == true`\n       *   (see next point)\n       * - When `objectEquality == true`, inequality of the `watchExpression` is determined\n       *   according to the {@link angular.equals} function. To save the value of the object for\n       *   later comparison, the {@link angular.copy} function is used. This therefore means that\n       *   watching complex objects will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`\n       * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a\n       * change is detected, be prepared for multiple calls to your listener.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       *\n       *\n       * # Example\n       * ```js\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n\n\n\n           // Using a function as a watchExpression\n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This function returns the value being watched. It is called for each turn of the $digest loop\n             function() { return food; },\n             // This is the change listener, called when the value returned from the above function changes\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed count will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);\n\n       * ```\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value\n       *    of `watchExpression` changes.\n       *\n       *    - `newVal` contains the current value of the `watchExpression`\n       *    - `oldVal` contains the previous value of the `watchExpression`\n       *    - `scope` refers to the current scope\n       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of\n       *     comparing for reference equality.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality) {\n        var get = $parse(watchExp);\n\n        if (get.$$watchDelegate) {\n          return get.$$watchDelegate(this, listener, objectEquality, get);\n        }\n        var scope = this,\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: watchExp,\n              eq: !!objectEquality\n            };\n\n        lastDirtyWatch = null;\n\n        if (!isFunction(listener)) {\n          watcher.fn = noop;\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n\n        return function deregisterWatch() {\n          arrayRemove(array, watcher);\n          lastDirtyWatch = null;\n        };\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchGroup\n       * @kind function\n       *\n       * @description\n       * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.\n       * If any one expression in the collection changes the `listener` is executed.\n       *\n       * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every\n       *   call to $digest() to see if any items changes.\n       * - The `listener` is called whenever any expression in the `watchExpressions` array changes.\n       *\n       * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually\n       * watched using {@link ng.$rootScope.Scope#$watch $watch()}\n       *\n       * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any\n       *    expression in `watchExpressions` changes\n       *    The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching\n       *    those of `watchExpression`\n       *    and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching\n       *    those of `watchExpression`\n       *    The `scope` refers to the current scope.\n       * @returns {function()} Returns a de-registration function for all listeners.\n       */\n      $watchGroup: function(watchExpressions, listener) {\n        var oldValues = new Array(watchExpressions.length);\n        var newValues = new Array(watchExpressions.length);\n        var deregisterFns = [];\n        var self = this;\n        var changeReactionScheduled = false;\n        var firstRun = true;\n\n        if (!watchExpressions.length) {\n          // No expressions means we call the listener ASAP\n          var shouldCall = true;\n          self.$evalAsync(function() {\n            if (shouldCall) listener(newValues, newValues, self);\n          });\n          return function deregisterWatchGroup() {\n            shouldCall = false;\n          };\n        }\n\n        if (watchExpressions.length === 1) {\n          // Special case size of one\n          return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {\n            newValues[0] = value;\n            oldValues[0] = oldValue;\n            listener(newValues, (value === oldValue) ? newValues : oldValues, scope);\n          });\n        }\n\n        forEach(watchExpressions, function(expr, i) {\n          var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {\n            newValues[i] = value;\n            oldValues[i] = oldValue;\n            if (!changeReactionScheduled) {\n              changeReactionScheduled = true;\n              self.$evalAsync(watchGroupAction);\n            }\n          });\n          deregisterFns.push(unwatchFn);\n        });\n\n        function watchGroupAction() {\n          changeReactionScheduled = false;\n\n          if (firstRun) {\n            firstRun = false;\n            listener(newValues, newValues, self);\n          } else {\n            listener(newValues, oldValues, self);\n          }\n        }\n\n        return function deregisterWatchGroup() {\n          while (deregisterFns.length) {\n            deregisterFns.shift()();\n          }\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchCollection\n       * @kind function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * ```js\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * ```\n       *\n       *\n       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n       *    when a change is detected.\n       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    - The `oldCollection` object is a copy of the former collection data.\n       *      Due to performance considerations, the`oldCollection` value is computed only if the\n       *      `listener` function declares two or more arguments.\n       *    - The `scope` argument refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        $watchCollectionInterceptor.$stateful = true;\n\n        var self = this;\n        // the current value, updated on each dirty-check run\n        var newValue;\n        // a shallow copy of the newValue from the last dirty-check run,\n        // updated to match newValue during dirty-check run\n        var oldValue;\n        // a shallow copy of the newValue from when the last change happened\n        var veryOldValue;\n        // only track veryOldValue if the listener is asking for it\n        var trackVeryOldValue = (listener.length > 1);\n        var changeDetected = 0;\n        var changeDetector = $parse(obj, $watchCollectionInterceptor);\n        var internalArray = [];\n        var internalObject = {};\n        var initRun = true;\n        var oldLength = 0;\n\n        function $watchCollectionInterceptor(_value) {\n          newValue = _value;\n          var newLength, key, bothNaN, newItem, oldItem;\n\n          // If the new value is undefined, then return undefined as the watch may be a one-time watch\n          if (isUndefined(newValue)) return;\n\n          if (!isObject(newValue)) { // if primitive\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              oldItem = oldValue[i];\n              newItem = newValue[i];\n\n              bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n              if (!bothNaN && (oldItem !== newItem)) {\n                changeDetected++;\n                oldValue[i] = newItem;\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (newValue.hasOwnProperty(key)) {\n                newLength++;\n                newItem = newValue[key];\n                oldItem = oldValue[key];\n\n                if (key in oldValue) {\n                  bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n                  if (!bothNaN && (oldItem !== newItem)) {\n                    changeDetected++;\n                    oldValue[key] = newItem;\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newItem;\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for (key in oldValue) {\n                if (!newValue.hasOwnProperty(key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          if (initRun) {\n            initRun = false;\n            listener(newValue, newValue, self);\n          } else {\n            listener(newValue, veryOldValue, self);\n          }\n\n          // make a copy for the next time a collection is changed\n          if (trackVeryOldValue) {\n            if (!isObject(newValue)) {\n              //primitive\n              veryOldValue = newValue;\n            } else if (isArrayLike(newValue)) {\n              veryOldValue = new Array(newValue.length);\n              for (var i = 0; i < newValue.length; i++) {\n                veryOldValue[i] = newValue[i];\n              }\n            } else { // if object\n              veryOldValue = {};\n              for (var key in newValue) {\n                if (hasOwnProperty.call(newValue, key)) {\n                  veryOldValue[key] = newValue[key];\n                }\n              }\n            }\n          }\n        }\n\n        return this.$watch(changeDetector, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$digest\n       * @kind function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * ```js\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n       * ```\n       *\n       */\n      $digest: function() {\n        var watch, value, last,\n            watchers,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, logMsg, asyncTask;\n\n        beginPhase('$digest');\n        // Check for changes to browser url that happened in sync before the call to $digest\n        $browser.$$checkUrlChange();\n\n        if (this === $rootScope && applyAsyncId !== null) {\n          // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then\n          // cancel the scheduled $apply and flush the queue of expressions to be evaluated.\n          $browser.defer.cancel(applyAsyncId);\n          flushApplyAsync();\n        }\n\n        lastDirtyWatch = null;\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          while (asyncQueue.length) {\n            try {\n              asyncTask = asyncQueue.shift();\n              asyncTask.scope.$eval(asyncTask.expression);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n            lastDirtyWatch = null;\n          }\n\n          traverseScopesLoop:\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch) {\n                    if ((value = watch.get(current)) !== (last = watch.last) &&\n                        !(watch.eq\n                            ? equals(value, last)\n                            : (typeof value === 'number' && typeof last === 'number'\n                               && isNaN(value) && isNaN(last)))) {\n                      dirty = true;\n                      lastDirtyWatch = watch;\n                      watch.last = watch.eq ? copy(value, null) : value;\n                      watch.fn(value, ((last === initWatchVal) ? value : last), current);\n                      if (ttl < 5) {\n                        logIdx = 4 - ttl;\n                        if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                        watchLog[logIdx].push({\n                          msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,\n                          newVal: value,\n                          oldVal: last\n                        });\n                      }\n                    } else if (watch === lastDirtyWatch) {\n                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n                      // have already been tested.\n                      dirty = false;\n                      break traverseScopesLoop;\n                    }\n                  }\n                } catch (e) {\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = (current.$$childHead ||\n                (current !== target && current.$$nextSibling)))) {\n              while (current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          // `break traverseScopesLoop;` takes us to here\n\n          if ((dirty || asyncQueue.length) && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, watchLog);\n          }\n\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        while (postDigestQueue.length) {\n          try {\n            postDigestQueue.shift()();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name $rootScope.Scope#$destroy\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$destroy\n       * @kind function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // we can't destroy the root scope or a scope that has been already destroyed\n        if (this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n        if (this === $rootScope) return;\n\n        for (var eventName in this.$$listenerCount) {\n          decrementListenerCount(this, this.$$listenerCount[eventName], eventName);\n        }\n\n        // sever all the references to parent scopes (after this cleanup, the current scope should\n        // not be retained by any of our references and should be eligible for garbage collection)\n        if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n        // Disable listeners, watchers and apply/digest methods\n        this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;\n        this.$on = this.$watch = this.$watchGroup = function() { return noop; };\n        this.$$listeners = {};\n\n        // All of the code below is bogus code that works around V8's memory leak via optimized code\n        // and inline caches.\n        //\n        // see:\n        // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n        // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n        // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\n        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =\n            this.$$childTail = this.$root = this.$$watchers = null;\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$eval\n       * @kind function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * ```js\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * ```\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$evalAsync\n       * @kind function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       */\n      $evalAsync: function(expr) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !asyncQueue.length) {\n          $browser.defer(function() {\n            if (asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        asyncQueue.push({scope: this, expression: expr});\n      },\n\n      $$postDigest: function(fn) {\n        postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$apply\n       * @kind function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * ```js\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * ```\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          return this.$eval(expr);\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          clearPhase();\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$applyAsync\n       * @kind function\n       *\n       * @description\n       * Schedule the invokation of $apply to occur at a later time. The actual time difference\n       * varies across browsers, but is typically around ~10 milliseconds.\n       *\n       * This can be used to queue up multiple expressions which need to be evaluated in the same\n       * digest.\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       */\n      $applyAsync: function(expr) {\n        var scope = this;\n        expr && applyAsyncQueue.push($applyAsyncExpression);\n        scheduleApplyAsync();\n\n        function $applyAsyncExpression() {\n          scope.$eval(expr);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$on\n       * @kind function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the\n       *     event propagates through the scope hierarchy, this property is set to null.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, ...args)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        var current = this;\n        do {\n          if (!current.$$listenerCount[name]) {\n            current.$$listenerCount[name] = 0;\n          }\n          current.$$listenerCount[name]++;\n        } while ((current = current.$parent));\n\n        var self = this;\n        return function() {\n          var indexOfListener = namedListeners.indexOf(listener);\n          if (indexOfListener !== -1) {\n            namedListeners[indexOfListener] = null;\n            decrementListenerCount(self, 1, name);\n          }\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$emit\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i = 0, length = namedListeners.length; i < length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) {\n            event.currentScope = null;\n            return event;\n          }\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        event.currentScope = null;\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$broadcast\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            };\n\n        if (!target.$$listenerCount[name]) return event;\n\n        var listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        while ((current = next)) {\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i = 0, length = listeners.length; i < length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          // (though it differs due to having the extra check for $$listenerCount)\n          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n              (current !== target && current.$$nextSibling)))) {\n            while (current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        }\n\n        event.currentScope = null;\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    //The internal queues. Expose them on the $rootScope for debugging/testing purposes.\n    var asyncQueue = $rootScope.$$asyncQueue = [];\n    var postDigestQueue = $rootScope.$$postDigestQueue = [];\n    var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n\n    function decrementListenerCount(current, count, name) {\n      do {\n        current.$$listenerCount[name] -= count;\n\n        if (current.$$listenerCount[name] === 0) {\n          delete current.$$listenerCount[name];\n        }\n      } while ((current = current.$parent));\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n\n    function flushApplyAsync() {\n      while (applyAsyncQueue.length) {\n        try {\n          applyAsyncQueue.shift()();\n        } catch (e) {\n          $exceptionHandler(e);\n        }\n      }\n      applyAsyncId = null;\n    }\n\n    function scheduleApplyAsync() {\n      if (applyAsyncId === null) {\n        applyAsyncId = $browser.defer(function() {\n          $rootScope.$apply(flushApplyAsync);\n        });\n      }\n    }\n  }];\n}\n\n/**\n * @description\n * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n */\nfunction $$SanitizeUriProvider() {\n  var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n    imgSrcSanitizationWhitelist = /^\\s*((https?|ftp|file|blob):|data:image\\/)/;\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n  this.$get = function() {\n    return function sanitizeUri(uri, isImage) {\n      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n      var normalizedVal;\n      normalizedVal = urlResolve(uri).href;\n      if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n        return 'unsafe:' + normalizedVal;\n      }\n      return uri;\n    };\n  };\n}\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name $sceDelegate\n * @kind function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc provider\n * @name $sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * ```\n *  angular.module('myApp', []).config(function($sceDelegateProvider) {\n *    $sceDelegateProvider.resourceUrlWhitelist([\n *      // Allow same origin resource loads.\n *      'self',\n *      // Allow loading from our assets domain.  Notice the difference between * and **.\n *      'http://srv*.assets.example.com/**'\n *    ]);\n *\n *    // The blacklist overrides the whitelist so the open redirect here is blocked.\n *    $sceDelegateProvider.resourceUrlBlacklist([\n *      'http://myapp.example.com/clickThru**'\n *    ]);\n *  });\n * ```\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlWhitelist\n   * @kind function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     Note: **an empty whitelist array will block all URLs**!\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function(value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlBlacklist\n   * @kind function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     The typical usage for the blacklist is to **block\n   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *     these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *     Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function(value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$injector', function($injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#trustAs\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || trustedValue === undefined || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#valueOf\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#getTrusted\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc provider\n * @name $sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name $sce\n * @kind function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE<11 in quirks mode is not supported.  In this mode, IE<11 allow\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * ```\n * <input ng-model=\"userHtml\">\n * <div ng-bind-html=\"userHtml\"></div>\n * ```\n *\n * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * ```\n * var ngBindHtmlDirective = ['$sce', function($sce) {\n *   return function(scope, element, attr) {\n *     scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *       element.html(value || '');\n *     });\n *   };\n * }];\n * ```\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n * `<div ng-bind-html=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurrences of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not\n *      not appropriate to use in for a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage.).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      if they as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your JavaScript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  e.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * <example module=\"mySceApp\" deps=\"angular-sanitize.js\">\n * <file name=\"index.html\">\n *   <div ng-controller=\"AppController as myCtrl\">\n *     <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n *     <b>User comments</b><br>\n *     By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n *     $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n *     exploit.\n *     <div class=\"well\">\n *       <div ng-repeat=\"userComment in myCtrl.userComments\">\n *         <b>{{userComment.name}}</b>:\n *         <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n *         <br>\n *       </div>\n *     </div>\n *   </div>\n * </file>\n *\n * <file name=\"script.js\">\n *   angular.module('mySceApp', ['ngSanitize'])\n *     .controller('AppController', ['$http', '$templateCache', '$sce',\n *       function($http, $templateCache, $sce) {\n *         var self = this;\n *         $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n *           self.userComments = userComments;\n *         });\n *         self.explicitlyTrustedHtml = $sce.trustAsHtml(\n *             '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n *             'sanitization.&quot;\">Hover over this text.</span>');\n *       }]);\n * </file>\n *\n * <file name=\"test_data.json\">\n * [\n *   { \"name\": \"Alice\",\n *     \"htmlComment\":\n *         \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n *   },\n *   { \"name\": \"Bob\",\n *     \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n *   }\n * ]\n * </file>\n *\n * <file name=\"protractor.js\" type=\"protractor\">\n *   describe('SCE doc demo', function() {\n *     it('should sanitize untrusted values', function() {\n *       expect(element.all(by.css('.htmlComment')).first().getInnerHtml())\n *           .toBe('<span>Is <i>anyone</i> reading this?</span>');\n *     });\n *\n *     it('should NOT sanitize explicitly trusted values', function() {\n *       expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n *           '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n *           'sanitization.&quot;\">Hover over this text.</span>');\n *     });\n *   });\n * </file>\n * </example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * ```\n * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *   // Completely disable SCE.  For demonstration purposes only!\n *   // Do not use in new projects.\n *   $sceProvider.enabled(false);\n * });\n * ```\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $sceProvider#enabled\n   * @kind function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function(value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$sceDelegate', function(\n                $parse,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE<11 quirks mode.  In that mode, IE < 11 allow\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && msie < 8) {\n      throw $sceMinErr('iequirks',\n        'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +\n        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n    }\n\n    var sce = shallowCopy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc method\n     * @name $sce#isEnabled\n     * @kind function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function() {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAs\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return $parse(expr, function(value) {\n          return sce.getTrusted(type, value);\n        });\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAs\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an object that is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resource_url, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrusted\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedCss\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedJs\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsCss\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function(enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function(expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function(value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function(value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name $sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        android =\n          int((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for (var prop in bodyStyle) {\n        if (match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if (!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions ||  !animations)) {\n        transitions = isString(document.body.style.webkitTransition);\n        animations = isString(document.body.style.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        if (event == 'input' && msie == 9) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions: transitions,\n      animations: animations,\n      android: android\n    };\n  }];\n}\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc service\n * @name $templateRequest\n *\n * @description\n * The `$templateRequest` service downloads the provided template using `$http` and, upon success,\n * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data\n * of the HTTP request is empty then a `$compile` error will be thrown (the exception can be thwarted\n * by setting the 2nd parameter of the function to true).\n *\n * @param {string} tpl The HTTP request template URL\n * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty\n *\n * @return {Promise} the HTTP Promise for the given.\n *\n * @property {number} totalPendingRequests total amount of pending template requests being downloaded.\n */\nfunction $TemplateRequestProvider() {\n  this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {\n    function handleRequestFn(tpl, ignoreRequestError) {\n      var self = handleRequestFn;\n      self.totalPendingRequests++;\n\n      var transformResponse = $http.defaults && $http.defaults.transformResponse;\n\n      if (isArray(transformResponse)) {\n        transformResponse = transformResponse.filter(function(transformer) {\n          return transformer !== defaultHttpResponseTransform;\n        });\n      } else if (transformResponse === defaultHttpResponseTransform) {\n        transformResponse = null;\n      }\n\n      var httpOptions = {\n        cache: $templateCache,\n        transformResponse: transformResponse\n      };\n\n      return $http.get(tpl, httpOptions)\n        .then(function(response) {\n          var html = response.data;\n          self.totalPendingRequests--;\n          $templateCache.put(tpl, html);\n          return html;\n        }, handleError);\n\n      function handleError(resp) {\n        self.totalPendingRequests--;\n        if (!ignoreRequestError) {\n          throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);\n        }\n        return $q.reject(resp);\n      }\n    }\n\n    handleRequestFn.totalPendingRequests = 0;\n\n    return handleRequestFn;\n  }];\n}\n\nfunction $$TestabilityProvider() {\n  this.$get = ['$rootScope', '$browser', '$location',\n       function($rootScope,   $browser,   $location) {\n\n    /**\n     * @name $testability\n     *\n     * @description\n     * The private $$testability service provides a collection of methods for use when debugging\n     * or by automated test and debugging tools.\n     */\n    var testability = {};\n\n    /**\n     * @name $$testability#findBindings\n     *\n     * @description\n     * Returns an array of elements that are bound (via ng-bind or {{}})\n     * to expressions matching the input.\n     *\n     * @param {Element} element The element root to search from.\n     * @param {string} expression The binding expression to match.\n     * @param {boolean} opt_exactMatch If true, only returns exact matches\n     *     for the expression. Filters and whitespace are ignored.\n     */\n    testability.findBindings = function(element, expression, opt_exactMatch) {\n      var bindings = element.getElementsByClassName('ng-binding');\n      var matches = [];\n      forEach(bindings, function(binding) {\n        var dataBinding = angular.element(binding).data('$binding');\n        if (dataBinding) {\n          forEach(dataBinding, function(bindingName) {\n            if (opt_exactMatch) {\n              var matcher = new RegExp('(^|\\\\s)' + escapeForRegexp(expression) + '(\\\\s|\\\\||$)');\n              if (matcher.test(bindingName)) {\n                matches.push(binding);\n              }\n            } else {\n              if (bindingName.indexOf(expression) != -1) {\n                matches.push(binding);\n              }\n            }\n          });\n        }\n      });\n      return matches;\n    };\n\n    /**\n     * @name $$testability#findModels\n     *\n     * @description\n     * Returns an array of elements that are two-way found via ng-model to\n     * expressions matching the input.\n     *\n     * @param {Element} element The element root to search from.\n     * @param {string} expression The model expression to match.\n     * @param {boolean} opt_exactMatch If true, only returns exact matches\n     *     for the expression.\n     */\n    testability.findModels = function(element, expression, opt_exactMatch) {\n      var prefixes = ['ng-', 'data-ng-', 'ng\\\\:'];\n      for (var p = 0; p < prefixes.length; ++p) {\n        var attributeEquals = opt_exactMatch ? '=' : '*=';\n        var selector = '[' + prefixes[p] + 'model' + attributeEquals + '\"' + expression + '\"]';\n        var elements = element.querySelectorAll(selector);\n        if (elements.length) {\n          return elements;\n        }\n      }\n    };\n\n    /**\n     * @name $$testability#getLocation\n     *\n     * @description\n     * Shortcut for getting the location in a browser agnostic way. Returns\n     *     the path, search, and hash. (e.g. /path?a=b#hash)\n     */\n    testability.getLocation = function() {\n      return $location.url();\n    };\n\n    /**\n     * @name $$testability#setLocation\n     *\n     * @description\n     * Shortcut for navigating to a location without doing a full page reload.\n     *\n     * @param {string} url The location url (path, search and hash,\n     *     e.g. /path?a=b#hash) to go to.\n     */\n    testability.setLocation = function(url) {\n      if (url !== $location.url()) {\n        $location.url(url);\n        $rootScope.$digest();\n      }\n    };\n\n    /**\n     * @name $$testability#whenStable\n     *\n     * @description\n     * Calls the callback when $timeout and $http requests are completed.\n     *\n     * @param {function} callback\n     */\n    testability.whenStable = function(callback) {\n      $browser.notifyWhenNoOutstandingRequests(callback);\n    };\n\n    return testability;\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $$q,   $exceptionHandler) {\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $timeout\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of registering a timeout function is a promise, which will be resolved when\n      * the timeout is reached and the timeout function is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * @param {function()} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this\n      *   promise will be resolved with is the return value of the `fn` function.\n      *\n      */\n    function timeout(fn, delay, invokeApply) {\n      var skipApply = (isDefined(invokeApply) && !invokeApply),\n          deferred = (skipApply ? $$q : $q).defer(),\n          promise = deferred.promise,\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn());\n        } catch (e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $timeout#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href);\n\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node.  (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @kind function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url) {\n  var href = url;\n\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: (urlParsingNode.pathname.charAt(0) === '/')\n      ? urlParsingNode.pathname\n      : '/' + urlParsingNode.pathname\n  };\n}\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc service\n * @name $window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <example module=\"windowExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('windowExample', [])\n           .controller('ExampleController', ['$scope', '$window', function($scope, $window) {\n             $scope.greeting = 'Hello, World!';\n             $scope.doGreeting = function(greeting) {\n               $window.alert(greeting);\n             };\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <input type=\"text\" ng-model=\"greeting\" />\n         <button ng-click=\"doGreeting(greeting)\">ALERT</button>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n      it('should display the greeting in the input box', function() {\n       element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </file>\n   </example>\n */\nfunction $WindowProvider() {\n  this.$get = valueFn(window);\n}\n\n/* global currencyFilter: true,\n dateFilter: true,\n filterFilter: true,\n jsonFilter: true,\n limitToFilter: true,\n lowercaseFilter: true,\n numberFilter: true,\n orderByFilter: true,\n uppercaseFilter: true,\n */\n\n/**\n * @ngdoc provider\n * @name $filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * ```js\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * ```\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n *\n * ```js\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * ```\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n\n/**\n * @ngdoc service\n * @name $filter\n * @kind function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n * @example\n   <example name=\"$filter\" module=\"filterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n        <h3>{{ originalText }}</h3>\n        <h3>{{ filteredText }}</h3>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n      angular.module('filterExample', [])\n      .controller('MainCtrl', function($scope, $filter) {\n        $scope.originalText = 'hello';\n        $scope.filteredText = $filter('uppercase')($scope.originalText);\n      });\n     </file>\n   </example>\n  */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc method\n   * @name $filterProvider#register\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if (isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n\n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name filter\n * @kind function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: The string is evaluated as an expression and the resulting value is used for substring match against\n *     the contents of the `array`. All strings or objects with string properties in `array` that contain this string\n *     will be returned. The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n *     property of the object. That's equivalent to the simple substring match with a `string`\n *     as described above. The predicate can be negated by prefixing the string with `!`.\n *     For Example `{name: \"!M\"}` predicate will return an array of items which have property `name`\n *     not containing \"M\".\n *\n *   - `function(value, index)`: A predicate function can be used to write arbitrary filters. The\n *     function is called for each element of `array`. The final result is an array of those\n *     elements that the predicate returned true for.\n *\n * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *   - `function(actual, expected)`:\n *     The function will be given the object value and the predicate value to compare and\n *     should return true if the item should be included in filtered result.\n *\n *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.\n *     this is essentially strict comparison of expected and actual.\n *\n *   - `false|undefined`: A short hand for a function which will look for a substring match in case\n *     insensitive way.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       Search: <input ng-model=\"searchText\">\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       Any: <input ng-model=\"search.$\"> <br>\n       Name only <input ng-model=\"search.name\"><br>\n       Phone only <input ng-model=\"search.phone\"><br>\n       Equality <input type=\"checkbox\" ng-model=\"strict\"><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friendObj in friends | filter:search:strict\">\n           <td>{{friendObj.name}}</td>\n           <td>{{friendObj.phone}}</td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var expectFriendNames = function(expectedNames, key) {\n         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n           arr.forEach(function(wd, i) {\n             expect(wd.getText()).toMatch(expectedNames[i]);\n           });\n         });\n       };\n\n       it('should search across all fields when filtering with a string', function() {\n         var searchText = element(by.model('searchText'));\n         searchText.clear();\n         searchText.sendKeys('m');\n         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\n         searchText.clear();\n         searchText.sendKeys('76');\n         expectFriendNames(['John', 'Julie'], 'friend');\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         var searchAny = element(by.model('search.$'));\n         searchAny.clear();\n         searchAny.sendKeys('i');\n         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         var searchName = element(by.model('search.name'));\n         var strict = element(by.model('strict'));\n         searchName.clear();\n         searchName.sendKeys('Julie');\n         strict.click();\n         expectFriendNames(['Julie'], 'friendObj');\n       });\n     </file>\n   </example>\n */\nfunction filterFilter() {\n  return function(array, expression, comparator) {\n    if (!isArray(array)) return array;\n\n    var comparatorType = typeof(comparator),\n        predicates = [];\n\n    predicates.check = function(value, index) {\n      for (var j = 0; j < predicates.length; j++) {\n        if (!predicates[j](value, index)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    if (comparatorType !== 'function') {\n      if (comparatorType === 'boolean' && comparator) {\n        comparator = function(obj, text) {\n          return angular.equals(obj, text);\n        };\n      } else {\n        comparator = function(obj, text) {\n          if (obj && text && typeof obj === 'object' && typeof text === 'object') {\n            for (var objKey in obj) {\n              if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&\n                  comparator(obj[objKey], text[objKey])) {\n                return true;\n              }\n            }\n            return false;\n          }\n          text = ('' + text).toLowerCase();\n          return ('' + obj).toLowerCase().indexOf(text) > -1;\n        };\n      }\n    }\n\n    var search = function(obj, text) {\n      if (typeof text === 'string' && text.charAt(0) === '!') {\n        return !search(obj, text.substr(1));\n      }\n      switch (typeof obj) {\n        case 'boolean':\n        case 'number':\n        case 'string':\n          return comparator(obj, text);\n        case 'object':\n          switch (typeof text) {\n            case 'object':\n              return comparator(obj, text);\n            default:\n              for (var objKey in obj) {\n                if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {\n                  return true;\n                }\n              }\n              break;\n          }\n          return false;\n        case 'array':\n          for (var i = 0; i < obj.length; i++) {\n            if (search(obj[i], text)) {\n              return true;\n            }\n          }\n          return false;\n        default:\n          return false;\n      }\n    };\n    switch (typeof expression) {\n      case 'boolean':\n      case 'number':\n      case 'string':\n        // Set up expression object and fall through\n        expression = {$:expression};\n        // jshint -W086\n      case 'object':\n        // jshint +W086\n        for (var key in expression) {\n          (function(path) {\n            if (typeof expression[path] === 'undefined') return;\n            predicates.push(function(value) {\n              return search(path == '$' ? value : (value && value[path]), expression[path]);\n            });\n          })(key);\n        }\n        break;\n      case 'function':\n        predicates.push(expression);\n        break;\n      default:\n        return array;\n    }\n    var filtered = [];\n    for (var j = 0; j < array.length; j++) {\n      var value = array[j];\n      if (predicates.check(value, j)) {\n        filtered.push(value);\n      }\n    }\n    return filtered;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name currency\n * @kind function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <example module=\"currencyExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('currencyExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.amount = 1234.56;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <input type=\"number\" ng-model=\"amount\"> <br>\n         default currency symbol ($): <span id=\"currency-default\">{{amount | currency}}</span><br>\n         custom currency identifier (USD$): <span id=\"currency-custom\">{{amount | currency:\"USD$\"}}</span>\n         no fractions (0): <span id=\"currency-no-fractions\">{{amount | currency:\"USD$\":0}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should init with 1234.56', function() {\n         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n         expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');\n         expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');\n       });\n       it('should update', function() {\n         if (browser.params.browser == 'safari') {\n           // Safari does not understand the minus key. See\n           // https://github.com/angular/protractor/issues/481\n           return;\n         }\n         element(by.model('amount')).clear();\n         element(by.model('amount')).sendKeys('-1234');\n         expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');\n         expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)');\n         expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)');\n       });\n     </file>\n   </example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol, fractionSize) {\n    if (isUndefined(currencySymbol)) {\n      currencySymbol = formats.CURRENCY_SYM;\n    }\n\n    if (isUndefined(fractionSize)) {\n      fractionSize = formats.PATTERNS[1].maxFrac;\n    }\n\n    // if null or undefined pass it through\n    return (amount == null)\n        ? amount\n        : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).\n            replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name number\n * @kind function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is not a number an empty string is returned.\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.\n *\n * @example\n   <example module=\"numberFilterExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('numberFilterExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.val = 1234.56789;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         Enter number: <input ng-model='val'><br>\n         Default formatting: <span id='number-default'>{{val | number}}</span><br>\n         No fractions: <span>{{val | number:0}}</span><br>\n         Negative number: <span>{{-val | number:4}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format numbers', function() {\n         expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         element(by.model('val')).clear();\n         element(by.model('val')).sendKeys('3374.333');\n         expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n      });\n     </file>\n   </example>\n */\n\n\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n\n    // if null or undefined pass it through\n    return (number == null)\n        ? number\n        : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n                       fractionSize);\n  };\n}\n\nvar DECIMAL_SEP = '.';\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n  if (!isFinite(number) || isObject(number)) return '';\n\n  var isNegative = number < 0;\n  number = Math.abs(number);\n  var numStr = number + '',\n      formatedText = '',\n      parts = [];\n\n  var hasExponent = false;\n  if (numStr.indexOf('e') !== -1) {\n    var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n    if (match && match[2] == '-' && match[3] > fractionSize + 1) {\n      numStr = '0';\n      number = 0;\n    } else {\n      formatedText = numStr;\n      hasExponent = true;\n    }\n  }\n\n  if (!hasExponent) {\n    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n    // determine fractionSize if it is not specified\n    if (isUndefined(fractionSize)) {\n      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n    }\n\n    // safely round numbers in JS without hitting imprecisions of floating-point arithmetics\n    // inspired by:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n    number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);\n\n    if (number === 0) {\n      isNegative = false;\n    }\n\n    var fraction = ('' + number).split(DECIMAL_SEP);\n    var whole = fraction[0];\n    fraction = fraction[1] || '';\n\n    var i, pos = 0,\n        lgroup = pattern.lgSize,\n        group = pattern.gSize;\n\n    if (whole.length >= (lgroup + group)) {\n      pos = whole.length - lgroup;\n      for (i = 0; i < pos; i++) {\n        if ((pos - i) % group === 0 && i !== 0) {\n          formatedText += groupSep;\n        }\n        formatedText += whole.charAt(i);\n      }\n    }\n\n    for (i = pos; i < whole.length; i++) {\n      if ((whole.length - i) % lgroup === 0 && i !== 0) {\n        formatedText += groupSep;\n      }\n      formatedText += whole.charAt(i);\n    }\n\n    // format fraction part.\n    while (fraction.length < fractionSize) {\n      fraction += '0';\n    }\n\n    if (fractionSize && fractionSize !== \"0\") formatedText += decimalSep + fraction.substr(0, fractionSize);\n  } else {\n\n    if (fractionSize > 0 && number > -1 && number < 1) {\n      formatedText = number.toFixed(fractionSize);\n    }\n  }\n\n  parts.push(isNegative ? pattern.negPre : pattern.posPre,\n             formatedText,\n             isNegative ? pattern.negSuf : pattern.posSuf);\n  return parts.join('');\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while (num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset)\n      value += offset;\n    if (value === 0 && offset == -12) value = 12;\n    return padNumber(value, size, trim);\n  };\n}\n\nfunction dateStrGetter(name, shortForm) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date) {\n  var zone = -1 * date.getTimezoneOffset();\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction getFirstThursdayOfYear(year) {\n    // 0 = index of January\n    var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();\n    // 4 = index of Thursday (+1 to account for 1st = 5)\n    // 11 = index of *next* Thursday (+1 account for 1st = 12)\n    return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);\n}\n\nfunction getThursdayThisWeek(datetime) {\n    return new Date(datetime.getFullYear(), datetime.getMonth(),\n      // 4 = index of Thursday\n      datetime.getDate() + (4 - datetime.getDay()));\n}\n\nfunction weekGetter(size) {\n   return function(date) {\n      var firstThurs = getFirstThursdayOfYear(date.getFullYear()),\n         thisThurs = getThursdayThisWeek(date);\n\n      var diff = +thisThurs - +firstThurs,\n         result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week\n\n      return padNumber(result, size);\n   };\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4),\n    yy: dateGetter('FullYear', 2, 0, true),\n     y: dateGetter('FullYear', 1),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter,\n    ww: weekGetter(2),\n     w: weekGetter(1)\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in AM/PM, padded (01-12)\n *   * `'h'`: Hour in AM/PM, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: AM/PM marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *   * `'ww'`: ISO-8601 week of year (00-53)\n *   * `'w'`: ISO-8601 week of year (0-53)\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 PM)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 PM)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)\n *\n *   `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported.\n *    If not specified, the timezone of the browser will be used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           <span>{{1288323623006 | date:'medium'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:\"MM/dd/yyyy 'at' h:mma\"}}</span>:\n          <span>{{'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"}}</span><br>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format date', function() {\n         expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n         expect(element(by.binding(\"'1288323623006' | date:\\\"MM/dd/yyyy 'at' h:mma\\\"\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 at \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </file>\n   </example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = int(match[9] + match[10]);\n        tzMin = int(match[9] + match[11]);\n      }\n      dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n      var h = int(match[4] || 0) - tzHour;\n      var m = int(match[5] || 0) - tzMin;\n      var s = int(match[6] || 0);\n      var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format, timezone) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date)) {\n      return date;\n    }\n\n    while (format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    if (timezone && timezone === 'UTC') {\n      date = new Date(date.getTime());\n      date.setMinutes(date.getMinutes() + date.getTimezoneOffset());\n    }\n    forEach(parts, function(value) {\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS)\n                 : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name json\n * @kind function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @returns {string} JSON string.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <pre>{{ {'name':'value'} | json }}</pre>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should jsonify filtered objects', function() {\n         expect(element(by.binding(\"{'name':'value'}\")).getText()).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n       });\n     </file>\n   </example>\n *\n */\nfunction jsonFilter() {\n  return function(object) {\n    return toJson(object, true);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name lowercase\n * @kind function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name uppercase\n * @kind function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc filter\n * @name limitTo\n * @kind function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements\n * are taken from either the beginning or the end of the source array, string or number, as specified by\n * the value and sign (positive or negative) of `limit`. If a number is used as input, it is\n * converted to a string.\n *\n * @param {Array|string|number} input Source array, string or number to be limited.\n * @param {string|number} limit The length of the returned array or string. If the `limit` number\n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string\n *     are copied. The `limit` will be trimmed if it exceeds `array.length`\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n *     had less than `limit` elements.\n *\n * @example\n   <example module=\"limitToExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('limitToExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.numbers = [1,2,3,4,5,6,7,8,9];\n             $scope.letters = \"abcdefghi\";\n             $scope.longNumber = 2345432342;\n             $scope.numLimit = 3;\n             $scope.letterLimit = 3;\n             $scope.longNumberLimit = 3;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         Limit {{numbers}} to: <input type=\"number\" step=\"1\" ng-model=\"numLimit\">\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         Limit {{letters}} to: <input type=\"number\" step=\"1\" ng-model=\"letterLimit\">\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n         Limit {{longNumber}} to: <input type=\"number\" step=\"1\" ng-model=\"longNumberLimit\">\n         <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var numLimitInput = element(by.model('numLimit'));\n       var letterLimitInput = element(by.model('letterLimit'));\n       var longNumberLimitInput = element(by.model('longNumberLimit'));\n       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n       var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));\n\n       it('should limit the number array to first three items', function() {\n         expect(numLimitInput.getAttribute('value')).toBe('3');\n         expect(letterLimitInput.getAttribute('value')).toBe('3');\n         expect(longNumberLimitInput.getAttribute('value')).toBe('3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abc');\n         expect(limitedLongNumber.getText()).toEqual('Output long number: 234');\n       });\n\n       // There is a bug in safari and protractor that doesn't like the minus key\n       // it('should update the output when -3 is entered', function() {\n       //   numLimitInput.clear();\n       //   numLimitInput.sendKeys('-3');\n       //   letterLimitInput.clear();\n       //   letterLimitInput.sendKeys('-3');\n       //   longNumberLimitInput.clear();\n       //   longNumberLimitInput.sendKeys('-3');\n       //   expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n       //   expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n       //   expect(limitedLongNumber.getText()).toEqual('Output long number: 342');\n       // });\n\n       it('should not exceed the maximum size of input array', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('100');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('100');\n         longNumberLimitInput.clear();\n         longNumberLimitInput.sendKeys('100');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n         expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');\n       });\n     </file>\n   </example>\n*/\nfunction limitToFilter() {\n  return function(input, limit) {\n    if (isNumber(input)) input = input.toString();\n    if (!isArray(input) && !isString(input)) return input;\n\n    if (Math.abs(Number(limit)) === Infinity) {\n      limit = Number(limit);\n    } else {\n      limit = int(limit);\n    }\n\n    if (isString(input)) {\n      //NaN check on limit\n      if (limit) {\n        return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);\n      } else {\n        return \"\";\n      }\n    }\n\n    var out = [],\n      i, n;\n\n    // if abs(limit) exceeds maximum length, trim it\n    if (limit > input.length)\n      limit = input.length;\n    else if (limit < -input.length)\n      limit = -input.length;\n\n    if (limit > 0) {\n      i = 0;\n      n = limit;\n    } else {\n      i = input.length + limit;\n      n = input.length;\n    }\n\n    for (; i < n; i++) {\n      out.push(input[i]);\n    }\n\n    return out;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name orderBy\n * @kind function\n *\n * @description\n * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically\n * for strings and numerically for numbers. Note: if you notice numbers are not being sorted\n * correctly, make sure they are actually being saved as numbers and not strings.\n *\n * @param {Array} array The array to sort.\n * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be\n *    used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `function`: Getter function. The result of this function will be sorted using the\n *      `<`, `=`, `>` operator.\n *    - `string`: An Angular expression. The result of this expression is used to compare elements\n *      (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by\n *      3 first characters of a property called `name`). The result of a constant expression\n *      is interpreted as a property name to be used in comparisons (for example `\"special name\"`\n *      to sort object by the value of their `special name` property). An expression can be\n *      optionally prefixed with `+` or `-` to control ascending or descending sort order\n *      (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array\n *      element itself is used to compare where sorting.\n *    - `Array`: An array of function or string predicates. The first predicate in the array\n *      is used for sorting, but when two items are equivalent, the next predicate is used.\n *\n *    If the predicate is missing or empty then it defaults to `'+'`.\n *\n * @param {boolean=} reverse Reverse the order of the array.\n * @returns {Array} Sorted copy of the source array.\n *\n * @example\n   <example module=\"orderByExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('orderByExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.friends =\n                 [{name:'John', phone:'555-1212', age:10},\n                  {name:'Mary', phone:'555-9876', age:19},\n                  {name:'Mike', phone:'555-4321', age:21},\n                  {name:'Adam', phone:'555-5678', age:35},\n                  {name:'Julie', phone:'555-8765', age:29}];\n             $scope.predicate = '-age';\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>\n         <hr/>\n         [ <a href=\"\" ng-click=\"predicate=''\">unsorted</a> ]\n         <table class=\"friend\">\n           <tr>\n             <th><a href=\"\" ng-click=\"predicate = 'name'; reverse=false\">Name</a>\n                 (<a href=\"\" ng-click=\"predicate = '-name'; reverse=false\">^</a>)</th>\n             <th><a href=\"\" ng-click=\"predicate = 'phone'; reverse=!reverse\">Phone Number</a></th>\n             <th><a href=\"\" ng-click=\"predicate = 'age'; reverse=!reverse\">Age</a></th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:predicate:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n   </example>\n *\n * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the\n * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the\n * desired parameters.\n *\n * Example:\n *\n * @example\n  <example module=\"orderByExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <table class=\"friend\">\n          <tr>\n            <th><a href=\"\" ng-click=\"reverse=false;order('name', false)\">Name</a>\n              (<a href=\"\" ng-click=\"order('-name',false)\">^</a>)</th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('phone', reverse)\">Phone Number</a></th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('age',reverse)\">Age</a></th>\n          </tr>\n          <tr ng-repeat=\"friend in friends\">\n            <td>{{friend.name}}</td>\n            <td>{{friend.phone}}</td>\n            <td>{{friend.age}}</td>\n          </tr>\n        </table>\n      </div>\n    </file>\n\n    <file name=\"script.js\">\n      angular.module('orderByExample', [])\n        .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {\n          var orderBy = $filter('orderBy');\n          $scope.friends = [\n            { name: 'John',    phone: '555-1212',    age: 10 },\n            { name: 'Mary',    phone: '555-9876',    age: 19 },\n            { name: 'Mike',    phone: '555-4321',    age: 21 },\n            { name: 'Adam',    phone: '555-5678',    age: 35 },\n            { name: 'Julie',   phone: '555-8765',    age: 29 }\n          ];\n          $scope.order = function(predicate, reverse) {\n            $scope.friends = orderBy($scope.friends, predicate, reverse);\n          };\n          $scope.order('-age',false);\n        }]);\n    </file>\n</example>\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse) {\n  return function(array, sortPredicate, reverseOrder) {\n    if (!(isArrayLike(array))) return array;\n    sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate];\n    if (sortPredicate.length === 0) { sortPredicate = ['+']; }\n    sortPredicate = sortPredicate.map(function(predicate) {\n      var descending = false, get = predicate || identity;\n      if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-';\n          predicate = predicate.substring(1);\n        }\n        if (predicate === '') {\n          // Effectively no predicate was passed so we compare identity\n          return reverseComparator(function(a, b) {\n            return compare(a, b);\n          }, descending);\n        }\n        get = $parse(predicate);\n        if (get.constant) {\n          var key = get();\n          return reverseComparator(function(a, b) {\n            return compare(a[key], b[key]);\n          }, descending);\n        }\n      }\n      return reverseComparator(function(a, b) {\n        return compare(get(a),get(b));\n      }, descending);\n    });\n    return slice.call(array).sort(reverseComparator(comparator, reverseOrder));\n\n    function comparator(o1, o2) {\n      for (var i = 0; i < sortPredicate.length; i++) {\n        var comp = sortPredicate[i](o1, o2);\n        if (comp !== 0) return comp;\n      }\n      return 0;\n    }\n    function reverseComparator(comp, descending) {\n      return descending\n          ? function(a, b) {return comp(b,a);}\n          : comp;\n    }\n    function compare(v1, v2) {\n      var t1 = typeof v1;\n      var t2 = typeof v2;\n      if (t1 == t2) {\n        if (isDate(v1) && isDate(v2)) {\n          v1 = v1.valueOf();\n          v2 = v2.valueOf();\n        }\n        if (t1 == \"string\") {\n           v1 = v1.toLowerCase();\n           v2 = v2.toLowerCase();\n        }\n        if (v1 === v2) return 0;\n        return v1 < v2 ? -1 : 1;\n      } else {\n        return t1 < t2 ? -1 : 1;\n      }\n    }\n  };\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n    if (!attr.href && !attr.xlinkHref && !attr.name) {\n      return function(scope, element) {\n        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n                   'xlink:href' : 'href';\n        element.on('click', function(event) {\n          // if we have no href url, then don't navigate anywhere.\n          if (!element.attr(href)) {\n            event.preventDefault();\n          }\n        });\n      };\n    }\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngHref\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error. The `ngHref` directive\n * solves this problem.\n *\n * The wrong way to write it:\n * ```html\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\">link1</a>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\">link1</a>\n * ```\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <example>\n      <file name=\"index.html\">\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should execute ng-click but not reload when href without value', function() {\n          element(by.id('link-1')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n          expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element(by.id('link-2')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n          expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\n          element(by.id('link-3')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/123$/);\n            });\n          }, 5000, 'page should navigate to /123');\n        });\n\n        xit('should execute ng-click but not reload when href empty string and name specified', function() {\n          element(by.id('link-4')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n          expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element(by.id('link-5')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n        });\n\n        it('should only change url when only ng-href', function() {\n          element(by.model('value')).clear();\n          element(by.model('value')).sendKeys('6');\n          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\n          element(by.id('link-6')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/6$/);\n            });\n          }, 5000, 'page should navigate to /6');\n        });\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSrc\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngSrcset\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngDisabled\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:\n * ```html\n * <div ng-init=\"scope = { isDisabled: false }\">\n *  <button disabled=\"{{scope.isDisabled}}\">Disabled</button>\n * </div>\n * ```\n *\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as disabled. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngDisabled` directive solves this problem for the `disabled` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle button', function() {\n          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n *     then special attribute \"disabled\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngChecked\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as checked. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngChecked` directive solves this problem for the `checked` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to check both: <input type=\"checkbox\" ng-model=\"master\"><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\">\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should check both checkBoxes', function() {\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n          element(by.model('master')).click();\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n *     then special attribute \"checked\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngReadonly\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as readonly. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngReadonly` directive solves this problem for the `readonly` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\"/>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle readonly attr', function() {\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSelected\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as selected. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngSelected` directive solves this problem for the `selected` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to select: <input type=\"checkbox\" ng-model=\"selected\"><br/>\n        <select>\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should select Greetings!', function() {\n          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n          element(by.model('selected')).click();\n          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ngOpen\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as open. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngOpen` directive solves this problem for the `open` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n     <example>\n       <file name=\"index.html\">\n         Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </file>\n       <file name=\"protractor.js\" type=\"protractor\">\n         it('should toggle open', function() {\n           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n           element(by.model('open')).click();\n           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n         });\n       </file>\n     </example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      restrict: 'A',\n      priority: 100,\n      link: function(scope, element, attr) {\n        scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n          attr.$set(attrName, !!value);\n        });\n      }\n    };\n  };\n});\n\n// aliased input attrs are evaluated\nforEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {\n  ngAttributeAliasDirectives[ngAttr] = function() {\n    return {\n      priority: 100,\n      link: function(scope, element, attr) {\n        //special case ngPattern when a literal regular expression value\n        //is used as the expression (this way we don't have to watch anything).\n        if (ngAttr === \"ngPattern\" && attr.ngPattern.charAt(0) == \"/\") {\n          var match = attr.ngPattern.match(REGEX_STRING_REGEXP);\n          if (match) {\n            attr.$set(\"ngPattern\", new RegExp(match[1], match[2]));\n            return;\n          }\n        }\n\n        scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {\n          attr.$set(ngAttr, value);\n        });\n      }\n    };\n  };\n});\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        var propName = attrName,\n            name = attrName;\n\n        if (attrName === 'href' &&\n            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n          name = 'xlinkHref';\n          attr.$attr[name] = 'xlink:href';\n          propName = null;\n        }\n\n        attr.$observe(normalized, function(value) {\n          if (!value) {\n            if (attrName === 'href') {\n              attr.$set(name, null);\n            }\n            return;\n          }\n\n          attr.$set(name, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie && propName) element.prop(propName, attr[name]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true\n */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $$renameControl: nullFormRenameControl,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop,\n  $setSubmitted: noop\n},\nSUBMITTED_CLASS = 'ng-submitted';\n\nfunction nullFormRenameControl(control, name) {\n  control.$name = name;\n}\n\n/**\n * @ngdoc type\n * @name form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n * @property {boolean} $submitted True if user has submitted the form even if its invalid.\n *\n * @property {Object} $error Is an object hash, containing references to controls or\n *  forms with failing validators, where:\n *\n *  - keys are validation tokens (error names),\n *  - values are arrays of controls or forms that have a failing validator for given error name.\n *\n *  Built-in validation tokens:\n *\n *  - `email`\n *  - `max`\n *  - `maxlength`\n *  - `min`\n *  - `minlength`\n *  - `number`\n *  - `pattern`\n *  - `required`\n *  - `url`\n *  - `date`\n *  - `datetimelocal`\n *  - `time`\n *  - `week`\n *  - `month`\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as the state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];\nfunction FormController(element, attrs, $scope, $animate, $interpolate) {\n  var form = this,\n      controls = [];\n\n  var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl;\n\n  // init state\n  form.$error = {};\n  form.$$success = {};\n  form.$pending = undefined;\n  form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n  form.$submitted = false;\n\n  parentForm.$addControl(form);\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$rollbackViewValue\n   *\n   * @description\n   * Rollback all form controls pending updates to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. This method is typically needed by the reset button of\n   * a form that uses `ng-model-options` to pend updates.\n   */\n  form.$rollbackViewValue = function() {\n    forEach(controls, function(control) {\n      control.$rollbackViewValue();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$commitViewValue\n   *\n   * @description\n   * Commit all form controls pending updates to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`\n   * usually handles calling this in response to input events.\n   */\n  form.$commitViewValue = function() {\n    forEach(controls, function(control) {\n      control.$commitViewValue();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$addControl\n   *\n   * @description\n   * Register a control with the form.\n   *\n   * Input elements using ngModelController do this automatically when they are linked.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n  };\n\n  // Private API: rename a form control\n  form.$$renameControl = function(control, newName) {\n    var oldName = control.$name;\n\n    if (form[oldName] === control) {\n      delete form[oldName];\n    }\n    form[newName] = control;\n    control.$name = newName;\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$removeControl\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(form.$pending, function(value, name) {\n      form.$setValidity(name, null, control);\n    });\n    forEach(form.$error, function(value, name) {\n      form.$setValidity(name, null, control);\n    });\n\n    arrayRemove(controls, control);\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setValidity\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  addSetValidityMethod({\n    ctrl: this,\n    $element: element,\n    set: function(object, property, control) {\n      var list = object[property];\n      if (!list) {\n        object[property] = [control];\n      } else {\n        var index = list.indexOf(control);\n        if (index === -1) {\n          list.push(control);\n        }\n      }\n    },\n    unset: function(object, property, control) {\n      var list = object[property];\n      if (!list) {\n        return;\n      }\n      arrayRemove(list, control);\n      if (list.length === 0) {\n        delete object[property];\n      }\n    },\n    parentForm: parentForm,\n    $animate: $animate\n  });\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setDirty\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    $animate.removeClass(element, PRISTINE_CLASS);\n    $animate.addClass(element, DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setPristine\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function() {\n    $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    form.$submitted = false;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setUntouched\n   *\n   * @description\n   * Sets the form to its untouched state.\n   *\n   * This method can be called to remove the 'ng-touched' class and set the form controls to their\n   * untouched state (ng-untouched class).\n   *\n   * Setting a form controls back to their untouched state is often useful when setting the form\n   * back to its pristine state.\n   */\n  form.$setUntouched = function() {\n    forEach(controls, function(control) {\n      control.$setUntouched();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setSubmitted\n   *\n   * @description\n   * Sets the form to its submitted state.\n   */\n  form.$setSubmitted = function() {\n    $animate.addClass(element, SUBMITTED_CLASS);\n    form.$submitted = true;\n    parentForm.$setSubmitted();\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * Note: the purpose of `ngForm` is to group controls,\n * but not to be a replacement for the `<form>` tag with all of its capabilities\n * (e.g. posting to the server, ...).\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to\n * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when\n * using Angular validation directives in forms that are dynamically generated using the\n * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`\n * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an\n * `ngForm` directive and nest these in an outer `form` element.\n *\n *\n * # CSS classes\n *  - `ng-valid` is set if the form is valid.\n *  - `ng-invalid` is set if the form is invalid.\n *  - `ng-pristine` is set if the form is pristine.\n *  - `ng-dirty` is set if the form is dirty.\n *  - `ng-submitted` is set if the form was submitted.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is\n * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`\n * to have access to the updated model.\n *\n * ## Animation Hooks\n *\n * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n * other validations that are performed within the form. Animations in ngForm are similar to how\n * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n * as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style a form element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-form {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-form.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n    <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\" module=\"formExample\">\n      <file name=\"index.html\">\n       <script>\n         angular.module('formExample', [])\n           .controller('FormController', ['$scope', function($scope) {\n             $scope.userType = 'guest';\n           }]);\n       </script>\n       <style>\n        .my-form {\n          -webkit-transition:all linear 0.5s;\n          transition:all linear 0.5s;\n          background: transparent;\n        }\n        .my-form.ng-invalid {\n          background: red;\n        }\n       </style>\n       <form name=\"myForm\" ng-controller=\"FormController\" class=\"my-form\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <tt>userType = {{userType}}</tt><br>\n         <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>\n         <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should initialize to model', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n\n          expect(userType.getText()).toContain('guest');\n          expect(valid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var userInput = element(by.model('userType'));\n\n          userInput.clear();\n          userInput.sendKeys('');\n\n          expect(userType.getText()).toEqual('userType =');\n          expect(valid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', function($timeout) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      controller: FormController,\n      compile: function ngFormCompile(formElement) {\n        // Setup initial state of the control\n        formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);\n\n        return {\n          pre: function ngFormPreLink(scope, formElement, attr, controller) {\n            // if `action` attr is not present on the form, prevent the default action (submission)\n            if (!('action' in attr)) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var handleFormSubmission = function(event) {\n                scope.$apply(function() {\n                  controller.$commitViewValue();\n                  controller.$setSubmitted();\n                });\n\n                event.preventDefault();\n              };\n\n              addEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = controller.$$parentForm,\n                alias = controller.$name;\n\n            if (alias) {\n              setter(scope, alias, controller, alias);\n              attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) {\n                if (alias === newValue) return;\n                setter(scope, alias, undefined, alias);\n                alias = newValue;\n                setter(scope, alias, controller, alias);\n                parentFormCtrl.$$renameControl(controller, alias);\n              });\n            }\n            formElement.on('$destroy', function() {\n              parentFormCtrl.$removeControl(controller);\n              if (alias) {\n                setter(scope, alias, undefined, alias);\n              }\n              extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n            });\n          }\n        };\n      }\n    };\n\n    return formDirective;\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global VALID_CLASS: true,\n  INVALID_CLASS: true,\n  PRISTINE_CLASS: true,\n  DIRTY_CLASS: true,\n  UNTOUCHED_CLASS: true,\n  TOUCHED_CLASS: true,\n*/\n\n// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231\nvar ISO_DATE_REGEXP = /\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)/;\nvar URL_REGEXP = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/;\nvar EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\nvar DATE_REGEXP = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nvar DATETIMELOCAL_REGEXP = /^(\\d{4})-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\nvar WEEK_REGEXP = /^(\\d{4})-W(\\d\\d)$/;\nvar MONTH_REGEXP = /^(\\d{4})-(\\d\\d)$/;\nvar TIME_REGEXP = /^(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\nvar DEFAULT_REGEXP = /(\\s+|^)default(\\s+|$)/;\n\nvar $ngModelMinErr = new minErr('ngModel');\n\nvar inputType = {\n\n  /**\n   * @ngdoc input\n   * @name input[text]\n   *\n   * @description\n   * Standard HTML text input with angular data binding, inherited by most of the `input` elements.\n   *\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match\n   *    a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object then this is used directly.\n   *    If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`\n   *    characters. For instance, `\"abc\"` will be converted to `new RegExp('^abc$')`.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *    This parameter is ignored for input[type=password] controls, which will never trim the\n   *    input.\n   *\n   * @example\n      <example name=\"text-input-directive\" module=\"textInputExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('textInputExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.text = 'guest';\n               $scope.word = /^\\s*\\w*\\s*$/;\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           Single word: <input type=\"text\" name=\"input\" ng-model=\"text\"\n                               ng-pattern=\"word\" required ng-trim=\"false\">\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n             Single word only!</span>\n\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('guest');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input.clear();\n            input.sendKeys('hello world');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'text': textInputType,\n\n    /**\n     * @ngdoc input\n     * @name input[date]\n     *\n     * @description\n     * Input with date validation and transformation. In browsers that do not yet support\n     * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601\n     * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many\n     * modern browsers do not yet support this input type, it is important to provide cues to users on the\n     * expected input format via a placeholder or label.\n     *\n     * The model must always be a Date object, otherwise Angular will throw an error.\n     * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n     *\n     * The timezone to be used to read/write the `Date` instance in the model can be defined using\n     * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n     *\n     * @param {string} ngModel Assignable angular expression to data-bind to.\n     * @param {string=} name Property name of the form under which the control is published.\n     * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n     * valid ISO date string (yyyy-MM-dd).\n     * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be\n     * a valid ISO date string (yyyy-MM-dd).\n     * @param {string=} required Sets `required` validation error key if the value is not entered.\n     * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n     *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n     *    `required` when you want to data-bind to the `required` attribute.\n     * @param {string=} ngChange Angular expression to be executed when input changes due to user\n     *    interaction with the input element.\n     *\n     * @example\n     <example name=\"date-input-directive\" module=\"dateInputExample\">\n     <file name=\"index.html\">\n       <script>\n          angular.module('dateInputExample', [])\n            .controller('DateController', ['$scope', function($scope) {\n              $scope.value = new Date(2013, 9, 22);\n            }]);\n       </script>\n       <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n          Pick a date in 2013:\n          <input type=\"date\" id=\"exampleInput\" name=\"input\" ng-model=\"value\"\n              placeholder=\"yyyy-MM-dd\" min=\"2013-01-01\" max=\"2013-12-31\" required />\n          <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n              Required!</span>\n          <span class=\"error\" ng-show=\"myForm.input.$error.date\">\n              Not a valid date!</span>\n           <tt>value = {{value | date: \"yyyy-MM-dd\"}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n       </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        var value = element(by.binding('value | date: \"yyyy-MM-dd\"'));\n        var valid = element(by.binding('myForm.input.$valid'));\n        var input = element(by.model('value'));\n\n        // currently protractor/webdriver does not support\n        // sending keys to all known HTML5 input controls\n        // for various browsers (see https://github.com/angular/protractor/issues/562).\n        function setInput(val) {\n          // set the value of the element and force validation.\n          var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n          \"ipt.value = '\" + val + \"';\" +\n          \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n          browser.executeScript(scr);\n        }\n\n        it('should initialize to model', function() {\n          expect(value.getText()).toContain('2013-10-22');\n          expect(valid.getText()).toContain('myForm.input.$valid = true');\n        });\n\n        it('should be invalid if empty', function() {\n          setInput('');\n          expect(value.getText()).toEqual('value =');\n          expect(valid.getText()).toContain('myForm.input.$valid = false');\n        });\n\n        it('should be invalid if over max', function() {\n          setInput('2015-01-01');\n          expect(value.getText()).toContain('');\n          expect(valid.getText()).toContain('myForm.input.$valid = false');\n        });\n     </file>\n     </example>\n     */\n  'date': createDateInputType('date', DATE_REGEXP,\n         createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),\n         'yyyy-MM-dd'),\n\n   /**\n    * @ngdoc input\n    * @name input[datetime-local]\n    *\n    * @description\n    * Input with datetime validation and transformation. In browsers that do not yet support\n    * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n    * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.\n    *\n    * The model must always be a Date object, otherwise Angular will throw an error.\n    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n    *\n    * The timezone to be used to read/write the `Date` instance in the model can be defined using\n    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n    *\n    * @param {string} ngModel Assignable angular expression to data-bind to.\n    * @param {string=} name Property name of the form under which the control is published.\n    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n    * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).\n    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be\n    * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).\n    * @param {string=} required Sets `required` validation error key if the value is not entered.\n    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n    *    `required` when you want to data-bind to the `required` attribute.\n    * @param {string=} ngChange Angular expression to be executed when input changes due to user\n    *    interaction with the input element.\n    *\n    * @example\n    <example name=\"datetimelocal-input-directive\" module=\"dateExample\">\n    <file name=\"index.html\">\n      <script>\n        angular.module('dateExample', [])\n          .controller('DateController', ['$scope', function($scope) {\n            $scope.value = new Date(2010, 11, 28, 14, 57);\n          }]);\n      </script>\n      <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        Pick a date between in 2013:\n        <input type=\"datetime-local\" id=\"exampleInput\" name=\"input\" ng-model=\"value\"\n            placeholder=\"yyyy-MM-ddTHH:mm:ss\" min=\"2001-01-01T00:00:00\" max=\"2013-12-31T00:00:00\" required />\n        <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n            Required!</span>\n        <span class=\"error\" ng-show=\"myForm.input.$error.datetimelocal\">\n            Not a valid date!</span>\n        <tt>value = {{value | date: \"yyyy-MM-ddTHH:mm:ss\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('value | date: \"yyyy-MM-ddTHH:mm:ss\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2010-12-28T14:57:00');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-01-01T23:59:00');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n    </file>\n    </example>\n    */\n  'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,\n      createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),\n      'yyyy-MM-ddTHH:mm:ss.sss'),\n\n  /**\n   * @ngdoc input\n   * @name input[time]\n   *\n   * @description\n   * Input with time validation and transformation. In browsers that do not yet support\n   * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n   * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a\n   * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.\n   *\n   * The model must always be a Date object, otherwise Angular will throw an error.\n   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n   *\n   * The timezone to be used to read/write the `Date` instance in the model can be defined using\n   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n   * valid ISO time format (HH:mm:ss).\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a\n   * valid ISO time format (HH:mm:ss).\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n   <example name=\"time-input-directive\" module=\"timeExample\">\n   <file name=\"index.html\">\n     <script>\n      angular.module('timeExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.value = new Date(1970, 0, 1, 14, 57, 0);\n        }]);\n     </script>\n     <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        Pick a between 8am and 5pm:\n        <input type=\"time\" id=\"exampleInput\" name=\"input\" ng-model=\"value\"\n            placeholder=\"HH:mm:ss\" min=\"08:00:00\" max=\"17:00:00\" required />\n        <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n            Required!</span>\n        <span class=\"error\" ng-show=\"myForm.input.$error.time\">\n            Not a valid date!</span>\n        <tt>value = {{value | date: \"HH:mm:ss\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n     </form>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('value | date: \"HH:mm:ss\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('14:57:00');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('23:59:00');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n   </file>\n   </example>\n   */\n  'time': createDateInputType('time', TIME_REGEXP,\n      createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),\n     'HH:mm:ss.sss'),\n\n   /**\n    * @ngdoc input\n    * @name input[week]\n    *\n    * @description\n    * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support\n    * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n    * week format (yyyy-W##), for example: `2013-W02`.\n    *\n    * The model must always be a Date object, otherwise Angular will throw an error.\n    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n    *\n    * The timezone to be used to read/write the `Date` instance in the model can be defined using\n    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n    *\n    * @param {string} ngModel Assignable angular expression to data-bind to.\n    * @param {string=} name Property name of the form under which the control is published.\n    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n    * valid ISO week format (yyyy-W##).\n    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be\n    * a valid ISO week format (yyyy-W##).\n    * @param {string=} required Sets `required` validation error key if the value is not entered.\n    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n    *    `required` when you want to data-bind to the `required` attribute.\n    * @param {string=} ngChange Angular expression to be executed when input changes due to user\n    *    interaction with the input element.\n    *\n    * @example\n    <example name=\"week-input-directive\" module=\"weekExample\">\n    <file name=\"index.html\">\n      <script>\n      angular.module('weekExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.value = new Date(2013, 0, 3);\n        }]);\n      </script>\n      <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        Pick a date between in 2013:\n        <input id=\"exampleInput\" type=\"week\" name=\"input\" ng-model=\"value\"\n            placeholder=\"YYYY-W##\" min=\"2012-W32\" max=\"2013-W52\" required />\n        <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n            Required!</span>\n        <span class=\"error\" ng-show=\"myForm.input.$error.week\">\n            Not a valid date!</span>\n        <tt>value = {{value | date: \"yyyy-Www\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('value | date: \"yyyy-Www\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2013-W01');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-W01');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n    </file>\n    </example>\n    */\n  'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),\n\n  /**\n   * @ngdoc input\n   * @name input[month]\n   *\n   * @description\n   * Input with month validation and transformation. In browsers that do not yet support\n   * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n   * month format (yyyy-MM), for example: `2009-01`.\n   *\n   * The model must always be a Date object, otherwise Angular will throw an error.\n   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n   * If the model is not set to the first of the month, the next view to model update will set it\n   * to the first of the month.\n   *\n   * The timezone to be used to read/write the `Date` instance in the model can be defined using\n   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be\n   * a valid ISO month format (yyyy-MM).\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must\n   * be a valid ISO month format (yyyy-MM).\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n   <example name=\"month-input-directive\" module=\"monthExample\">\n   <file name=\"index.html\">\n     <script>\n      angular.module('monthExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.value = new Date(2013, 9, 1);\n        }]);\n     </script>\n     <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n       Pick a month int 2013:\n       <input id=\"exampleInput\" type=\"month\" name=\"input\" ng-model=\"value\"\n          placeholder=\"yyyy-MM\" min=\"2013-01\" max=\"2013-12\" required />\n       <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n          Required!</span>\n       <span class=\"error\" ng-show=\"myForm.input.$error.month\">\n          Not a valid month!</span>\n       <tt>value = {{value | date: \"yyyy-MM\"}}</tt><br/>\n       <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n       <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n       <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n       <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n     </form>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('value | date: \"yyyy-MM\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2013-10');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-01');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n   </file>\n   </example>\n   */\n  'month': createDateInputType('month', MONTH_REGEXP,\n     createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),\n     'yyyy-MM'),\n\n  /**\n   * @ngdoc input\n   * @name input[number]\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * The model must always be a number, otherwise Angular will throw an error.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match\n   *    a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object then this is used directly.\n   *    If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`\n   *    characters. For instance, `\"abc\"` will be converted to `new RegExp('^abc$')`.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"number-input-directive\" module=\"numberExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('numberExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.value = 12;\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           Number: <input type=\"number\" name=\"input\" ng-model=\"value\"\n                          min=\"0\" max=\"99\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n             Not valid number!</span>\n           <tt>value = {{value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var value = element(by.binding('value'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('value'));\n\n          it('should initialize to model', function() {\n            expect(value.getText()).toContain('12');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if over max', function() {\n            input.clear();\n            input.sendKeys('123');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[url]\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * <div class=\"alert alert-warning\">\n   * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex\n   * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify\n   * the built-in validators (see the {@link guide/forms Forms guide})\n   * </div>\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match\n   *    a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object then this is used directly.\n   *    If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`\n   *    characters. For instance, `\"abc\"` will be converted to `new RegExp('^abc$')`.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"url-input-directive\" module=\"urlExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('urlExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.text = 'http://google.com';\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           URL: <input type=\"url\" name=\"input\" ng-model=\"text\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n             Not valid url!</span>\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('http://google.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input.clear();\n            input.sendKeys('box');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[email]\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * <div class=\"alert alert-warning\">\n   * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex\n   * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can\n   * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})\n   * </div>\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match\n   *    a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object then this is used directly.\n   *    If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`\n   *    characters. For instance, `\"abc\"` will be converted to `new RegExp('^abc$')`.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"email-input-directive\" module=\"emailExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('emailExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.text = 'me@example.com';\n             }]);\n         </script>\n           <form name=\"myForm\" ng-controller=\"ExampleController\">\n             Email: <input type=\"email\" name=\"input\" ng-model=\"text\" required>\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n               Not valid email!</span>\n             <tt>text = {{text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n         </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('me@example.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input.clear();\n            input.sendKeys('xxx');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[radio]\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the expression should be set when selected.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {string} ngValue Angular expression which sets the value to which the expression should\n   *    be set when selected.\n   *\n   * @example\n      <example name=\"radio-input-directive\" module=\"radioExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('radioExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.color = 'blue';\n               $scope.specialValue = {\n                 \"id\": \"12345\",\n                 \"value\": \"green\"\n               };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <input type=\"radio\" ng-model=\"color\" value=\"red\">  Red <br/>\n           <input type=\"radio\" ng-model=\"color\" ng-value=\"specialValue\"> Green <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"blue\"> Blue <br/>\n           <tt>color = {{color | json}}</tt><br/>\n          </form>\n          Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var color = element(by.binding('color'));\n\n            expect(color.getText()).toContain('blue');\n\n            element.all(by.model('color')).get(0).click();\n\n            expect(color.getText()).toContain('red');\n          });\n        </file>\n      </example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[checkbox]\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {expression=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"checkbox-input-directive\" module=\"checkboxExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('checkboxExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.value1 = true;\n               $scope.value2 = 'YES'\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           Value1: <input type=\"checkbox\" ng-model=\"value1\"> <br/>\n           Value2: <input type=\"checkbox\" ng-model=\"value2\"\n                          ng-true-value=\"'YES'\" ng-false-value=\"'NO'\"> <br/>\n           <tt>value1 = {{value1}}</tt><br/>\n           <tt>value2 = {{value2}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var value1 = element(by.binding('value1'));\n            var value2 = element(by.binding('value2'));\n\n            expect(value1.getText()).toContain('true');\n            expect(value2.getText()).toContain('YES');\n\n            element(by.model('value1')).click();\n            element(by.model('value2')).click();\n\n            expect(value1.getText()).toContain('false');\n            expect(value2.getText()).toContain('NO');\n          });\n        </file>\n      </example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop,\n  'file': noop\n};\n\nfunction stringBasedInputType(ctrl) {\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? value : value.toString();\n  });\n}\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n}\n\nfunction baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  var placeholder = element[0].placeholder, noevent = {};\n  var type = lowercase(element[0].type);\n\n  // In composition mode, users are still inputing intermediate text buffer,\n  // hold the listener until composition is done.\n  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n  if (!$sniffer.android) {\n    var composing = false;\n\n    element.on('compositionstart', function(data) {\n      composing = true;\n    });\n\n    element.on('compositionend', function() {\n      composing = false;\n      listener();\n    });\n  }\n\n  var listener = function(ev) {\n    if (composing) return;\n    var value = element.val(),\n        event = ev && ev.type;\n\n    // IE (11 and under) seem to emit an 'input' event if the placeholder value changes.\n    // We don't want to dirty the value when this happens, so we abort here. Unfortunately,\n    // IE also sends input events for other non-input-related things, (such as focusing on a\n    // form control), so this change is not entirely enough to solve this.\n    if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) {\n      placeholder = element[0].placeholder;\n      return;\n    }\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // If input type is 'password', the value is never trimmed\n    if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {\n      value = trim(value);\n    }\n\n    // If a control is suffering from bad input (due to native validators), browsers discard its\n    // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the\n    // control's value is the same empty value twice in a row.\n    if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {\n      ctrl.$setViewValue(value, event);\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var timeout;\n\n    var deferListener = function(ev) {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          listener(ev);\n          timeout = null;\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener(event);\n    });\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n  // if user paste into input using mouse on older browser\n  // or form autocomplete on newer browser, we need \"change\" event to catch it\n  element.on('change', listener);\n\n  ctrl.$render = function() {\n    element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);\n  };\n}\n\nfunction weekParser(isoWeek, existingDate) {\n  if (isDate(isoWeek)) {\n    return isoWeek;\n  }\n\n  if (isString(isoWeek)) {\n    WEEK_REGEXP.lastIndex = 0;\n    var parts = WEEK_REGEXP.exec(isoWeek);\n    if (parts) {\n      var year = +parts[1],\n          week = +parts[2],\n          hours = 0,\n          minutes = 0,\n          seconds = 0,\n          milliseconds = 0,\n          firstThurs = getFirstThursdayOfYear(year),\n          addDays = (week - 1) * 7;\n\n      if (existingDate) {\n        hours = existingDate.getHours();\n        minutes = existingDate.getMinutes();\n        seconds = existingDate.getSeconds();\n        milliseconds = existingDate.getMilliseconds();\n      }\n\n      return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);\n    }\n  }\n\n  return NaN;\n}\n\nfunction createDateParser(regexp, mapping) {\n  return function(iso, date) {\n    var parts, map;\n\n    if (isDate(iso)) {\n      return iso;\n    }\n\n    if (isString(iso)) {\n      // When a date is JSON'ified to wraps itself inside of an extra\n      // set of double quotes. This makes the date parsing code unable\n      // to match the date string and parse it as a date.\n      if (iso.charAt(0) == '\"' && iso.charAt(iso.length - 1) == '\"') {\n        iso = iso.substring(1, iso.length - 1);\n      }\n      if (ISO_DATE_REGEXP.test(iso)) {\n        return new Date(iso);\n      }\n      regexp.lastIndex = 0;\n      parts = regexp.exec(iso);\n\n      if (parts) {\n        parts.shift();\n        if (date) {\n          map = {\n            yyyy: date.getFullYear(),\n            MM: date.getMonth() + 1,\n            dd: date.getDate(),\n            HH: date.getHours(),\n            mm: date.getMinutes(),\n            ss: date.getSeconds(),\n            sss: date.getMilliseconds() / 1000\n          };\n        } else {\n          map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };\n        }\n\n        forEach(parts, function(part, index) {\n          if (index < mapping.length) {\n            map[mapping[index]] = +part;\n          }\n        });\n        return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);\n      }\n    }\n\n    return NaN;\n  };\n}\n\nfunction createDateInputType(type, regexp, parseDate, format) {\n  return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {\n    badInputChecker(scope, element, attr, ctrl);\n    baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n    var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;\n    var previousDate;\n\n    ctrl.$$parserName = type;\n    ctrl.$parsers.push(function(value) {\n      if (ctrl.$isEmpty(value)) return null;\n      if (regexp.test(value)) {\n        // Note: We cannot read ctrl.$modelValue, as there might be a different\n        // parser/formatter in the processing chain so that the model\n        // contains some different data format!\n        var parsedDate = parseDate(value, previousDate);\n        if (timezone === 'UTC') {\n          parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset());\n        }\n        return parsedDate;\n      }\n      return undefined;\n    });\n\n    ctrl.$formatters.push(function(value) {\n      if (value && !isDate(value)) {\n        throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);\n      }\n      if (isValidDate(value)) {\n        previousDate = value;\n        if (previousDate && timezone === 'UTC') {\n          var timezoneOffset = 60000 * previousDate.getTimezoneOffset();\n          previousDate = new Date(previousDate.getTime() + timezoneOffset);\n        }\n        return $filter('date')(value, format, timezone);\n      } else {\n        previousDate = null;\n        return '';\n      }\n    });\n\n    if (isDefined(attr.min) || attr.ngMin) {\n      var minVal;\n      ctrl.$validators.min = function(value) {\n        return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;\n      };\n      attr.$observe('min', function(val) {\n        minVal = parseObservedDateValue(val);\n        ctrl.$validate();\n      });\n    }\n\n    if (isDefined(attr.max) || attr.ngMax) {\n      var maxVal;\n      ctrl.$validators.max = function(value) {\n        return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;\n      };\n      attr.$observe('max', function(val) {\n        maxVal = parseObservedDateValue(val);\n        ctrl.$validate();\n      });\n    }\n\n    function isValidDate(value) {\n      // Invalid Date: getTime() returns NaN\n      return value && !(value.getTime && value.getTime() !== value.getTime());\n    }\n\n    function parseObservedDateValue(val) {\n      return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;\n    }\n  };\n}\n\nfunction badInputChecker(scope, element, attr, ctrl) {\n  var node = element[0];\n  var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);\n  if (nativeValidation) {\n    ctrl.$parsers.push(function(value) {\n      var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};\n      // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):\n      // - also sets validity.badInput (should only be validity.typeMismatch).\n      // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)\n      // - can ignore this case as we can still read out the erroneous email...\n      return validity.badInput && !validity.typeMismatch ? undefined : value;\n    });\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  badInputChecker(scope, element, attr, ctrl);\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$$parserName = 'number';\n  ctrl.$parsers.push(function(value) {\n    if (ctrl.$isEmpty(value))      return null;\n    if (NUMBER_REGEXP.test(value)) return parseFloat(value);\n    return undefined;\n  });\n\n  ctrl.$formatters.push(function(value) {\n    if (!ctrl.$isEmpty(value)) {\n      if (!isNumber(value)) {\n        throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);\n      }\n      value = value.toString();\n    }\n    return value;\n  });\n\n  if (attr.min || attr.ngMin) {\n    var minVal;\n    ctrl.$validators.min = function(value) {\n      return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;\n    };\n\n    attr.$observe('min', function(val) {\n      if (isDefined(val) && !isNumber(val)) {\n        val = parseFloat(val, 10);\n      }\n      minVal = isNumber(val) && !isNaN(val) ? val : undefined;\n      // TODO(matsko): implement validateLater to reduce number of validations\n      ctrl.$validate();\n    });\n  }\n\n  if (attr.max || attr.ngMax) {\n    var maxVal;\n    ctrl.$validators.max = function(value) {\n      return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;\n    };\n\n    attr.$observe('max', function(val) {\n      if (isDefined(val) && !isNumber(val)) {\n        val = parseFloat(val, 10);\n      }\n      maxVal = isNumber(val) && !isNaN(val) ? val : undefined;\n      // TODO(matsko): implement validateLater to reduce number of validations\n      ctrl.$validate();\n    });\n  }\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  // Note: no badInputChecker here by purpose as `url` is only a validation\n  // in browsers, i.e. we can always read out input.value even if it is not valid!\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n\n  ctrl.$$parserName = 'url';\n  ctrl.$validators.url = function(modelValue, viewValue) {\n    var value = modelValue || viewValue;\n    return ctrl.$isEmpty(value) || URL_REGEXP.test(value);\n  };\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  // Note: no badInputChecker here by purpose as `url` is only a validation\n  // in browsers, i.e. we can always read out input.value even if it is not valid!\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n\n  ctrl.$$parserName = 'email';\n  ctrl.$validators.email = function(modelValue, viewValue) {\n    var value = modelValue || viewValue;\n    return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);\n  };\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  var listener = function(ev) {\n    if (element[0].checked) {\n      ctrl.$setViewValue(attr.value, ev && ev.type);\n    }\n  };\n\n  element.on('click', listener);\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction parseConstantExpr($parse, context, name, expression, fallback) {\n  var parseFn;\n  if (isDefined(expression)) {\n    parseFn = $parse(expression);\n    if (!parseFn.constant) {\n      throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' +\n                                   '`{1}`.', name, expression);\n    }\n    return parseFn(context);\n  }\n  return fallback;\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {\n  var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);\n  var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);\n\n  var listener = function(ev) {\n    ctrl.$setViewValue(element[0].checked, ev && ev.type);\n  };\n\n  element.on('click', listener);\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`\n  // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert\n  // it to a boolean.\n  ctrl.$isEmpty = function(value) {\n    return value === false;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return equals(value, trueValue);\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n *    length.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n */\n\n\n/**\n * @ngdoc directive\n * @name input\n * @restrict E\n *\n * @description\n * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,\n * input state control, and validation.\n * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Not every feature offered is available for all input types.\n * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.\n * </div>\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n *    length.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n *    This parameter is ignored for input[type=password] controls, which will never trim the\n *    input.\n *\n * @example\n    <example name=\"input-directive\" module=\"inputExample\">\n      <file name=\"index.html\">\n       <script>\n          angular.module('inputExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.user = {name: 'guest', last: 'visitor'};\n            }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <form name=\"myForm\">\n           User name: <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n             Required!</span><br>\n           Last name: <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n             ng-minlength=\"3\" ng-maxlength=\"10\">\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n             Too short!</span>\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n             Too long!</span><br>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>\n       </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var user = element(by.exactBinding('user'));\n        var userNameValid = element(by.binding('myForm.userName.$valid'));\n        var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n        var lastNameError = element(by.binding('myForm.lastName.$error'));\n        var formValid = element(by.binding('myForm.$valid'));\n        var userNameInput = element(by.model('user.name'));\n        var userLastInput = element(by.model('user.last'));\n\n        it('should initialize to model', function() {\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          userNameInput.clear();\n          userNameInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('false');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(lastNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('xx');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('minlength');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('some ridiculously long name');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('maxlength');\n          expect(formValid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n */\nvar inputDirective = ['$browser', '$sniffer', '$filter', '$parse',\n    function($browser, $sniffer, $filter, $parse) {\n  return {\n    restrict: 'E',\n    require: ['?ngModel'],\n    link: {\n      pre: function(scope, element, attr, ctrls) {\n        if (ctrls[0]) {\n          (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,\n                                                              $browser, $filter, $parse);\n        }\n      }\n    }\n  };\n}];\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty',\n    UNTOUCHED_CLASS = 'ng-untouched',\n    TOUCHED_CLASS = 'ng-touched',\n    PENDING_CLASS = 'ng-pending';\n\n/**\n * @ngdoc type\n * @name ngModel.NgModelController\n *\n * @property {string} $viewValue Actual string value in the view.\n * @property {*} $modelValue The value in the model that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM. The functions are called in array order, each passing\n       its return value through to the next. The last return value is forwarded to the\n       {@link ngModel.NgModelController#$validators `$validators`} collection.\n\nParsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue\n`$viewValue`}.\n\nReturning `undefined` from a parser means a parse error occurred. In that case,\nno {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`\nwill be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}\nis set to `true`. The parse error is stored in `ngModel.$error.parse`.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. The functions are called in reverse array order, each passing the value through to the\n       next. The last return value is used as the actual DOM value.\n       Used to format / convert values for display in the control.\n * ```js\n * function formatter(value) {\n *   if (value) {\n *     return value.toUpperCase();\n *   }\n * }\n * ngModel.$formatters.push(formatter);\n * ```\n *\n * @property {Object.<string, function>} $validators A collection of validators that are applied\n *      whenever the model value changes. The key value within the object refers to the name of the\n *      validator while the function refers to the validation operation. The validation operation is\n *      provided with the model value as an argument and must return a true or false value depending\n *      on the response of that validation.\n *\n * ```js\n * ngModel.$validators.validCharacters = function(modelValue, viewValue) {\n *   var value = modelValue || viewValue;\n *   return /[0-9]+/.test(value) &&\n *          /[a-z]+/.test(value) &&\n *          /[A-Z]+/.test(value) &&\n *          /\\W+/.test(value);\n * };\n * ```\n *\n * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to\n *      perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided\n *      is expected to return a promise when it is run during the model validation process. Once the promise\n *      is delivered then the validation status will be set to true when fulfilled and false when rejected.\n *      When the asynchronous validators are triggered, each of the validators will run in parallel and the model\n *      value will only be updated once all validators have been fulfilled. As long as an asynchronous validator\n *      is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators\n *      will only run once all synchronous validators have passed.\n *\n * Please note that if $http is used then it is important that the server returns a success HTTP response code\n * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.\n *\n * ```js\n * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {\n *   var value = modelValue || viewValue;\n *\n *   // Lookup user by username\n *   return $http.get('/api/users/' + value).\n *      then(function resolved() {\n *        //username exists, this means validation fails\n *        return $q.reject('exists');\n *      }, function rejected() {\n *        //username does not exist, therefore this validation passes\n *        return true;\n *      });\n * };\n * ```\n *\n * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the\n *     view value has changed. It is called with no arguments, and its return value is ignored.\n *     This can be used in place of additional $watches against the model value.\n *\n * @property {Object} $error An object hash with all failing validator ids as keys.\n * @property {Object} $pending An object hash with all pending validator ids as keys.\n *\n * @property {boolean} $untouched True if control has not lost focus yet.\n * @property {boolean} $touched True if control has lost focus.\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n * @property {string} $name The name attribute of the control.\n *\n * @description\n *\n * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.\n * The controller contains services for data-binding, validation, CSS updates, and value formatting\n * and parsing. It purposefully does not contain any logic which deals with DOM rendering or\n * listening to DOM events.\n * Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding to control elements.\n * Angular provides this DOM logic for most {@link input `input`} elements.\n * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example\n * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.\n *\n * @example\n * ### Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.  This will not work on older browsers.\n *\n * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}\n * module to automatically remove \"bad\" content like inline event listener (e.g. `<span onclick=\"...\">`).\n * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks\n * that content using the `$sce` service.\n *\n * <example name=\"NgModelController\" module=\"customControl\" deps=\"angular-sanitize.js\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', ['ngSanitize']).\n        directive('contenteditable', ['$sce', function($sce) {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if (!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$evalAsync(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if ( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        }]);\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\"></textarea>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n    it('should data-bind and become invalid', function() {\n      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {\n        // SafariDriver can't handle contenteditable\n        // and Firefox driver can't clear contenteditables very well\n        return;\n      }\n      var contentEditable = element(by.css('[contenteditable]'));\n      var content = 'Change me!';\n\n      expect(contentEditable.getText()).toEqual(content);\n\n      contentEditable.clear();\n      contentEditable.sendKeys(protractor.Key.BACK_SPACE);\n      expect(contentEditable.getText()).toEqual('');\n      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);\n    });\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',\n    function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.\n  this.$validators = {};\n  this.$asyncValidators = {};\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$untouched = true;\n  this.$touched = false;\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$error = {}; // keep invalid keys here\n  this.$$success = {}; // keep valid keys here\n  this.$pending = undefined; // keep pending keys here\n  this.$name = $interpolate($attr.name || '', false)($scope);\n\n\n  var parsedNgModel = $parse($attr.ngModel),\n      parsedNgModelAssign = parsedNgModel.assign,\n      ngModelGet = parsedNgModel,\n      ngModelSet = parsedNgModelAssign,\n      pendingDebounce = null,\n      ctrl = this;\n\n  this.$$setOptions = function(options) {\n    ctrl.$options = options;\n    if (options && options.getterSetter) {\n      var invokeModelGetter = $parse($attr.ngModel + '()'),\n          invokeModelSetter = $parse($attr.ngModel + '($$$p)');\n\n      ngModelGet = function($scope) {\n        var modelValue = parsedNgModel($scope);\n        if (isFunction(modelValue)) {\n          modelValue = invokeModelGetter($scope);\n        }\n        return modelValue;\n      };\n      ngModelSet = function($scope, newValue) {\n        if (isFunction(parsedNgModel($scope))) {\n          invokeModelSetter($scope, {$$$p: ctrl.$modelValue});\n        } else {\n          parsedNgModelAssign($scope, ctrl.$modelValue);\n        }\n      };\n    } else if (!parsedNgModel.assign) {\n      throw $ngModelMinErr('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n          $attr.ngModel, startingTag($element));\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$render\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   *\n   * The `$render()` method is invoked in the following situations:\n   *\n   * * `$rollbackViewValue()` is called.  If we are rolling back the view value to the last\n   *   committed value then `$render()` is called to update the input control.\n   * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and\n   *   the `$viewValue` are different to last time.\n   *\n   * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of\n   * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue`\n   * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be\n   * invoked if you only change a property on the objects.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$isEmpty\n   *\n   * @description\n   * This is called when we need to determine if the value of an input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   *\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different to the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   *\n   * @param {*} value The value of the input to check for emptiness.\n   * @returns {boolean} True if `value` is \"empty\".\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  var parentForm = $element.inheritedData('$formController') || nullFormCtrl,\n      currentValidationRunId = 0;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setValidity\n   *\n   * @description\n   * Change the validity state, and notify the form.\n   *\n   * This method can be called within $parsers/$formatters or a custom validation implementation.\n   * However, in most cases it should be sufficient to use the `ngModel.$validators` and\n   * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.\n   *\n   * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned\n   *        to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`\n   *        (for unfulfilled `$asyncValidators`), so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),\n   *                          or skipped (null). Pending is used for unfulfilled `$asyncValidators`.\n   *                          Skipped is used by Angular when validators do not run because of parse errors and\n   *                          when `$asyncValidators` do not run because any of the `$validators` failed.\n   */\n  addSetValidityMethod({\n    ctrl: this,\n    $element: $element,\n    set: function(object, property) {\n      object[property] = true;\n    },\n    unset: function(object, property) {\n      delete object[property];\n    },\n    parentForm: parentForm,\n    $animate: $animate\n  });\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setPristine\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the `ng-dirty` class and set the control to its pristine\n   * state (`ng-pristine` class). A model is considered to be pristine when the control\n   * has not been changed from when first compiled.\n   */\n  this.$setPristine = function() {\n    ctrl.$dirty = false;\n    ctrl.$pristine = true;\n    $animate.removeClass($element, DIRTY_CLASS);\n    $animate.addClass($element, PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setDirty\n   *\n   * @description\n   * Sets the control to its dirty state.\n   *\n   * This method can be called to remove the `ng-pristine` class and set the control to its dirty\n   * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed\n   * from when first compiled.\n   */\n  this.$setDirty = function() {\n    ctrl.$dirty = true;\n    ctrl.$pristine = false;\n    $animate.removeClass($element, PRISTINE_CLASS);\n    $animate.addClass($element, DIRTY_CLASS);\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setUntouched\n   *\n   * @description\n   * Sets the control to its untouched state.\n   *\n   * This method can be called to remove the `ng-touched` class and set the control to its\n   * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched\n   * by default, however this function can be used to restore that state if the model has\n   * already been touched by the user.\n   */\n  this.$setUntouched = function() {\n    ctrl.$touched = false;\n    ctrl.$untouched = true;\n    $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setTouched\n   *\n   * @description\n   * Sets the control to its touched state.\n   *\n   * This method can be called to remove the `ng-untouched` class and set the control to its\n   * touched state (`ng-touched` class). A model is considered to be touched when the user has\n   * first focused the control element and then shifted focus away from the control (blur event).\n   */\n  this.$setTouched = function() {\n    ctrl.$touched = true;\n    ctrl.$untouched = false;\n    $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$rollbackViewValue\n   *\n   * @description\n   * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,\n   * which may be caused by a pending debounced event or because the input is waiting for a some\n   * future event.\n   *\n   * If you have an input that uses `ng-model-options` to set up debounced events or events such\n   * as blur you can have a situation where there is a period when the `$viewValue`\n   * is out of synch with the ngModel's `$modelValue`.\n   *\n   * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`\n   * programmatically before these debounced/future events have resolved/occurred, because Angular's\n   * dirty checking mechanism is not able to tell whether the model has actually changed or not.\n   *\n   * The `$rollbackViewValue()` method should be called before programmatically changing the model of an\n   * input which may have such events pending. This is important in order to make sure that the\n   * input field will be updated with the new model value and any pending operations are cancelled.\n   *\n   * <example name=\"ng-model-cancel-update\" module=\"cancel-update-example\">\n   *   <file name=\"app.js\">\n   *     angular.module('cancel-update-example', [])\n   *\n   *     .controller('CancelUpdateController', ['$scope', function($scope) {\n   *       $scope.resetWithCancel = function(e) {\n   *         if (e.keyCode == 27) {\n   *           $scope.myForm.myInput1.$rollbackViewValue();\n   *           $scope.myValue = '';\n   *         }\n   *       };\n   *       $scope.resetWithoutCancel = function(e) {\n   *         if (e.keyCode == 27) {\n   *           $scope.myValue = '';\n   *         }\n   *       };\n   *     }]);\n   *   </file>\n   *   <file name=\"index.html\">\n   *     <div ng-controller=\"CancelUpdateController\">\n   *       <p>Try typing something in each input.  See that the model only updates when you\n   *          blur off the input.\n   *        </p>\n   *        <p>Now see what happens if you start typing then press the Escape key</p>\n   *\n   *       <form name=\"myForm\" ng-model-options=\"{ updateOn: 'blur' }\">\n   *         <p>With $rollbackViewValue()</p>\n   *         <input name=\"myInput1\" ng-model=\"myValue\" ng-keydown=\"resetWithCancel($event)\"><br/>\n   *         myValue: \"{{ myValue }}\"\n   *\n   *         <p>Without $rollbackViewValue()</p>\n   *         <input name=\"myInput2\" ng-model=\"myValue\" ng-keydown=\"resetWithoutCancel($event)\"><br/>\n   *         myValue: \"{{ myValue }}\"\n   *       </form>\n   *     </div>\n   *   </file>\n   * </example>\n   */\n  this.$rollbackViewValue = function() {\n    $timeout.cancel(pendingDebounce);\n    ctrl.$viewValue = ctrl.$$lastCommittedViewValue;\n    ctrl.$render();\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$validate\n   *\n   * @description\n   * Runs each of the registered validators (first synchronous validators and then\n   * asynchronous validators).\n   * If the validity changes to invalid, the model will be set to `undefined`,\n   * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.\n   * If the validity changes to valid, it will set the model to the last available valid\n   * modelValue, i.e. either the last parsed value or the last value set from the scope.\n   */\n  this.$validate = function() {\n    // ignore $validate before model is initialized\n    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {\n      return;\n    }\n\n    var viewValue = ctrl.$$lastCommittedViewValue;\n    // Note: we use the $$rawModelValue as $modelValue might have been\n    // set to undefined during a view -> model update that found validation\n    // errors. We can't parse the view here, since that could change\n    // the model although neither viewValue nor the model on the scope changed\n    var modelValue = ctrl.$$rawModelValue;\n\n    // Check if the there's a parse error, so we don't unset it accidentially\n    var parserName = ctrl.$$parserName || 'parse';\n    var parserValid = ctrl.$error[parserName] ? false : undefined;\n\n    var prevValid = ctrl.$valid;\n    var prevModelValue = ctrl.$modelValue;\n\n    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;\n\n    ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {\n      // If there was no change in validity, don't update the model\n      // This prevents changing an invalid modelValue to undefined\n      if (!allowInvalid && prevValid !== allValid) {\n        // Note: Don't check ctrl.$valid here, as we could have\n        // external validators (e.g. calculated on the server),\n        // that just call $setValidity and need the model value\n        // to calculate their validity.\n        ctrl.$modelValue = allValid ? modelValue : undefined;\n\n        if (ctrl.$modelValue !== prevModelValue) {\n          ctrl.$$writeModelToScope();\n        }\n      }\n    });\n\n  };\n\n  this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {\n    currentValidationRunId++;\n    var localValidationRunId = currentValidationRunId;\n\n    // check parser error\n    if (!processParseErrors(parseValid)) {\n      validationDone(false);\n      return;\n    }\n    if (!processSyncValidators()) {\n      validationDone(false);\n      return;\n    }\n    processAsyncValidators();\n\n    function processParseErrors(parseValid) {\n      var errorKey = ctrl.$$parserName || 'parse';\n      if (parseValid === undefined) {\n        setValidity(errorKey, null);\n      } else {\n        setValidity(errorKey, parseValid);\n        if (!parseValid) {\n          forEach(ctrl.$validators, function(v, name) {\n            setValidity(name, null);\n          });\n          forEach(ctrl.$asyncValidators, function(v, name) {\n            setValidity(name, null);\n          });\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function processSyncValidators() {\n      var syncValidatorsValid = true;\n      forEach(ctrl.$validators, function(validator, name) {\n        var result = validator(modelValue, viewValue);\n        syncValidatorsValid = syncValidatorsValid && result;\n        setValidity(name, result);\n      });\n      if (!syncValidatorsValid) {\n        forEach(ctrl.$asyncValidators, function(v, name) {\n          setValidity(name, null);\n        });\n        return false;\n      }\n      return true;\n    }\n\n    function processAsyncValidators() {\n      var validatorPromises = [];\n      var allValid = true;\n      forEach(ctrl.$asyncValidators, function(validator, name) {\n        var promise = validator(modelValue, viewValue);\n        if (!isPromiseLike(promise)) {\n          throw $ngModelMinErr(\"$asyncValidators\",\n            \"Expected asynchronous validator to return a promise but got '{0}' instead.\", promise);\n        }\n        setValidity(name, undefined);\n        validatorPromises.push(promise.then(function() {\n          setValidity(name, true);\n        }, function(error) {\n          allValid = false;\n          setValidity(name, false);\n        }));\n      });\n      if (!validatorPromises.length) {\n        validationDone(true);\n      } else {\n        $q.all(validatorPromises).then(function() {\n          validationDone(allValid);\n        }, noop);\n      }\n    }\n\n    function setValidity(name, isValid) {\n      if (localValidationRunId === currentValidationRunId) {\n        ctrl.$setValidity(name, isValid);\n      }\n    }\n\n    function validationDone(allValid) {\n      if (localValidationRunId === currentValidationRunId) {\n\n        doneCallback(allValid);\n      }\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$commitViewValue\n   *\n   * @description\n   * Commit a pending update to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`\n   * usually handles calling this in response to input events.\n   */\n  this.$commitViewValue = function() {\n    var viewValue = ctrl.$viewValue;\n\n    $timeout.cancel(pendingDebounce);\n\n    // If the view value has not changed then we should just exit, except in the case where there is\n    // a native validator on the element. In this case the validation state may have changed even though\n    // the viewValue has stayed empty.\n    if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {\n      return;\n    }\n    ctrl.$$lastCommittedViewValue = viewValue;\n\n    // change to dirty\n    if (ctrl.$pristine) {\n      this.$setDirty();\n    }\n    this.$$parseAndValidate();\n  };\n\n  this.$$parseAndValidate = function() {\n    var viewValue = ctrl.$$lastCommittedViewValue;\n    var modelValue = viewValue;\n    var parserValid = isUndefined(modelValue) ? undefined : true;\n\n    if (parserValid) {\n      for (var i = 0; i < ctrl.$parsers.length; i++) {\n        modelValue = ctrl.$parsers[i](modelValue);\n        if (isUndefined(modelValue)) {\n          parserValid = false;\n          break;\n        }\n      }\n    }\n    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {\n      // ctrl.$modelValue has not been touched yet...\n      ctrl.$modelValue = ngModelGet($scope);\n    }\n    var prevModelValue = ctrl.$modelValue;\n    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;\n    ctrl.$$rawModelValue = modelValue;\n    if (allowInvalid) {\n      ctrl.$modelValue = modelValue;\n      writeToModelIfNeeded();\n    }\n    ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {\n      if (!allowInvalid) {\n        // Note: Don't check ctrl.$valid here, as we could have\n        // external validators (e.g. calculated on the server),\n        // that just call $setValidity and need the model value\n        // to calculate their validity.\n        ctrl.$modelValue = allValid ? modelValue : undefined;\n        writeToModelIfNeeded();\n      }\n    });\n\n    function writeToModelIfNeeded() {\n      if (ctrl.$modelValue !== prevModelValue) {\n        ctrl.$$writeModelToScope();\n      }\n    }\n  };\n\n  this.$$writeModelToScope = function() {\n    ngModelSet($scope, ctrl.$modelValue);\n    forEach(ctrl.$viewChangeListeners, function(listener) {\n      try {\n        listener();\n      } catch (e) {\n        $exceptionHandler(e);\n      }\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setViewValue\n   *\n   * @description\n   * Update the view value.\n   *\n   * This method should be called when an input directive want to change the view value; typically,\n   * this is done from within a DOM event handler.\n   *\n   * For example {@link ng.directive:input input} calls it when the value of the input changes and\n   * {@link ng.directive:select select} calls it when an option is selected.\n   *\n   * If the new `value` is an object (rather than a string or a number), we should make a copy of the\n   * object before passing it to `$setViewValue`.  This is because `ngModel` does not perform a deep\n   * watch of objects, it only looks for a change of identity. If you only change the property of\n   * the object then ngModel will not realise that the object has changed and will not invoke the\n   * `$parsers` and `$validators` pipelines.\n   *\n   * For this reason, you should not change properties of the copy once it has been passed to\n   * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly.\n   *\n   * When this method is called, the new `value` will be staged for committing through the `$parsers`\n   * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged\n   * value sent directly for processing, finally to be applied to `$modelValue` and then the\n   * **expression** specified in the `ng-model` attribute.\n   *\n   * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.\n   *\n   * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`\n   * and the `default` trigger is not listed, all those actions will remain pending until one of the\n   * `updateOn` events is triggered on the DOM element.\n   * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}\n   * directive is used with a custom debounce for this particular event.\n   *\n   * Note that calling this function does not trigger a `$digest`.\n   *\n   * @param {string} value Value from the view.\n   * @param {string} trigger Event that triggered the update.\n   */\n  this.$setViewValue = function(value, trigger) {\n    ctrl.$viewValue = value;\n    if (!ctrl.$options || ctrl.$options.updateOnDefault) {\n      ctrl.$$debounceViewValueCommit(trigger);\n    }\n  };\n\n  this.$$debounceViewValueCommit = function(trigger) {\n    var debounceDelay = 0,\n        options = ctrl.$options,\n        debounce;\n\n    if (options && isDefined(options.debounce)) {\n      debounce = options.debounce;\n      if (isNumber(debounce)) {\n        debounceDelay = debounce;\n      } else if (isNumber(debounce[trigger])) {\n        debounceDelay = debounce[trigger];\n      } else if (isNumber(debounce['default'])) {\n        debounceDelay = debounce['default'];\n      }\n    }\n\n    $timeout.cancel(pendingDebounce);\n    if (debounceDelay) {\n      pendingDebounce = $timeout(function() {\n        ctrl.$commitViewValue();\n      }, debounceDelay);\n    } else if ($rootScope.$$phase) {\n      ctrl.$commitViewValue();\n    } else {\n      $scope.$apply(function() {\n        ctrl.$commitViewValue();\n      });\n    }\n  };\n\n  // model -> value\n  // Note: we cannot use a normal scope.$watch as we want to detect the following:\n  // 1. scope value is 'a'\n  // 2. user enters 'b'\n  // 3. ng-change kicks in and reverts scope value to 'a'\n  //    -> scope value did not change since the last digest as\n  //       ng-change executes in apply phase\n  // 4. view should be changed back to 'a'\n  $scope.$watch(function ngModelWatch() {\n    var modelValue = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    // TODO(perf): why not move this to the action fn?\n    if (modelValue !== ctrl.$modelValue) {\n      ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      var viewValue = modelValue;\n      while (idx--) {\n        viewValue = formatters[idx](viewValue);\n      }\n      if (ctrl.$viewValue !== viewValue) {\n        ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;\n        ctrl.$render();\n\n        ctrl.$$runValidators(undefined, modelValue, viewValue, noop);\n      }\n    }\n\n    return modelValue;\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngModel\n *\n * @element input\n * @priority 1\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link input[text] text}\n *    - {@link input[checkbox] checkbox}\n *    - {@link input[radio] radio}\n *    - {@link input[number] number}\n *    - {@link input[email] email}\n *    - {@link input[url] url}\n *    - {@link input[date] date}\n *    - {@link input[datetime-local] datetime-local}\n *    - {@link input[time] time}\n *    - {@link input[month] month}\n *    - {@link input[week] week}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n * # CSS classes\n * The following CSS classes are added and removed on the associated input/select/textarea element\n * depending on the validity of the model.\n *\n *  - `ng-valid`: the model is valid\n *  - `ng-invalid`: the model is invalid\n *  - `ng-valid-[key]`: for each valid key added by `$setValidity`\n *  - `ng-invalid-[key]`: for each invalid key added by `$setValidity`\n *  - `ng-pristine`: the control hasn't been interacted with yet\n *  - `ng-dirty`: the control has been interacted with\n *  - `ng-touched`: the control has been blurred\n *  - `ng-untouched`: the control hasn't been blurred\n *  - `ng-pending`: any `$asyncValidators` are unfulfilled\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n * ## Animation Hooks\n *\n * Animations within models are triggered when any of the associated CSS classes are added and removed\n * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,\n * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.\n * The animations that are triggered within ngModel are similar to how they work in ngClass and\n * animations can be hooked into using CSS transitions, keyframes as well as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style an input element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-input {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-input.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n * <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\" module=\"inputExample\">\n     <file name=\"index.html\">\n       <script>\n        angular.module('inputExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.val = '1';\n          }]);\n       </script>\n       <style>\n         .my-input {\n           -webkit-transition:all linear 0.5s;\n           transition:all linear 0.5s;\n           background: transparent;\n         }\n         .my-input.ng-invalid {\n           color:white;\n           background: red;\n         }\n       </style>\n       Update input to see transitions when valid/invalid.\n       Integer is a valid value.\n       <form name=\"testForm\" ng-controller=\"ExampleController\">\n         <input ng-model=\"val\" ng-pattern=\"/^\\d+$/\" name=\"anim\" class=\"my-input\" />\n       </form>\n     </file>\n * </example>\n *\n * ## Binding to a getter/setter\n *\n * Sometimes it's helpful to bind `ngModel` to a getter/setter function.  A getter/setter is a\n * function that returns a representation of the model when called with zero arguments, and sets\n * the internal state of a model when called with an argument. It's sometimes useful to use this\n * for models that have an internal representation that's different than what the model exposes\n * to the view.\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more\n * frequently than other parts of your code.\n * </div>\n *\n * You use this behavior by adding `ng-model-options=\"{ getterSetter: true }\"` to an element that\n * has `ng-model` attached to it. You can also add `ng-model-options=\"{ getterSetter: true }\"` to\n * a `<form>`, which will enable this behavior for all `<input>`s within it. See\n * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.\n *\n * The following example shows how to use `ngModel` with a getter/setter:\n *\n * @example\n * <example name=\"ngModel-getter-setter\" module=\"getterSetterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <form name=\"userForm\">\n           Name:\n           <input type=\"text\" name=\"userName\"\n                  ng-model=\"user.name\"\n                  ng-model-options=\"{ getterSetter: true }\" />\n         </form>\n         <pre>user.name = <span ng-bind=\"user.name()\"></span></pre>\n       </div>\n     </file>\n     <file name=\"app.js\">\n       angular.module('getterSetterExample', [])\n         .controller('ExampleController', ['$scope', function($scope) {\n           var _name = 'Brian';\n           $scope.user = {\n             name: function(newName) {\n               if (angular.isDefined(newName)) {\n                 _name = newName;\n               }\n               return _name;\n             }\n           };\n         }]);\n     </file>\n * </example>\n */\nvar ngModelDirective = ['$rootScope', function($rootScope) {\n  return {\n    restrict: 'A',\n    require: ['ngModel', '^?form', '^?ngModelOptions'],\n    controller: NgModelController,\n    // Prelink needs to run before any input directive\n    // so that we can set the NgModelOptions in NgModelController\n    // before anyone else uses it.\n    priority: 1,\n    compile: function ngModelCompile(element) {\n      // Setup initial state of the control\n      element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);\n\n      return {\n        pre: function ngModelPreLink(scope, element, attr, ctrls) {\n          var modelCtrl = ctrls[0],\n              formCtrl = ctrls[1] || nullFormCtrl;\n\n          modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);\n\n          // notify others, especially parent forms\n          formCtrl.$addControl(modelCtrl);\n\n          attr.$observe('name', function(newValue) {\n            if (modelCtrl.$name !== newValue) {\n              formCtrl.$$renameControl(modelCtrl, newValue);\n            }\n          });\n\n          scope.$on('$destroy', function() {\n            formCtrl.$removeControl(modelCtrl);\n          });\n        },\n        post: function ngModelPostLink(scope, element, attr, ctrls) {\n          var modelCtrl = ctrls[0];\n          if (modelCtrl.$options && modelCtrl.$options.updateOn) {\n            element.on(modelCtrl.$options.updateOn, function(ev) {\n              modelCtrl.$$debounceViewValueCommit(ev && ev.type);\n            });\n          }\n\n          element.on('blur', function(ev) {\n            if (modelCtrl.$touched) return;\n\n            if ($rootScope.$$phase) {\n              scope.$evalAsync(modelCtrl.$setTouched);\n            } else {\n              scope.$apply(modelCtrl.$setTouched);\n            }\n          });\n        }\n      };\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngChange\n *\n * @description\n * Evaluate the given expression when the user changes the input.\n * The expression is evaluated immediately, unlike the JavaScript onchange event\n * which only triggers at the end of a change (usually, when the user leaves the\n * form element or presses the return key).\n *\n * The `ngChange` expression is only evaluated when a change in the input value causes\n * a new value to be committed to the model.\n *\n * It will not be evaluated:\n * * if the value returned from the `$parsers` transformation pipeline has not changed\n * * if the input has continued to be invalid since the model will stay `null`\n * * if the model is changed programmatically and not by a change to the input value\n *\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <example name=\"ngChange-directive\" module=\"changeExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('changeExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.counter = 0;\n *           $scope.change = function() {\n *             $scope.counter++;\n *           };\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       <tt>debug = {{confirmed}}</tt><br/>\n *       <tt>counter = {{counter}}</tt><br/>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var counter = element(by.binding('counter'));\n *     var debug = element(by.binding('confirmed'));\n *\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(counter.getText()).toContain('0');\n *\n *       element(by.id('ng-change-example1')).click();\n *\n *       expect(counter.getText()).toContain('1');\n *       expect(debug.getText()).toContain('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element(by.id('ng-change-example2')).click();\n\n *       expect(counter.getText()).toContain('0');\n *       expect(debug.getText()).toContain('true');\n *     });\n *   </file>\n * </example>\n */\nvar ngChangeDirective = valueFn({\n  restrict: 'A',\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\n\nvar requiredDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      ctrl.$validators.required = function(modelValue, viewValue) {\n        return !attr.required || !ctrl.$isEmpty(viewValue);\n      };\n\n      attr.$observe('required', function() {\n        ctrl.$validate();\n      });\n    }\n  };\n};\n\n\nvar patternDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var regexp, patternExp = attr.ngPattern || attr.pattern;\n      attr.$observe('pattern', function(regex) {\n        if (isString(regex) && regex.length > 0) {\n          regex = new RegExp('^' + regex + '$');\n        }\n\n        if (regex && !regex.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,\n            regex, startingTag(elm));\n        }\n\n        regexp = regex || undefined;\n        ctrl.$validate();\n      });\n\n      ctrl.$validators.pattern = function(value) {\n        return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value);\n      };\n    }\n  };\n};\n\n\nvar maxlengthDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var maxlength = -1;\n      attr.$observe('maxlength', function(value) {\n        var intVal = int(value);\n        maxlength = isNaN(intVal) ? -1 : intVal;\n        ctrl.$validate();\n      });\n      ctrl.$validators.maxlength = function(modelValue, viewValue) {\n        return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength);\n      };\n    }\n  };\n};\n\nvar minlengthDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var minlength = 0;\n      attr.$observe('minlength', function(value) {\n        minlength = int(value) || 0;\n        ctrl.$validate();\n      });\n      ctrl.$validators.minlength = function(modelValue, viewValue) {\n        return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;\n      };\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The default\n * delimiter is a comma followed by a space - equivalent to `ng-list=\", \"`. You can specify a custom\n * delimiter as the value of the `ngList` attribute - for example, `ng-list=\" | \"`.\n *\n * The behaviour of the directive is affected by the use of the `ngTrim` attribute.\n * * If `ngTrim` is set to `\"false\"` then whitespace around both the separator and each\n *   list item is respected. This implies that the user of the directive is responsible for\n *   dealing with whitespace but also allows you to use whitespace as a delimiter, such as a\n *   tab or newline character.\n * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected\n *   when joining the list items back together) and whitespace around each list item is stripped\n *   before it is added to the model.\n *\n * ### Example with Validation\n *\n * <example name=\"ngList-directive\" module=\"listExample\">\n *   <file name=\"app.js\">\n *      angular.module('listExample', [])\n *        .controller('ExampleController', ['$scope', function($scope) {\n *          $scope.names = ['morpheus', 'neo', 'trinity'];\n *        }]);\n *   </file>\n *   <file name=\"index.html\">\n *    <form name=\"myForm\" ng-controller=\"ExampleController\">\n *      List: <input name=\"namesInput\" ng-model=\"names\" ng-list required>\n *      <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n *        Required!</span>\n *      <br>\n *      <tt>names = {{names}}</tt><br/>\n *      <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n *      <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n *      <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n *      <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n *     </form>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var listInput = element(by.model('names'));\n *     var names = element(by.exactBinding('names'));\n *     var valid = element(by.binding('myForm.namesInput.$valid'));\n *     var error = element(by.css('span.error'));\n *\n *     it('should initialize to model', function() {\n *       expect(names.getText()).toContain('[\"morpheus\",\"neo\",\"trinity\"]');\n *       expect(valid.getText()).toContain('true');\n *       expect(error.getCssValue('display')).toBe('none');\n *     });\n *\n *     it('should be invalid if empty', function() {\n *       listInput.clear();\n *       listInput.sendKeys('');\n *\n *       expect(names.getText()).toContain('');\n *       expect(valid.getText()).toContain('false');\n *       expect(error.getCssValue('display')).not.toBe('none');\n *     });\n *   </file>\n * </example>\n *\n * ### Example - splitting on whitespace\n * <example name=\"ngList-directive-newlines\">\n *   <file name=\"index.html\">\n *    <textarea ng-model=\"list\" ng-list=\"&#10;\" ng-trim=\"false\"></textarea>\n *    <pre>{{ list | json }}</pre>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it(\"should split the text by newlines\", function() {\n *       var listInput = element(by.model('list'));\n *       var output = element(by.binding('list | json'));\n *       listInput.sendKeys('abc\\ndef\\nghi');\n *       expect(output.getText()).toContain('[\\n  \"abc\",\\n  \"def\",\\n  \"ghi\"\\n]');\n *     });\n *   </file>\n * </example>\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value.\n */\nvar ngListDirective = function() {\n  return {\n    restrict: 'A',\n    priority: 100,\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      // We want to control whitespace trimming so we use this convoluted approach\n      // to access the ngList attribute, which doesn't pre-trim the attribute\n      var ngList = element.attr(attr.$attr.ngList) || ', ';\n      var trimValues = attr.ngTrim !== 'false';\n      var separator = trimValues ? trim(ngList) : ngList;\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trimValues ? trim(value) : value);\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(ngList);\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ngValue\n *\n * @description\n * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},\n * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to\n * the bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using\n * {@link ngRepeat `ngRepeat`}, as shown below.\n *\n * Likewise, `ngValue` can be used to generate `<option>` elements for\n * the {@link select `select`} element. In that case however, only strings are supported\n * for the `value `attribute, so the resulting `ngModel` will always be a string.\n * Support for `select` models with non-string values is available via `ngOptions`.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <example name=\"ngValue-directive\" module=\"valueExample\">\n      <file name=\"index.html\">\n       <script>\n          angular.module('valueExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.names = ['pizza', 'unicorns', 'robots'];\n              $scope.my = { favorite: 'unicorns' };\n            }]);\n       </script>\n        <form ng-controller=\"ExampleController\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var favorite = element(by.binding('my.favorite'));\n\n        it('should initialize to model', function() {\n          expect(favorite.getText()).toContain('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          element.all(by.model('my.favorite')).get(0).click();\n          expect(favorite.getText()).toContain('pizza');\n        });\n      </file>\n    </example>\n */\nvar ngValueDirective = function() {\n  return {\n    restrict: 'A',\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngModelOptions\n *\n * @description\n * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of\n * events that will trigger a model update and/or a debouncing delay so that the actual update only\n * takes place when a timer expires; this timer will be reset after another change takes place.\n *\n * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might\n * be different than the value in the actual model. This means that if you update the model you\n * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in\n * order to make sure it is synchronized with the model and that any debounced action is canceled.\n *\n * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}\n * method is by making sure the input is placed inside a form that has a `name` attribute. This is\n * important because `form` controllers are published to the related scope under the name in their\n * `name` attribute.\n *\n * Any pending changes will take place immediately when an enclosing form is submitted via the\n * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`\n * to have access to the updated model.\n *\n * `ngModelOptions` has an effect on the element it's declared on and its descendants.\n *\n * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:\n *   - `updateOn`: string specifying which event should the input be bound to. You can set several\n *     events using an space delimited list. There is a special event called `default` that\n *     matches the default events belonging of the control.\n *   - `debounce`: integer value which contains the debounce model update value in milliseconds. A\n *     value of 0 triggers an immediate update. If an object is supplied instead, you can specify a\n *     custom value for each event. For example:\n *     `ng-model-options=\"{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }\"`\n *   - `allowInvalid`: boolean value which indicates that the model can be set with values that did\n *     not validate correctly instead of the default behavior of setting the model to undefined.\n *   - `getterSetter`: boolean value which determines whether or not to treat functions bound to\n       `ngModel` as getters/setters.\n *   - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for\n *     `<input type=\"date\">`, `<input type=\"time\">`, ... . Right now, the only supported value is `'UTC'`,\n *     otherwise the default timezone of the browser will be used.\n *\n * @example\n\n  The following example shows how to override immediate updates. Changes on the inputs within the\n  form will update the model only when the control loses focus (blur event). If `escape` key is\n  pressed while the input field is focused, the value is reset to the value in the current model.\n\n  <example name=\"ngModelOptions-directive-blur\" module=\"optionsExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          Name:\n          <input type=\"text\" name=\"userName\"\n                 ng-model=\"user.name\"\n                 ng-model-options=\"{ updateOn: 'blur' }\"\n                 ng-keyup=\"cancel($event)\" /><br />\n\n          Other data:\n          <input type=\"text\" ng-model=\"user.data\" /><br />\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('optionsExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.user = { name: 'say', data: '' };\n\n          $scope.cancel = function(e) {\n            if (e.keyCode == 27) {\n              $scope.userForm.userName.$rollbackViewValue();\n            }\n          };\n        }]);\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var model = element(by.binding('user.name'));\n      var input = element(by.model('user.name'));\n      var other = element(by.model('user.data'));\n\n      it('should allow custom events', function() {\n        input.sendKeys(' hello');\n        input.click();\n        expect(model.getText()).toEqual('say');\n        other.click();\n        expect(model.getText()).toEqual('say hello');\n      });\n\n      it('should $rollbackViewValue when model changes', function() {\n        input.sendKeys(' hello');\n        expect(input.getAttribute('value')).toEqual('say hello');\n        input.sendKeys(protractor.Key.ESCAPE);\n        expect(input.getAttribute('value')).toEqual('say');\n        other.click();\n        expect(model.getText()).toEqual('say');\n      });\n    </file>\n  </example>\n\n  This one shows how to debounce model changes. Model will be updated only 1 sec after last change.\n  If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.\n\n  <example name=\"ngModelOptions-directive-debounce\" module=\"optionsExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          Name:\n          <input type=\"text\" name=\"userName\"\n                 ng-model=\"user.name\"\n                 ng-model-options=\"{ debounce: 1000 }\" />\n          <button ng-click=\"userForm.userName.$rollbackViewValue(); user.name=''\">Clear</button><br />\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('optionsExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.user = { name: 'say' };\n        }]);\n    </file>\n  </example>\n\n  This one shows how to bind to getter/setters:\n\n  <example name=\"ngModelOptions-directive-getter-setter\" module=\"getterSetterExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          Name:\n          <input type=\"text\" name=\"userName\"\n                 ng-model=\"user.name\"\n                 ng-model-options=\"{ getterSetter: true }\" />\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name()\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('getterSetterExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          var _name = 'Brian';\n          $scope.user = {\n            name: function(newName) {\n              return angular.isDefined(newName) ? (_name = newName) : _name;\n            }\n          };\n        }]);\n    </file>\n  </example>\n */\nvar ngModelOptionsDirective = function() {\n  return {\n    restrict: 'A',\n    controller: ['$scope', '$attrs', function($scope, $attrs) {\n      var that = this;\n      this.$options = $scope.$eval($attrs.ngModelOptions);\n      // Allow adding/overriding bound events\n      if (this.$options.updateOn !== undefined) {\n        this.$options.updateOnDefault = false;\n        // extract \"default\" pseudo-event from list of events that can trigger a model update\n        this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {\n          that.$options.updateOnDefault = true;\n          return ' ';\n        }));\n      } else {\n        this.$options.updateOnDefault = true;\n      }\n    }]\n  };\n};\n\n// helper methods\nfunction addSetValidityMethod(context) {\n  var ctrl = context.ctrl,\n      $element = context.$element,\n      classCache = {},\n      set = context.set,\n      unset = context.unset,\n      parentForm = context.parentForm,\n      $animate = context.$animate;\n\n  classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));\n\n  ctrl.$setValidity = setValidity;\n\n  function setValidity(validationErrorKey, state, options) {\n    if (state === undefined) {\n      createAndSet('$pending', validationErrorKey, options);\n    } else {\n      unsetAndCleanup('$pending', validationErrorKey, options);\n    }\n    if (!isBoolean(state)) {\n      unset(ctrl.$error, validationErrorKey, options);\n      unset(ctrl.$$success, validationErrorKey, options);\n    } else {\n      if (state) {\n        unset(ctrl.$error, validationErrorKey, options);\n        set(ctrl.$$success, validationErrorKey, options);\n      } else {\n        set(ctrl.$error, validationErrorKey, options);\n        unset(ctrl.$$success, validationErrorKey, options);\n      }\n    }\n    if (ctrl.$pending) {\n      cachedToggleClass(PENDING_CLASS, true);\n      ctrl.$valid = ctrl.$invalid = undefined;\n      toggleValidationCss('', null);\n    } else {\n      cachedToggleClass(PENDING_CLASS, false);\n      ctrl.$valid = isObjectEmpty(ctrl.$error);\n      ctrl.$invalid = !ctrl.$valid;\n      toggleValidationCss('', ctrl.$valid);\n    }\n\n    // re-read the state as the set/unset methods could have\n    // combined state in ctrl.$error[validationError] (used for forms),\n    // where setting/unsetting only increments/decrements the value,\n    // and does not replace it.\n    var combinedState;\n    if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {\n      combinedState = undefined;\n    } else if (ctrl.$error[validationErrorKey]) {\n      combinedState = false;\n    } else if (ctrl.$$success[validationErrorKey]) {\n      combinedState = true;\n    } else {\n      combinedState = null;\n    }\n    toggleValidationCss(validationErrorKey, combinedState);\n    parentForm.$setValidity(validationErrorKey, combinedState, ctrl);\n  }\n\n  function createAndSet(name, value, options) {\n    if (!ctrl[name]) {\n      ctrl[name] = {};\n    }\n    set(ctrl[name], value, options);\n  }\n\n  function unsetAndCleanup(name, value, options) {\n    if (ctrl[name]) {\n      unset(ctrl[name], value, options);\n    }\n    if (isObjectEmpty(ctrl[name])) {\n      ctrl[name] = undefined;\n    }\n  }\n\n  function cachedToggleClass(className, switchValue) {\n    if (switchValue && !classCache[className]) {\n      $animate.addClass($element, className);\n      classCache[className] = true;\n    } else if (!switchValue && classCache[className]) {\n      $animate.removeClass($element, className);\n      classCache[className] = false;\n    }\n  }\n\n  function toggleValidationCss(validationErrorKey, isValid) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n\n    cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);\n    cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);\n  }\n}\n\nfunction isObjectEmpty(obj) {\n  if (obj) {\n    for (var prop in obj) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * @ngdoc directive\n * @name ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <example module=\"bindExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('bindExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.name = 'Whirled';\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         Enter name: <input type=\"text\" ng-model=\"name\"><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var nameInput = element(by.model('name'));\n\n         expect(element(by.binding('name')).getText()).toBe('Whirled');\n         nameInput.clear();\n         nameInput.sendKeys('world');\n         expect(element(by.binding('name')).getText()).toBe('world');\n       });\n     </file>\n   </example>\n */\nvar ngBindDirective = ['$compile', function($compile) {\n  return {\n    restrict: 'AC',\n    compile: function ngBindCompile(templateElement) {\n      $compile.$$addBindingClass(templateElement);\n      return function ngBindLink(scope, element, attr) {\n        $compile.$$addBindingInfo(element, attr.ngBind);\n        element = element[0];\n        scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n          element.textContent = value === undefined ? '' : value;\n        });\n      };\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <example module=\"bindExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('bindExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.salutation = 'Hello';\n             $scope.name = 'World';\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n        Salutation: <input type=\"text\" ng-model=\"salutation\"><br>\n        Name: <input type=\"text\" ng-model=\"name\"><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var salutationElem = element(by.binding('salutation'));\n         var salutationInput = element(by.model('salutation'));\n         var nameInput = element(by.model('name'));\n\n         expect(salutationElem.getText()).toBe('Hello World!');\n\n         salutationInput.clear();\n         salutationInput.sendKeys('Greetings');\n         nameInput.clear();\n         nameInput.sendKeys('user');\n\n         expect(salutationElem.getText()).toBe('Greetings user!');\n       });\n     </file>\n   </example>\n */\nvar ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {\n  return {\n    compile: function ngBindTemplateCompile(templateElement) {\n      $compile.$$addBindingClass(templateElement);\n      return function ngBindTemplateLink(scope, element, attr) {\n        var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n        $compile.$$addBindingInfo(element, interpolateFn.expressions);\n        element = element[0];\n        attr.$observe('ngBindTemplate', function(value) {\n          element.textContent = value === undefined ? '' : value;\n        });\n      };\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindHtml\n *\n * @description\n * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,\n * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.\n * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link\n * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}\n * in your module's dependencies, you need to include \"angular-sanitize.js\" in your application.\n *\n * You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n\n   <example module=\"bindHtmlExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n       angular.module('bindHtmlExample', ['ngSanitize'])\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.myHTML =\n              'I am an <code>HTML</code>string with ' +\n              '<a href=\"#\">links!</a> and other <em>stuff</em>';\n         }]);\n     </file>\n\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind-html', function() {\n         expect(element(by.binding('myHTML')).getText()).toBe(\n             'I am an HTMLstring with links! and other stuff');\n       });\n     </file>\n   </example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {\n  return {\n    restrict: 'A',\n    compile: function ngBindHtmlCompile(tElement, tAttrs) {\n      var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);\n      var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {\n        return (value || '').toString();\n      });\n      $compile.$$addBindingClass(tElement);\n\n      return function ngBindHtmlLink(scope, element, attr) {\n        $compile.$$addBindingInfo(element, attr.ngBindHtml);\n\n        scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {\n          // we re-evaluate the expr because we want a TrustedValueHolderType\n          // for $sce, not a string\n          element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');\n        });\n      };\n    }\n  };\n}];\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return ['$animate', function($animate) {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== (old$index & 1)) {\n              var classes = arrayClasses(scope.$eval(attr[name]));\n              mod === selector ?\n                addClasses(classes) :\n                removeClasses(classes);\n            }\n          });\n        }\n\n        function addClasses(classes) {\n          var newClasses = digestClassCounts(classes, 1);\n          attr.$addClass(newClasses);\n        }\n\n        function removeClasses(classes) {\n          var newClasses = digestClassCounts(classes, -1);\n          attr.$removeClass(newClasses);\n        }\n\n        function digestClassCounts(classes, count) {\n          var classCounts = element.data('$classCounts') || {};\n          var classesToUpdate = [];\n          forEach(classes, function(className) {\n            if (count > 0 || classCounts[className]) {\n              classCounts[className] = (classCounts[className] || 0) + count;\n              if (classCounts[className] === +(count > 0)) {\n                classesToUpdate.push(className);\n              }\n            }\n          });\n          element.data('$classCounts', classCounts);\n          return classesToUpdate.join(' ');\n        }\n\n        function updateClasses(oldClasses, newClasses) {\n          var toAdd = arrayDifference(newClasses, oldClasses);\n          var toRemove = arrayDifference(oldClasses, newClasses);\n          toAdd = digestClassCounts(toAdd, 1);\n          toRemove = digestClassCounts(toRemove, -1);\n          if (toAdd && toAdd.length) {\n            $animate.addClass(element, toAdd);\n          }\n          if (toRemove && toRemove.length) {\n            $animate.removeClass(element, toRemove);\n          }\n        }\n\n        function ngClassWatchAction(newVal) {\n          if (selector === true || scope.$index % 2 === selector) {\n            var newClasses = arrayClasses(newVal || []);\n            if (!oldVal) {\n              addClasses(newClasses);\n            } else if (!equals(newVal,oldVal)) {\n              var oldClasses = arrayClasses(oldVal);\n              updateClasses(oldClasses, newClasses);\n            }\n          }\n          oldVal = shallowCopy(newVal);\n        }\n      }\n    };\n\n    function arrayDifference(tokens1, tokens2) {\n      var values = [];\n\n      outer:\n      for (var i = 0; i < tokens1.length; i++) {\n        var token = tokens1[i];\n        for (var j = 0; j < tokens2.length; j++) {\n          if (token == tokens2[j]) continue outer;\n        }\n        values.push(token);\n      }\n      return values;\n    }\n\n    function arrayClasses(classVal) {\n      if (isArray(classVal)) {\n        return classVal;\n      } else if (isString(classVal)) {\n        return classVal.split(' ');\n      } else if (isObject(classVal)) {\n        var classes = [];\n        forEach(classVal, function(v, k) {\n          if (v) {\n            classes = classes.concat(k.split(' '));\n          }\n        });\n        return classes;\n      }\n      return classVal;\n    }\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive operates in three different ways, depending on which of three types the expression\n * evaluates to:\n *\n * 1. If the expression evaluates to a string, the string should be one or more space-delimited class\n * names.\n *\n * 2. If the expression evaluates to an array, each element of the array should be a string that is\n * one or more space-delimited class names.\n *\n * 3. If the expression evaluates to an object, then for each key-value pair of the\n * object with a truthy value the corresponding key is used as a class name.\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then the\n * new classes are added.\n *\n * @animations\n * add - happens just before the class is applied to the element\n * remove - happens just before the class is removed from the element\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: deleted, bold: important, red: error}\">Map Syntax Example</p>\n       <input type=\"checkbox\" ng-model=\"deleted\"> deleted (apply \"strike\" class)<br>\n       <input type=\"checkbox\" ng-model=\"important\"> important (apply \"bold\" class)<br>\n       <input type=\"checkbox\" ng-model=\"error\"> error (apply \"red\" class)\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\" placeholder=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style2\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style3\" placeholder=\"Type: bold, strike or red\"><br>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n         text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var ps = element.all(by.css('p'));\n\n       it('should let you toggle the class', function() {\n\n         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);\n         expect(ps.first().getAttribute('class')).not.toMatch(/red/);\n\n         element(by.model('important')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/bold/);\n\n         element(by.model('error')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/red/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(ps.get(1).getAttribute('class')).toBe('');\n         element(by.model('style')).clear();\n         element(by.model('style')).sendKeys('red');\n         expect(ps.get(1).getAttribute('class')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(ps.last().getAttribute('class')).toBe('');\n         element(by.model('style1')).sendKeys('bold');\n         element(by.model('style2')).sendKeys('strike');\n         element(by.model('style3')).sendKeys('red');\n         expect(ps.last().getAttribute('class')).toBe('bold strike red');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n      <input id=\"setbtn\" type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input id=\"clearbtn\" type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class', function() {\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n\n         element(by.id('setbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).\n           toMatch(/my-class/);\n\n         element(by.id('clearbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and\n   {@link ng.$animate#removeClass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```css\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * ```\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they\n * cannot match the `[ng\\:cloak]` selector. To work around this limitation, you must add the css\n * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.\n *\n * @element ANY\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" ng-cloak class=\"ng-cloak\">{{ 'hello IE7' }}</div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should remove the template directive and css class', function() {\n         expect($('#template1').getAttribute('ng-cloak')).\n           toBeNull();\n         expect($('#template2').getAttribute('ng-cloak')).\n           toBeNull();\n       });\n     </file>\n   </example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @priority 500\n * @param {expression} ngController Name of a constructor function registered with the current\n * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}\n * that on the current scope evaluates to a constructor function.\n *\n * The controller instance can be published into a scope property by specifying\n * `ng-controller=\"as propertyName\"`.\n *\n * If the current `$controllerProvider` is configured to use globals (via\n * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may\n * also be the name of a globally accessible constructor function (not recommended).\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Any changes to the data are automatically reflected\n * in the View without the need for a manual update.\n *\n * Two different declaration styles are included below:\n *\n * * one binds methods and properties directly onto the controller using `this`:\n * `ng-controller=\"SettingsController1 as settings\"`\n * * one injects `$scope` into the controller:\n * `ng-controller=\"SettingsController2\"`\n *\n * The second option is more common in the Angular community, and is generally used in boilerplates\n * and in this guide. However, there are advantages to binding properties directly to the controller\n * and avoiding scope.\n *\n * * Using `controller as` makes it obvious which controller you are accessing in the template when\n * multiple controllers apply to an element.\n * * If you are writing your controllers as classes you have easier access to the properties and\n * methods, which will appear on the scope, from inside the controller code.\n * * Since there is always a `.` in the bindings, you don't have to worry about prototypal\n * inheritance masking primitives.\n *\n * This example demonstrates the `controller as` syntax.\n *\n * <example name=\"ngControllerAs\" module=\"controllerAsExample\">\n *   <file name=\"index.html\">\n *    <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n *      Name: <input type=\"text\" ng-model=\"settings.name\"/>\n *      [ <a href=\"\" ng-click=\"settings.greet()\">greet</a> ]<br/>\n *      Contact:\n *      <ul>\n *        <li ng-repeat=\"contact in settings.contacts\">\n *          <select ng-model=\"contact.type\">\n *             <option>phone</option>\n *             <option>email</option>\n *          </select>\n *          <input type=\"text\" ng-model=\"contact.value\"/>\n *          [ <a href=\"\" ng-click=\"settings.clearContact(contact)\">clear</a>\n *          | <a href=\"\" ng-click=\"settings.removeContact(contact)\">X</a> ]\n *        </li>\n *        <li>[ <a href=\"\" ng-click=\"settings.addContact()\">add</a> ]</li>\n *     </ul>\n *    </div>\n *   </file>\n *   <file name=\"app.js\">\n *    angular.module('controllerAsExample', [])\n *      .controller('SettingsController1', SettingsController1);\n *\n *    function SettingsController1() {\n *      this.name = \"John Smith\";\n *      this.contacts = [\n *        {type: 'phone', value: '408 555 1212'},\n *        {type: 'email', value: 'john.smith@example.org'} ];\n *    }\n *\n *    SettingsController1.prototype.greet = function() {\n *      alert(this.name);\n *    };\n *\n *    SettingsController1.prototype.addContact = function() {\n *      this.contacts.push({type: 'email', value: 'yourname@example.org'});\n *    };\n *\n *    SettingsController1.prototype.removeContact = function(contactToRemove) {\n *     var index = this.contacts.indexOf(contactToRemove);\n *      this.contacts.splice(index, 1);\n *    };\n *\n *    SettingsController1.prototype.clearContact = function(contact) {\n *      contact.type = 'phone';\n *      contact.value = '';\n *    };\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it('should check controller as', function() {\n *       var container = element(by.id('ctrl-as-exmpl'));\n *         expect(container.element(by.model('settings.name'))\n *           .getAttribute('value')).toBe('John Smith');\n *\n *       var firstRepeat =\n *           container.element(by.repeater('contact in settings.contacts').row(0));\n *       var secondRepeat =\n *           container.element(by.repeater('contact in settings.contacts').row(1));\n *\n *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('408 555 1212');\n *\n *       expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('john.smith@example.org');\n *\n *       firstRepeat.element(by.linkText('clear')).click();\n *\n *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('');\n *\n *       container.element(by.linkText('add')).click();\n *\n *       expect(container.element(by.repeater('contact in settings.contacts').row(2))\n *           .element(by.model('contact.value'))\n *           .getAttribute('value'))\n *           .toBe('yourname@example.org');\n *     });\n *   </file>\n * </example>\n *\n * This example demonstrates the \"attach to `$scope`\" style of controller.\n *\n * <example name=\"ngController\" module=\"controllerExample\">\n *  <file name=\"index.html\">\n *   <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n *     Name: <input type=\"text\" ng-model=\"name\"/>\n *     [ <a href=\"\" ng-click=\"greet()\">greet</a> ]<br/>\n *     Contact:\n *     <ul>\n *       <li ng-repeat=\"contact in contacts\">\n *         <select ng-model=\"contact.type\">\n *            <option>phone</option>\n *            <option>email</option>\n *         </select>\n *         <input type=\"text\" ng-model=\"contact.value\"/>\n *         [ <a href=\"\" ng-click=\"clearContact(contact)\">clear</a>\n *         | <a href=\"\" ng-click=\"removeContact(contact)\">X</a> ]\n *       </li>\n *       <li>[ <a href=\"\" ng-click=\"addContact()\">add</a> ]</li>\n *    </ul>\n *   </div>\n *  </file>\n *  <file name=\"app.js\">\n *   angular.module('controllerExample', [])\n *     .controller('SettingsController2', ['$scope', SettingsController2]);\n *\n *   function SettingsController2($scope) {\n *     $scope.name = \"John Smith\";\n *     $scope.contacts = [\n *       {type:'phone', value:'408 555 1212'},\n *       {type:'email', value:'john.smith@example.org'} ];\n *\n *     $scope.greet = function() {\n *       alert($scope.name);\n *     };\n *\n *     $scope.addContact = function() {\n *       $scope.contacts.push({type:'email', value:'yourname@example.org'});\n *     };\n *\n *     $scope.removeContact = function(contactToRemove) {\n *       var index = $scope.contacts.indexOf(contactToRemove);\n *       $scope.contacts.splice(index, 1);\n *     };\n *\n *     $scope.clearContact = function(contact) {\n *       contact.type = 'phone';\n *       contact.value = '';\n *     };\n *   }\n *  </file>\n *  <file name=\"protractor.js\" type=\"protractor\">\n *    it('should check controller', function() {\n *      var container = element(by.id('ctrl-exmpl'));\n *\n *      expect(container.element(by.model('name'))\n *          .getAttribute('value')).toBe('John Smith');\n *\n *      var firstRepeat =\n *          container.element(by.repeater('contact in contacts').row(0));\n *      var secondRepeat =\n *          container.element(by.repeater('contact in contacts').row(1));\n *\n *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('408 555 1212');\n *      expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('john.smith@example.org');\n *\n *      firstRepeat.element(by.linkText('clear')).click();\n *\n *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('');\n *\n *      container.element(by.linkText('add')).click();\n *\n *      expect(container.element(by.repeater('contact in contacts').row(2))\n *          .element(by.model('contact.value'))\n *          .getAttribute('value'))\n *          .toBe('yourname@example.org');\n *    });\n *  </file>\n *</example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    restrict: 'A',\n    scope: true,\n    controller: '@',\n    priority: 500\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngCsp\n *\n * @element html\n * @description\n * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.\n *\n * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.\n *\n * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).\n * For Angular to be CSP compatible there are only two things that we need to do differently:\n *\n * - don't use `Function` constructor to generate optimized value getters\n * - don't inject custom stylesheet into the document\n *\n * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`\n * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will\n * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will\n * be raised.\n *\n * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically\n * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).\n * To make those directives work in CSP mode, include the `angular-csp.css` manually.\n *\n * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This\n * autodetection however triggers a CSP error to be logged in the console:\n *\n * ```\n * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of\n * script in the following Content Security Policy directive: \"default-src 'self'\". Note that\n * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.\n * ```\n *\n * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`\n * directive on the root element of the application or on the `angular.js` script tag, whichever\n * appears first in the html document.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   ```html\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   ```\n  * @example\n      // Note: the suffix `.csp` in the example name triggers\n      // csp mode in our http server!\n      <example name=\"example.csp\" module=\"cspExample\" ng-csp=\"true\">\n        <file name=\"index.html\">\n          <div ng-controller=\"MainController as ctrl\">\n            <div>\n              <button ng-click=\"ctrl.inc()\" id=\"inc\">Increment</button>\n              <span id=\"counter\">\n                {{ctrl.counter}}\n              </span>\n            </div>\n\n            <div>\n              <button ng-click=\"ctrl.evil()\" id=\"evil\">Evil</button>\n              <span id=\"evilError\">\n                {{ctrl.evilError}}\n              </span>\n            </div>\n          </div>\n        </file>\n        <file name=\"script.js\">\n           angular.module('cspExample', [])\n             .controller('MainController', function() {\n                this.counter = 0;\n                this.inc = function() {\n                  this.counter++;\n                };\n                this.evil = function() {\n                  // jshint evil:true\n                  try {\n                    eval('1+2');\n                  } catch (e) {\n                    this.evilError = e.message;\n                  }\n                };\n              });\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var util, webdriver;\n\n          var incBtn = element(by.id('inc'));\n          var counter = element(by.id('counter'));\n          var evilBtn = element(by.id('evil'));\n          var evilError = element(by.id('evilError'));\n\n          function getAndClearSevereErrors() {\n            return browser.manage().logs().get('browser').then(function(browserLog) {\n              return browserLog.filter(function(logEntry) {\n                return logEntry.level.value > webdriver.logging.Level.WARNING.value;\n              });\n            });\n          }\n\n          function clearErrors() {\n            getAndClearSevereErrors();\n          }\n\n          function expectNoErrors() {\n            getAndClearSevereErrors().then(function(filteredLog) {\n              expect(filteredLog.length).toEqual(0);\n              if (filteredLog.length) {\n                console.log('browser console errors: ' + util.inspect(filteredLog));\n              }\n            });\n          }\n\n          function expectError(regex) {\n            getAndClearSevereErrors().then(function(filteredLog) {\n              var found = false;\n              filteredLog.forEach(function(log) {\n                if (log.message.match(regex)) {\n                  found = true;\n                }\n              });\n              if (!found) {\n                throw new Error('expected an error that matches ' + regex);\n              }\n            });\n          }\n\n          beforeEach(function() {\n            util = require('util');\n            webdriver = require('protractor/node_modules/selenium-webdriver');\n          });\n\n          // For now, we only test on Chrome,\n          // as Safari does not load the page with Protractor's injected scripts,\n          // and Firefox webdriver always disables content security policy (#6358)\n          if (browser.params.browser !== 'chrome') {\n            return;\n          }\n\n          it('should not report errors when the page is loaded', function() {\n            // clear errors so we are not dependent on previous tests\n            clearErrors();\n            // Need to reload the page as the page is already loaded when\n            // we come here\n            browser.driver.getCurrentUrl().then(function(url) {\n              browser.get(url);\n            });\n            expectNoErrors();\n          });\n\n          it('should evaluate expressions', function() {\n            expect(counter.getText()).toEqual('0');\n            incBtn.click();\n            expect(counter.getText()).toEqual('1');\n            expectNoErrors();\n          });\n\n          it('should throw and report an error when using \"eval\"', function() {\n            evilBtn.click();\n            expect(evilError.getText()).toMatch(/Content Security Policy/);\n            expectError(/Content Security Policy/);\n          });\n        </file>\n      </example>\n  */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we\n// bootstrap the system (before $parse is instantiated), for this reason we just have\n// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      <span>\n        count: {{count}}\n      </span>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-click', function() {\n         expect(element(by.binding('count')).getText()).toMatch('0');\n         element(by.css('button')).click();\n         expect(element(by.binding('count')).getText()).toMatch('1');\n       });\n     </file>\n   </example>\n */\n/*\n * A collection of directives that allows creation of custom event handlers that are defined as\n * angular expressions and are compiled and executed within the current scope.\n */\nvar ngEventDirectives = {};\n\n// For events that might fire synchronously during DOM manipulation\n// we need to execute their event handlers asynchronously using $evalAsync,\n// so that they are not executed in an inconsistent state.\nvar forceAsyncEvents = {\n  'blur': true,\n  'focus': true\n};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(eventName) {\n    var directiveName = directiveNormalize('ng-' + eventName);\n    ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {\n      return {\n        restrict: 'A',\n        compile: function($element, attr) {\n          // We expose the powerful $event object on the scope that provides access to the Window,\n          // etc. that isn't protected by the fast paths in $parse.  We explicitly request better\n          // checks at the cost of speed since event handler expressions are not executed as\n          // frequently as regular change detection.\n          var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);\n          return function ngEventHandler(scope, element) {\n            element.on(eventName, function(event) {\n              var callback = function() {\n                fn(scope, {$event:event});\n              };\n              if (forceAsyncEvents[eventName] && $rootScope.$$phase) {\n                scope.$evalAsync(callback);\n              } else {\n                scope.$apply(callback);\n              }\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-dblclick=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on double click)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousedown=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse down)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseup=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse up)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseover=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse is over)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseenter=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse enters)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseleave=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse leaves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousemove=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse moves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keydown=\"count = count + 1\" ng-init=\"count=0\">\n      key down count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <p>Typing in the input box below updates the key count</p>\n       <input ng-keyup=\"count = count + 1\" ng-init=\"count=0\"> key up count: {{count}}\n\n       <p>Typing in the input box below updates the keycode</p>\n       <input ng-keyup=\"event=$event\">\n       <p>event keyCode: {{ event.keyCode }}</p>\n       <p>event altKey: {{ event.altKey }}</p>\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. ({@link guide/expression#-event- Event object is available as `$event`}\n * and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keypress=\"count = count + 1\" ng-init=\"count=0\">\n      key press count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page), but only if the form does not contain `action`,\n * `data-action`, or `x-action` attributes.\n *\n * <div class=\"alert alert-warning\">\n * **Warning:** Be careful not to cause \"double-submission\" by using both the `ngClick` and\n * `ngSubmit` handlers together. See the\n * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}\n * for a detailed discussion of when `ngSubmit` may be triggered.\n * </div>\n *\n * @element form\n * @priority 0\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval.\n * ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example module=\"submitExample\">\n     <file name=\"index.html\">\n      <script>\n        angular.module('submitExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.list = [];\n            $scope.text = 'hello';\n            $scope.submit = function() {\n              if ($scope.text) {\n                $scope.list.push(this.text);\n                $scope.text = '';\n              }\n            };\n          }]);\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"ExampleController\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-submit', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n         expect(element(by.model('text')).getAttribute('value')).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n        });\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * Note: As the `focus` event is executed synchronously when calling `input.focus()`\n * AngularJS executes the expression using `scope.$evalAsync` if the event is fired\n * during an `$apply` to ensure a consistent state.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when\n * an element has lost focus.\n *\n * Note: As the `blur` event is executed synchronously also during DOM manipulations\n * (e.g. removing a focussed input),\n * AngularJS executes the expression using `scope.$evalAsync` if the event is fired\n * during an `$apply` to ensure a consistent state.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-copy=\"copied=true\" ng-init=\"copied=false; value='copy me'\" ng-model=\"value\">\n      copied: {{copied}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-cut=\"cut=true\" ng-init=\"cut=false; value='cut me'\" ng-model=\"value\">\n      cut: {{cut}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-paste=\"paste=true\" ng-init=\"paste=false\" placeholder='paste here'>\n      pasted: {{paste}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngIf\n * @restrict A\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container\n * leave - happens just before the `ngIf` contents are removed from the DOM\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        This is removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', function($animate) {\n  return {\n    multiElement: true,\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    link: function($scope, $element, $attr, ctrl, $transclude) {\n        var block, childScope, previousElements;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (value) {\n            if (!childScope) {\n              $transclude(function(clone, newScope) {\n                childScope = newScope;\n                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block = {\n                  clone: clone\n                };\n                $animate.enter(clone, $element.parent(), $element);\n              });\n            }\n          } else {\n            if (previousElements) {\n              previousElements.remove();\n              previousElements = null;\n            }\n            if (childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n            if (block) {\n              previousElements = getBlockNodes(block.clone);\n              $animate.leave(previousElements).then(function() {\n                previousElements = null;\n              });\n              block = null;\n            }\n          }\n        });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link $sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or\n * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in **single** quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example module=\"includeExample\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"ExampleController\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <tt>{{template.url}}</tt>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('includeExample', ['ngAnimate'])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.templates =\n            [ { name: 'template1.html', url: 'template1.html'},\n              { name: 'template2.html', url: 'template2.html'} ];\n          $scope.template = $scope.templates[0];\n        }]);\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var templateSelect = element(by.model('template'));\n      var includeElem = element(by.css('[ng-include]'));\n\n      it('should load template1.html', function() {\n        expect(includeElem.getText()).toMatch(/Content of template1.html/);\n      });\n\n      it('should load template2.html', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          // See https://github.com/angular/protractor/issues/480\n          return;\n        }\n        templateSelect.click();\n        templateSelect.all(by.css('option')).get(2).click();\n        expect(includeElem.getText()).toMatch(/Content of template2.html/);\n      });\n\n      it('should change to blank', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          return;\n        }\n        templateSelect.click();\n        templateSelect.all(by.css('option')).get(0).click();\n        expect(includeElem.isPresent()).toBe(false);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentRequested\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentLoaded\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentError\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\nvar ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce',\n                  function($templateRequest,   $anchorScroll,   $animate,   $sce) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    controller: angular.noop,\n    compile: function(element, attr) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element, $attr, ctrl, $transclude) {\n        var changeCounter = 0,\n            currentScope,\n            previousElement,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if (previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if (currentElement) {\n            $animate.leave(currentElement).then(function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        };\n\n        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            //set the 2nd param to true to ignore the template request error so that the inner\n            //contents and scope can be cleaned up.\n            $templateRequest(src, true).then(function(response) {\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n              ctrl.template = response;\n\n              // Note: This will also link all children of ng-include that were contained in the original\n              // html. If that content contains controllers, ... they could pollute/change the scope.\n              // However, using ng-include on an element with additional content does not make sense...\n              // Note: We can't remove them in the cloneAttchFn of $transclude as that\n              // function is called before linking the content, which would apply child\n              // directives to non existing elements.\n              var clone = $transclude(newScope, function(clone) {\n                cleanupLastIncludeContent();\n                $animate.enter(clone, null, $element).then(afterAnimation);\n              });\n\n              currentScope = newScope;\n              currentElement = clone;\n\n              currentScope.$emit('$includeContentLoaded', src);\n              scope.$eval(onloadExp);\n            }, function() {\n              if (thisChangeId === changeCounter) {\n                cleanupLastIncludeContent();\n                scope.$emit('$includeContentError', src);\n              }\n            });\n            scope.$emit('$includeContentRequested', src);\n          } else {\n            cleanupLastIncludeContent();\n            ctrl.template = null;\n          }\n        });\n      };\n    }\n  };\n}];\n\n// This directive is called during the $transclude call of the first `ngInclude` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngInclude\n// is called.\nvar ngIncludeFillContentDirective = ['$compile',\n  function($compile) {\n    return {\n      restrict: 'ECA',\n      priority: -400,\n      require: 'ngInclude',\n      link: function(scope, $element, $attr, ctrl) {\n        if (/SVG/.test($element[0].toString())) {\n          // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not\n          // support innerHTML, so detect this here and try to generate the contents\n          // specially.\n          $element.empty();\n          $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,\n              function namespaceAdaptedClone(clone) {\n            $element.append(clone);\n          }, {futureParentElement: $element});\n          return;\n        }\n\n        $element.html(ctrl.template);\n        $compile($element.contents())(scope);\n      }\n    };\n  }];\n\n/**\n * @ngdoc directive\n * @name ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-error\">\n * The only appropriate use of `ngInit` is for aliasing special properties of\n * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you\n * should use {@link guide/controller controllers} rather than `ngInit`\n * to initialize values on a scope.\n * </div>\n * <div class=\"alert alert-warning\">\n * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make\n * sure you have parenthesis for correct precedence:\n * <pre class=\"prettyprint\">\n *   <div ng-init=\"test1 = (data | orderBy:'name')\"></div>\n * </pre>\n * </div>\n *\n * @priority 450\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <example module=\"initExample\">\n     <file name=\"index.html\">\n   <script>\n     angular.module('initExample', [])\n       .controller('ExampleController', ['$scope', function($scope) {\n         $scope.list = [['a', 'b'], ['c', 'd']];\n       }]);\n   </script>\n   <div ng-controller=\"ExampleController\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should alias index positions', function() {\n         var elements = element.all(by.css('.example-init'));\n         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');\n         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');\n         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');\n         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');\n       });\n     </file>\n   </example>\n */\nvar ngInitDirective = ngDirective({\n  priority: 450,\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-non-bindable', function() {\n         expect(element(by.binding('1 + 2')).getText()).toContain('3');\n         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \\+ 2/);\n       });\n      </file>\n    </example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/**\n * @ngdoc directive\n * @name ngPluralize\n * @restrict EA\n *\n * @description\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * ```html\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *```\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * ```html\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * ```\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Mary and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bound to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <example module=\"pluralizeExample\">\n      <file name=\"index.html\">\n        <script>\n          angular.module('pluralizeExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.person1 = 'Igor';\n              $scope.person2 = 'Misko';\n              $scope.personCount = 1;\n            }]);\n        </script>\n        <div ng-controller=\"ExampleController\">\n          Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /><br/>\n          Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /><br/>\n          Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should show correct pluralized string', function() {\n          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var countInput = element(by.model('personCount'));\n\n          expect(withoutOffset.getText()).toEqual('1 person is viewing.');\n          expect(withOffset.getText()).toEqual('Igor is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('0');\n\n          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');\n          expect(withOffset.getText()).toEqual('Nobody is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('2');\n\n          expect(withoutOffset.getText()).toEqual('2 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('3');\n\n          expect(withoutOffset.getText()).toEqual('3 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('4');\n\n          expect(withoutOffset.getText()).toEqual('4 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');\n        });\n        it('should show data-bound names', function() {\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var personCount = element(by.model('personCount'));\n          var person1 = element(by.model('person1'));\n          var person2 = element(by.model('person2'));\n          personCount.clear();\n          personCount.sendKeys('4');\n          person1.clear();\n          person1.sendKeys('Di');\n          person2.clear();\n          person2.sendKeys('Vojta');\n          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');\n        });\n      </file>\n    </example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {\n  var BRACE = /{}/g,\n      IS_WHEN = /^when(Minus)?(.+)$/;\n\n  return {\n    restrict: 'EA',\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,\n          watchRemover = angular.noop,\n          lastCount;\n\n      forEach(attr, function(expression, attributeName) {\n        var tmpMatch = IS_WHEN.exec(attributeName);\n        if (tmpMatch) {\n          var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);\n          whens[whenKey] = element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));\n\n      });\n\n      scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {\n        var count = parseFloat(newVal);\n        var countIsNaN = isNaN(count);\n\n        if (!countIsNaN && !(count in whens)) {\n          // If an explicit number rule such as 1, 2, 3... is defined, just use it.\n          // Otherwise, check it against pluralization rules in $locale service.\n          count = $locale.pluralCat(count - offset);\n        }\n\n        // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.\n        // In JS `NaN !== NaN`, so we have to exlicitly check.\n        if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) {\n          watchRemover();\n          watchRemover = scope.$watch(whensExpFns[count], updateElementText);\n          lastCount = count;\n        }\n      });\n\n      function updateElementText(newText) {\n        element.text(newText || '');\n      }\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngRepeat\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.\n * This may be useful when, for instance, nesting ngRepeats.\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * ```html\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * ```\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * ```html\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * ```\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * **.enter** - when a new item is added to the list or when an item is revealed after a filter\n *\n * **.leave** - when an item is removed from the list or when an item is filtered out\n *\n * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the ng-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n *   * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the\n *     intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message\n *     when a filter is active on the repeater, but the filtered result set is empty.\n *\n *     For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after\n *     the items have been processed through the filter.\n *\n * @example\n * This example initializes the scope to a list of names and\n * then uses `ngRepeat` to display every person:\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-init=\"friends = [\n        {name:'John', age:25, gender:'boy'},\n        {name:'Jessie', age:30, gender:'girl'},\n        {name:'Johanna', age:28, gender:'girl'},\n        {name:'Joy', age:15, gender:'girl'},\n        {name:'Mary', age:28, gender:'girl'},\n        {name:'Peter', age:95, gender:'boy'},\n        {name:'Sebastian', age:50, gender:'boy'},\n        {name:'Erika', age:27, gender:'girl'},\n        {name:'Patrick', age:40, gender:'boy'},\n        {name:'Samantha', age:60, gender:'girl'}\n      ]\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q as results\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n          <li class=\"animate-repeat\" ng-if=\"results.length == 0\">\n            <strong>No results found...</strong>\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:40px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:40px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var friends = element.all(by.repeater('friend in friends'));\n\n      it('should render initial data set', function() {\n        expect(friends.count()).toBe(10);\n        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');\n        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');\n        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');\n        expect(element(by.binding('friends.length')).getText())\n            .toMatch(\"I have 10 friends. They are:\");\n      });\n\n       it('should update repeater when filter predicate changes', function() {\n         expect(friends.count()).toBe(10);\n\n         element(by.model('q')).sendKeys('ma');\n\n         expect(friends.count()).toBe(2);\n         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');\n         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n\n  var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {\n    // TODO(perf): generate setters to shave off ~40ms or 1-1.5%\n    scope[valueIdentifier] = value;\n    if (keyIdentifier) scope[keyIdentifier] = key;\n    scope.$index = index;\n    scope.$first = (index === 0);\n    scope.$last = (index === (arrayLength - 1));\n    scope.$middle = !(scope.$first || scope.$last);\n    // jshint bitwise: false\n    scope.$odd = !(scope.$even = (index&1) === 0);\n    // jshint bitwise: true\n  };\n\n  var getBlockStart = function(block) {\n    return block.clone[0];\n  };\n\n  var getBlockEnd = function(block) {\n    return block.clone[block.clone.length - 1];\n  };\n\n\n  return {\n    restrict: 'A',\n    multiElement: true,\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    compile: function ngRepeatCompile($element, $attr) {\n      var expression = $attr.ngRepeat;\n      var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');\n\n      var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\n\n      if (!match) {\n        throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n      }\n\n      var lhs = match[1];\n      var rhs = match[2];\n      var aliasAs = match[3];\n      var trackByExp = match[4];\n\n      match = lhs.match(/^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$/);\n\n      if (!match) {\n        throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n            lhs);\n      }\n      var valueIdentifier = match[3] || match[1];\n      var keyIdentifier = match[2];\n\n      if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||\n          /^(null|undefined|this|\\$index|\\$first|\\$middle|\\$last|\\$even|\\$odd|\\$parent)$/.test(aliasAs))) {\n        throw ngRepeatMinErr('badident', \"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.\",\n          aliasAs);\n      }\n\n      var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;\n      var hashFnLocals = {$id: hashKey};\n\n      if (trackByExp) {\n        trackByExpGetter = $parse(trackByExp);\n      } else {\n        trackByIdArrayFn = function(key, value) {\n          return hashKey(value);\n        };\n        trackByIdObjFn = function(key) {\n          return key;\n        };\n      }\n\n      return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {\n\n        if (trackByExpGetter) {\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        }\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        //\n        // We are using no-proto object so that we don't need to guard against inherited props via\n        // hasOwnProperty.\n        var lastBlockMap = createMap();\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection) {\n          var index, length,\n              previousNode = $element[0],     // node that cloned nodes should be inserted after\n                                              // initialized to the comment node anchor\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = createMap(),\n              collectionLength,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder,\n              elementsToRemove;\n\n          if (aliasAs) {\n            $scope[aliasAs] = collection;\n          }\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, sort them and use to determine order of iteration over obj props\n            collectionKeys = [];\n            for (var itemKey in collection) {\n              if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') {\n                collectionKeys.push(itemKey);\n              }\n            }\n            collectionKeys.sort();\n          }\n\n          collectionLength = collectionKeys.length;\n          nextBlockOrder = new Array(collectionLength);\n\n          // locate existing items\n          for (index = 0; index < collectionLength; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            trackById = trackByIdFn(key, value, index);\n            if (lastBlockMap[trackById]) {\n              // found previously seen block\n              block = lastBlockMap[trackById];\n              delete lastBlockMap[trackById];\n              nextBlockMap[trackById] = block;\n              nextBlockOrder[index] = block;\n            } else if (nextBlockMap[trackById]) {\n              // if collision detected. restore lastBlockMap and throw an error\n              forEach(nextBlockOrder, function(block) {\n                if (block && block.scope) lastBlockMap[block.id] = block;\n              });\n              throw ngRepeatMinErr('dupes',\n                  \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}\",\n                  expression, trackById, value);\n            } else {\n              // new never before seen block\n              nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};\n              nextBlockMap[trackById] = true;\n            }\n          }\n\n          // remove leftover items\n          for (var blockKey in lastBlockMap) {\n            block = lastBlockMap[blockKey];\n            elementsToRemove = getBlockNodes(block.clone);\n            $animate.leave(elementsToRemove);\n            if (elementsToRemove[0].parentNode) {\n              // if the element was not removed yet because of pending animation, mark it as deleted\n              // so that we can ignore it later\n              for (index = 0, length = elementsToRemove.length; index < length; index++) {\n                elementsToRemove[index][NG_REMOVED] = true;\n              }\n            }\n            block.scope.$destroy();\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0; index < collectionLength; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n\n            if (block.scope) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n\n              nextNode = previousNode;\n\n              // skip nodes that are already pending removal via leave animation\n              do {\n                nextNode = nextNode.nextSibling;\n              } while (nextNode && nextNode[NG_REMOVED]);\n\n              if (getBlockStart(block) != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));\n              }\n              previousNode = getBlockEnd(block);\n              updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);\n            } else {\n              // new item which we don't know about\n              $transclude(function ngRepeatTransclude(clone, scope) {\n                block.scope = scope;\n                // http://jsperf.com/clone-vs-createcomment\n                var endNode = ngRepeatEndComment.cloneNode(false);\n                clone[clone.length++] = endNode;\n\n                // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?\n                $animate.enter(clone, null, jqLite(previousNode));\n                previousNode = endNode;\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block.clone = clone;\n                nextBlockMap[block.id] = block;\n                updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n      };\n    }\n  };\n}];\n\nvar NG_HIDE_CLASS = 'ng-hide';\nvar NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n/**\n * @ngdoc directive\n * @name ngShow\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding\n * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class\n * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding `.ng-hide`\n *\n * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   /&#42; this is just another form of hiding an element &#42;/\n *   display: block!important;\n *   position: absolute;\n *   top: -9999px;\n *   left: -9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with `ngShow`\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   /&#42; this is required as of 1.3x to properly\n *      apply all styling in a show/hide animation &#42;/\n *   transition: 0s linear all;\n * }\n *\n * .my-element.ng-hide-add-active,\n * .my-element.ng-hide-remove-active {\n *   /&#42; the transition is defined in the active class &#42;/\n *   transition: 1s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible\n * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        line-height: 20px;\n        opacity: 1;\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n\n      .animate-show.ng-hide-add.ng-hide-add-active,\n      .animate-show.ng-hide-remove.ng-hide-remove-active {\n        -webkit-transition: all linear 0.5s;\n        transition: all linear 0.5s;\n      }\n\n      .animate-show.ng-hide {\n        line-height: 0;\n        opacity: 0;\n        padding: 0 10px;\n      }\n\n      .check-element {\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'A',\n    multiElement: true,\n    link: function(scope, element, attr) {\n      scope.$watch(attr.ngShow, function ngShowWatchAction(value) {\n        // we're adding a temporary, animation-specific class for ng-hide since this way\n        // we can control when the element is actually displayed on screen without having\n        // to have a global/greedy CSS selector that breaks when other animations are run.\n        // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845\n        $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {\n          tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n        });\n      });\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngHide\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\"></div>\n * ```\n *\n * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class\n * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding `.ng-hide`\n *\n * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   /&#42; this is just another form of hiding an element &#42;/\n *   display: block!important;\n *   position: absolute;\n *   top: -9999px;\n *   left: -9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with `ngHide`\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`\n * CSS class is added and removed for you instead of your own CSS class.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition: 0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden\n * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        -webkit-transition: all linear 0.5s;\n        transition: all linear 0.5s;\n        line-height: 20px;\n        opacity: 1;\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n\n      .animate-hide.ng-hide {\n        line-height: 0;\n        opacity: 0;\n        padding: 0 10px;\n      }\n\n      .check-element {\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'A',\n    multiElement: true,\n    link: function(scope, element, attr) {\n      scope.$watch(attr.ngHide, function ngHideWatchAction(value) {\n        // The comment inside of the ngShowDirective explains why we add and\n        // remove a temporary class for the show/hide animation\n        $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {\n          tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n        });\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @element ANY\n * @param {expression} ngStyle\n *\n * {@link guide/expression Expression} which evals to an\n * object whose keys are CSS style names and values are corresponding values for those CSS\n * keys.\n *\n * Since some CSS style names are not valid keys for an object, they must be quoted.\n * See the 'background-color' style in the example below.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set color\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"set background\" ng-click=\"myStyle={'background-color':'blue'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var colorSpan = element(by.css('span'));\n\n       it('should check ng-style', function() {\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n         element(by.css('input[value=\\'set color\\']')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');\n         element(by.css('input[value=clear]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ngSwitch\n * @restrict EA\n *\n * @description\n * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **`on=\"...\"` attribute**\n * (or the **`ng-switch=\"...\"` attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * <div class=\"alert alert-info\">\n * Be aware that the attribute values to match against cannot be expressions. They are interpreted\n * as literal string values to match against.\n * For example, **`ng-switch-when=\"someVal\"`** will match against the string `\"someVal\"` not against the\n * value of the expression `$scope.someVal`.\n * </div>\n\n * @animations\n * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container\n * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM\n *\n * @usage\n *\n * ```\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n * ```\n *\n *\n * @scope\n * @priority 1200\n * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example module=\"switchExample\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <tt>selection={{selection}}</tt>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('switchExample', ['ngAnimate'])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.items = ['settings', 'home', 'other'];\n          $scope.selection = $scope.items[0];\n        }]);\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var switchElem = element(by.css('[ng-switch]'));\n      var select = element(by.model('selection'));\n\n      it('should start in settings', function() {\n        expect(switchElem.getText()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select.all(by.css('option')).get(1).click();\n        expect(switchElem.getText()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select.all(by.css('option')).get(2).click();\n        expect(switchElem.getText()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'EA',\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes = [],\n          selectedElements = [],\n          previousLeaveAnimations = [],\n          selectedScopes = [];\n\n      var spliceFactory = function(array, index) {\n          return function() { array.splice(index, 1); };\n      };\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        var i, ii;\n        for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {\n          $animate.cancel(previousLeaveAnimations[i]);\n        }\n        previousLeaveAnimations.length = 0;\n\n        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {\n          var selected = getBlockNodes(selectedElements[i].clone);\n          selectedScopes[i].$destroy();\n          var promise = previousLeaveAnimations[i] = $animate.leave(selected);\n          promise.then(spliceFactory(previousLeaveAnimations, i));\n        }\n\n        selectedElements.length = 0;\n        selectedScopes.length = 0;\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            selectedTransclude.transclude(function(caseElement, selectedScope) {\n              selectedScopes.push(selectedScope);\n              var anchor = selectedTransclude.element;\n              caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');\n              var block = { clone: caseElement };\n\n              selectedElements.push(block);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 1200,\n  require: '^ngSwitch',\n  multiElement: true,\n  link: function(scope, element, attrs, ctrl, $transclude) {\n    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 1200,\n  require: '^ngSwitch',\n  multiElement: true,\n  link: function(scope, element, attr, ctrl, $transclude) {\n    ctrl.cases['?'] = (ctrl.cases['?'] || []);\n    ctrl.cases['?'].push({ transclude: $transclude, element: element });\n   }\n});\n\n/**\n * @ngdoc directive\n * @name ngTransclude\n * @restrict EAC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.\n *\n * @element ANY\n *\n * @example\n   <example module=\"transcludeExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('transcludeExample', [])\n          .directive('pane', function(){\n             return {\n               restrict: 'E',\n               transclude: true,\n               scope: { title:'@' },\n               template: '<div style=\"border: 1px solid black;\">' +\n                           '<div style=\"background-color: gray\">{{title}}</div>' +\n                           '<ng-transclude></ng-transclude>' +\n                         '</div>'\n             };\n         })\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.title = 'Lorem Ipsum';\n           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n         }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <input ng-model=\"title\"><br>\n         <textarea ng-model=\"text\"></textarea> <br/>\n         <pane title=\"{{title}}\">{{text}}</pane>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        it('should have transcluded', function() {\n          var titleElement = element(by.model('title'));\n          titleElement.clear();\n          titleElement.sendKeys('TITLE');\n          var textElement = element(by.model('text'));\n          textElement.clear();\n          textElement.sendKeys('TEXT');\n          expect(element(by.binding('title')).getText()).toEqual('TITLE');\n          expect(element(by.binding('text')).getText()).toEqual('TEXT');\n        });\n     </file>\n   </example>\n *\n */\nvar ngTranscludeDirective = ngDirective({\n  restrict: 'EAC',\n  link: function($scope, $element, $attrs, controller, $transclude) {\n    if (!$transclude) {\n      throw minErr('ngTransclude')('orphan',\n       'Illegal use of ngTransclude directive in the template! ' +\n       'No parent directive that requires a transclusion found. ' +\n       'Element: {0}',\n       startingTag($element));\n    }\n\n    $transclude(function(clone) {\n      $element.empty();\n      $element.append(clone);\n    });\n  }\n});\n\n/**\n * @ngdoc directive\n * @name script\n * @restrict E\n *\n * @description\n * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the\n * template can be used by {@link ng.directive:ngInclude `ngInclude`},\n * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the\n * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be\n * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.\n *\n * @param {string} type Must be set to `'text/ng-template'`.\n * @param {string} id Cache name of the template.\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      it('should load template defined inside script tag', function() {\n        element(by.css('#tpl-link')).click();\n        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);\n      });\n    </file>\n  </example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar ngOptionsMinErr = minErr('ngOptions');\n/**\n * @ngdoc directive\n * @name select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * # `ngOptions`\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension_expression.\n *\n * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a\n * similar result. However, the `ngOptions` provides some benefits such as reducing memory and\n * increasing speed by not creating a new scope for each repeated instance, as well as providing\n * more flexibility in how the `select`'s model is assigned via `select as`. `ngOptions` should be\n * used when the `select` model needs to be bound to a non-string value. This is because an option\n * element can only be bound to string values at present.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngModel` compares by reference, not value. This is important when binding to an\n * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).\n * </div>\n *\n * ## `select as`\n *\n * Using `select as` will bind the result of the `select as` expression to the model, but\n * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)\n * or property name (for object data sources) of the value within the collection. If a `track by` expression\n * is used, the result of that expression will be set as the value of the `option` and `select` elements.\n *\n * ### `select as` with `trackexpr`\n *\n * Using `select as` together with `trackexpr` is not recommended. Reasoning:\n *\n * - Example: &lt;select ng-options=\"item.subItem as item.label for item in values track by item.id\" ng-model=\"selected\"&gt;\n *   values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}],\n *   $scope.selected = {name: 'aSubItem'};\n * - track by is always applied to `value`, with the purpose of preserving the selection,\n *   (to `item` in this case)\n * - to calculate whether an item is selected we do the following:\n *   1. apply `track by` to the values in the array, e.g.\n *      In the example: [1,2]\n *   2. apply `track by` to the already selected value in `ngModel`:\n *      In the example: this is not possible, as `track by` refers to `item.id`, but the selected\n *      value from `ngModel` is `{name: aSubItem}`.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label`  **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`). With this the selection is preserved\n *      even when the options are recreated (e.g. reloaded from the server).\n *\n * @example\n    <example module=\"selectExample\">\n      <file name=\"index.html\">\n        <script>\n        angular.module('selectExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.colors = [\n              {name:'black', shade:'dark'},\n              {name:'white', shade:'light'},\n              {name:'red', shade:'dark'},\n              {name:'blue', shade:'dark'},\n              {name:'yellow', shade:'light'}\n            ];\n            $scope.myColor = $scope.colors[2]; // red\n          }]);\n        </script>\n        <div ng-controller=\"ExampleController\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              Name: <input ng-model=\"color.name\">\n              [<a href ng-click=\"colors.splice($index, 1)\">X</a>]\n            </li>\n            <li>\n              [<a href ng-click=\"colors.push({})\">add</a>]\n            </li>\n          </ul>\n          <hr/>\n          Color (null not allowed):\n          <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\"></select><br>\n\n          Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span><br/>\n\n          Color grouped by shade:\n          <select ng-model=\"myColor\" ng-options=\"color.name group by color.shade for color in colors\">\n          </select><br/>\n\n\n          Select <a href ng-click=\"myColor = { name:'not in list', shade: 'other' }\">bogus</a>.<br>\n          <hr/>\n          Currently selected: {{ {selected_color:myColor} }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':myColor.name}\">\n          </div>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n         it('should check ng-options', function() {\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');\n           element.all(by.model('myColor')).first().click();\n           element.all(by.css('select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');\n           element(by.css('.nullable select[ng-model=\"myColor\"]')).click();\n           element.all(by.css('.nullable select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');\n         });\n      </file>\n    </example>\n */\n\nvar ngOptionsDirective = valueFn({\n  restrict: 'A',\n  terminal: true\n});\n\n// jshint maxlen: false\nvar selectDirective = ['$compile', '$parse', function($compile,   $parse) {\n                         //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888\n  var NG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n      nullModelCtrl = {$setViewValue: noop};\n// jshint maxlen: 100\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {\n      var self = this,\n          optionsMap = {},\n          ngModelCtrl = nullModelCtrl,\n          nullOption,\n          unknownOption;\n\n\n      self.databound = $attrs.ngModel;\n\n\n      self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {\n        ngModelCtrl = ngModelCtrl_;\n        nullOption = nullOption_;\n        unknownOption = unknownOption_;\n      };\n\n\n      self.addOption = function(value, element) {\n        assertNotHasOwnProperty(value, '\"option value\"');\n        optionsMap[value] = true;\n\n        if (ngModelCtrl.$viewValue == value) {\n          $element.val(value);\n          if (unknownOption.parent()) unknownOption.remove();\n        }\n        // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459\n        // Adding an <option selected=\"selected\"> element to a <select required=\"required\"> should\n        // automatically select the new element\n        if (element && element[0].hasAttribute('selected')) {\n          element[0].selected = true;\n        }\n      };\n\n\n      self.removeOption = function(value) {\n        if (this.hasOption(value)) {\n          delete optionsMap[value];\n          if (ngModelCtrl.$viewValue === value) {\n            this.renderUnknownOption(value);\n          }\n        }\n      };\n\n\n      self.renderUnknownOption = function(val) {\n        var unknownVal = '? ' + hashKey(val) + ' ?';\n        unknownOption.val(unknownVal);\n        $element.prepend(unknownOption);\n        $element.val(unknownVal);\n        unknownOption.prop('selected', true); // needed for IE\n      };\n\n\n      self.hasOption = function(value) {\n        return optionsMap.hasOwnProperty(value);\n      };\n\n      $scope.$on('$destroy', function() {\n        // disable unknown option so that we don't do work when the whole select is being destroyed\n        self.renderUnknownOption = noop;\n      });\n    }],\n\n    link: function(scope, element, attr, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      if (!ctrls[1]) return;\n\n      var selectCtrl = ctrls[0],\n          ngModelCtrl = ctrls[1],\n          multiple = attr.multiple,\n          optionsExp = attr.ngOptions,\n          nullOption = false, // if false, user will not be able to select it (used by ngOptions)\n          emptyOption,\n          renderScheduled = false,\n          // we can't just jqLite('<option>') since jqLite is not smart enough\n          // to create it in <select> and IE barfs otherwise.\n          optionTemplate = jqLite(document.createElement('option')),\n          optGroupTemplate =jqLite(document.createElement('optgroup')),\n          unknownOption = optionTemplate.clone();\n\n      // find \"null\" option\n      for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = nullOption = children.eq(i);\n          break;\n        }\n      }\n\n      selectCtrl.init(ngModelCtrl, nullOption, unknownOption);\n\n      // required validator\n      if (multiple) {\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n      }\n\n      if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);\n      else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);\n      else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);\n\n\n      ////////////////////////////\n\n\n\n      function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {\n        ngModelCtrl.$render = function() {\n          var viewValue = ngModelCtrl.$viewValue;\n\n          if (selectCtrl.hasOption(viewValue)) {\n            if (unknownOption.parent()) unknownOption.remove();\n            selectElement.val(viewValue);\n            if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy\n          } else {\n            if (isUndefined(viewValue) && emptyOption) {\n              selectElement.val('');\n            } else {\n              selectCtrl.renderUnknownOption(viewValue);\n            }\n          }\n        };\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            if (unknownOption.parent()) unknownOption.remove();\n            ngModelCtrl.$setViewValue(selectElement.val());\n          });\n        });\n      }\n\n      function setupAsMultiple(scope, selectElement, ctrl) {\n        var lastView;\n        ctrl.$render = function() {\n          var items = new HashMap(ctrl.$viewValue);\n          forEach(selectElement.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        scope.$watch(function selectMultipleWatch() {\n          if (!equals(lastView, ctrl.$viewValue)) {\n            lastView = shallowCopy(ctrl.$viewValue);\n            ctrl.$render();\n          }\n        });\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var array = [];\n            forEach(selectElement.find('option'), function(option) {\n              if (option.selected) {\n                array.push(option.value);\n              }\n            });\n            ctrl.$setViewValue(array);\n          });\n        });\n      }\n\n      function setupAsOptions(scope, selectElement, ctrl) {\n        var match;\n\n        if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {\n          throw ngOptionsMinErr('iexp',\n            \"Expected expression in form of \" +\n            \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n            \" but got '{0}'. Element: {1}\",\n            optionsExp, startingTag(selectElement));\n        }\n\n        var displayFn = $parse(match[2] || match[1]),\n            valueName = match[4] || match[6],\n            selectAs = / as /.test(match[0]) && match[1],\n            selectAsFn = selectAs ? $parse(selectAs) : null,\n            keyName = match[5],\n            groupByFn = $parse(match[3] || ''),\n            valueFn = $parse(match[2] ? match[1] : valueName),\n            valuesFn = $parse(match[7]),\n            track = match[8],\n            trackFn = track ? $parse(match[8]) : null,\n            trackKeysCache = {},\n            // This is an array of array of existing option groups in DOM.\n            // We try to reuse these if possible\n            // - optionGroupsCache[0] is the options with no option group\n            // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element\n            optionGroupsCache = [[{element: selectElement, label:''}]],\n            //re-usable object to represent option's locals\n            locals = {};\n\n        if (nullOption) {\n          // compile the element since there might be bindings in it\n          $compile(nullOption)(scope);\n\n          // remove the class, which is added automatically because we recompile the element and it\n          // becomes the compilation root\n          nullOption.removeClass('ng-scope');\n\n          // we need to remove it before calling selectElement.empty() because otherwise IE will\n          // remove the label from the element. wtf?\n          nullOption.remove();\n        }\n\n        // clear contents, we'll add what's needed based on the model\n        selectElement.empty();\n\n        selectElement.on('change', selectionChanged);\n\n        ctrl.$render = render;\n\n        scope.$watchCollection(valuesFn, scheduleRendering);\n        scope.$watchCollection(getLabels, scheduleRendering);\n\n        if (multiple) {\n          scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering);\n        }\n\n        // ------------------------------------------------------------------ //\n\n        function callExpression(exprFn, key, value) {\n          locals[valueName] = value;\n          if (keyName) locals[keyName] = key;\n          return exprFn(scope, locals);\n        }\n\n        function selectionChanged() {\n          scope.$apply(function() {\n            var collection = valuesFn(scope) || [];\n            var viewValue;\n            if (multiple) {\n              viewValue = [];\n              forEach(selectElement.val(), function(selectedKey) {\n                  selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey;\n                viewValue.push(getViewValue(selectedKey, collection[selectedKey]));\n              });\n            } else {\n              var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val();\n              viewValue = getViewValue(selectedKey, collection[selectedKey]);\n            }\n            ctrl.$setViewValue(viewValue);\n            render();\n          });\n        }\n\n        function getViewValue(key, value) {\n          if (key === '?') {\n            return undefined;\n          } else if (key === '') {\n            return null;\n          } else {\n            var viewValueFn = selectAsFn ? selectAsFn : valueFn;\n            return callExpression(viewValueFn, key, value);\n          }\n        }\n\n        function getLabels() {\n          var values = valuesFn(scope);\n          var toDisplay;\n          if (values && isArray(values)) {\n            toDisplay = new Array(values.length);\n            for (var i = 0, ii = values.length; i < ii; i++) {\n              toDisplay[i] = callExpression(displayFn, i, values[i]);\n            }\n            return toDisplay;\n          } else if (values) {\n            // TODO: Add a test for this case\n            toDisplay = {};\n            for (var prop in values) {\n              if (values.hasOwnProperty(prop)) {\n                toDisplay[prop] = callExpression(displayFn, prop, values[prop]);\n              }\n            }\n          }\n          return toDisplay;\n        }\n\n        function createIsSelectedFn(viewValue) {\n          var selectedSet;\n          if (multiple) {\n            if (trackFn && isArray(viewValue)) {\n\n              selectedSet = new HashMap([]);\n              for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) {\n                // tracking by key\n                selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true);\n              }\n            } else {\n              selectedSet = new HashMap(viewValue);\n            }\n          } else if (trackFn) {\n            viewValue = callExpression(trackFn, null, viewValue);\n          }\n\n          return function isSelected(key, value) {\n            var compareValueFn;\n            if (trackFn) {\n              compareValueFn = trackFn;\n            } else if (selectAsFn) {\n              compareValueFn = selectAsFn;\n            } else {\n              compareValueFn = valueFn;\n            }\n\n            if (multiple) {\n              return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));\n            } else {\n              return viewValue === callExpression(compareValueFn, key, value);\n            }\n          };\n        }\n\n        function scheduleRendering() {\n          if (!renderScheduled) {\n            scope.$$postDigest(render);\n            renderScheduled = true;\n          }\n        }\n\n        /**\n         * A new labelMap is created with each render.\n         * This function is called for each existing option with added=false,\n         * and each new option with added=true.\n         * - Labels that are passed to this method twice,\n         * (once with added=true and once with added=false) will end up with a value of 0, and\n         * will cause no change to happen to the corresponding option.\n         * - Labels that are passed to this method only once with added=false will end up with a\n         * value of -1 and will eventually be passed to selectCtrl.removeOption()\n         * - Labels that are passed to this method only once with added=true will end up with a\n         * value of 1 and will eventually be passed to selectCtrl.addOption()\n        */\n        function updateLabelMap(labelMap, label, added) {\n          labelMap[label] = labelMap[label] || 0;\n          labelMap[label] += (added ? 1 : -1);\n        }\n\n        function render() {\n          renderScheduled = false;\n\n          // Temporary location for the option groups before we render them\n          var optionGroups = {'':[]},\n              optionGroupNames = [''],\n              optionGroupName,\n              optionGroup,\n              option,\n              existingParent, existingOptions, existingOption,\n              viewValue = ctrl.$viewValue,\n              values = valuesFn(scope) || [],\n              keys = keyName ? sortedKeys(values) : values,\n              key,\n              value,\n              groupLength, length,\n              groupIndex, index,\n              labelMap = {},\n              selected,\n              isSelected = createIsSelectedFn(viewValue),\n              anySelected = false,\n              lastElement,\n              element,\n              label,\n              optionId;\n\n          trackKeysCache = {};\n\n          // We now build up the list of options we need (we merge later)\n          for (index = 0; length = keys.length, index < length; index++) {\n            key = index;\n            if (keyName) {\n              key = keys[index];\n              if (key.charAt(0) === '$') continue;\n            }\n            value = values[key];\n\n            optionGroupName = callExpression(groupByFn, key, value) || '';\n            if (!(optionGroup = optionGroups[optionGroupName])) {\n              optionGroup = optionGroups[optionGroupName] = [];\n              optionGroupNames.push(optionGroupName);\n            }\n\n            selected = isSelected(key, value);\n            anySelected = anySelected || selected;\n\n            label = callExpression(displayFn, key, value); // what will be seen by the user\n\n            // doing displayFn(scope, locals) || '' overwrites zero values\n            label = isDefined(label) ? label : '';\n            optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index);\n            if (trackFn) {\n              trackKeysCache[optionId] = key;\n            }\n\n            optionGroup.push({\n              // either the index into array or key from object\n              id: optionId,\n              label: label,\n              selected: selected                   // determine if we should be selected\n            });\n          }\n          if (!multiple) {\n            if (nullOption || viewValue === null) {\n              // insert null option if we have a placeholder, or the model is null\n              optionGroups[''].unshift({id:'', label:'', selected:!anySelected});\n            } else if (!anySelected) {\n              // option could not be found, we have to insert the undefined item\n              optionGroups[''].unshift({id:'?', label:'', selected:true});\n            }\n          }\n\n          // Now we need to update the list of DOM nodes to match the optionGroups we computed above\n          for (groupIndex = 0, groupLength = optionGroupNames.length;\n               groupIndex < groupLength;\n               groupIndex++) {\n            // current option group name or '' if no group\n            optionGroupName = optionGroupNames[groupIndex];\n\n            // list of options for that group. (first item has the parent)\n            optionGroup = optionGroups[optionGroupName];\n\n            if (optionGroupsCache.length <= groupIndex) {\n              // we need to grow the optionGroups\n              existingParent = {\n                element: optGroupTemplate.clone().attr('label', optionGroupName),\n                label: optionGroup.label\n              };\n              existingOptions = [existingParent];\n              optionGroupsCache.push(existingOptions);\n              selectElement.append(existingParent.element);\n            } else {\n              existingOptions = optionGroupsCache[groupIndex];\n              existingParent = existingOptions[0];  // either SELECT (no group) or OPTGROUP element\n\n              // update the OPTGROUP label if not the same.\n              if (existingParent.label != optionGroupName) {\n                existingParent.element.attr('label', existingParent.label = optionGroupName);\n              }\n            }\n\n            lastElement = null;  // start at the beginning\n            for (index = 0, length = optionGroup.length; index < length; index++) {\n              option = optionGroup[index];\n              if ((existingOption = existingOptions[index + 1])) {\n                // reuse elements\n                lastElement = existingOption.element;\n                if (existingOption.label !== option.label) {\n                  updateLabelMap(labelMap, existingOption.label, false);\n                  updateLabelMap(labelMap, option.label, true);\n                  lastElement.text(existingOption.label = option.label);\n                  lastElement.prop('label', existingOption.label);\n                }\n                if (existingOption.id !== option.id) {\n                  lastElement.val(existingOption.id = option.id);\n                }\n                // lastElement.prop('selected') provided by jQuery has side-effects\n                if (lastElement[0].selected !== option.selected) {\n                  lastElement.prop('selected', (existingOption.selected = option.selected));\n                  if (msie) {\n                    // See #7692\n                    // The selected item wouldn't visually update on IE without this.\n                    // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well\n                    lastElement.prop('selected', existingOption.selected);\n                  }\n                }\n              } else {\n                // grow elements\n\n                // if it's a null option\n                if (option.id === '' && nullOption) {\n                  // put back the pre-compiled element\n                  element = nullOption;\n                } else {\n                  // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but\n                  // in this version of jQuery on some browser the .text() returns a string\n                  // rather then the element.\n                  (element = optionTemplate.clone())\n                      .val(option.id)\n                      .prop('selected', option.selected)\n                      .attr('selected', option.selected)\n                      .prop('label', option.label)\n                      .text(option.label);\n                }\n\n                existingOptions.push(existingOption = {\n                    element: element,\n                    label: option.label,\n                    id: option.id,\n                    selected: option.selected\n                });\n                updateLabelMap(labelMap, option.label, true);\n                if (lastElement) {\n                  lastElement.after(element);\n                } else {\n                  existingParent.element.append(element);\n                }\n                lastElement = element;\n              }\n            }\n            // remove any excessive OPTIONs in a group\n            index++; // increment since the existingOptions[0] is parent element not OPTION\n            while (existingOptions.length > index) {\n              option = existingOptions.pop();\n              updateLabelMap(labelMap, option.label, false);\n              option.element.remove();\n            }\n          }\n          // remove any excessive OPTGROUPs from select\n          while (optionGroupsCache.length > groupIndex) {\n            // remove all the labels in the option group\n            optionGroup = optionGroupsCache.pop();\n            for (index = 1; index < optionGroup.length; ++index) {\n              updateLabelMap(labelMap, optionGroup[index].label, false);\n            }\n            optionGroup[0].element.remove();\n          }\n          forEach(labelMap, function(count, label) {\n            if (count > 0) {\n              selectCtrl.addOption(label);\n            } else if (count < 0) {\n              selectCtrl.removeOption(label);\n            }\n          });\n        }\n      }\n    }\n  };\n}];\n\nvar optionDirective = ['$interpolate', function($interpolate) {\n  var nullSelectCtrl = {\n    addOption: noop,\n    removeOption: noop\n  };\n\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isUndefined(attr.value)) {\n        var interpolateFn = $interpolate(element.text(), true);\n        if (!interpolateFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function(scope, element, attr) {\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (!selectCtrl || !selectCtrl.databound) {\n          selectCtrl = nullSelectCtrl;\n        }\n\n        if (interpolateFn) {\n          scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {\n            attr.$set('value', newVal);\n            if (oldVal !== newVal) {\n              selectCtrl.removeOption(oldVal);\n            }\n            selectCtrl.addOption(newVal, element);\n          });\n        } else {\n          selectCtrl.addOption(attr.value, element);\n        }\n\n        element.on('$destroy', function() {\n          selectCtrl.removeOption(attr.value);\n        });\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: false\n});\n\n  if (window.angular.bootstrap) {\n    //AngularJS is already loaded, so we can return here...\n    console.log('WARNING: Tried to load angular more than once.');\n    return;\n  }\n\n  //try to bind to jquery now so that one can write jqLite(document).ready()\n  //but we will rebind on bootstrap again.\n  bindJQuery();\n\n  publishExternalAPI(angular);\n\n  jqLite(document).ready(function() {\n    angularInit(document, bootstrap);\n  });\n\n})(window, document);\n\n!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\\\:form{display:block;}</style>');"
  },
  {
    "path": "client/components/angular/bower.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n  }\n}\n"
  },
  {
    "path": "client/components/angular/package.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"1.3.5\",\n  \"description\": \"HTML enhanced for web apps\",\n  \"main\": \"angular.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-animate/.bower.json",
    "content": "{\n  \"name\": \"angular-animate\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-animate.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-animate\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"f1ce791ecb58c64af1caac6253f93ecf3e2bf203\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-animate.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-animate\"\n}"
  },
  {
    "path": "client/components/angular-animate/README.md",
    "content": "# packaged angular-animate\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-animate\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular-animate/angular-animate.js\"></script>\n```\n\nThen add `ngAnimate` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngAnimate']);\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular-animate')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-animate\n```\n\nThen add a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-animate/angular-animate.js\"></script>\n```\n\nThen add `ngAnimate` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngAnimate']);\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-animate/angular-animate.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/* jshint maxlen: false */\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.\n *\n * <div doc-module-components=\"ngAnimate\"></div>\n *\n * # Usage\n *\n * To see animations in action, all that is required is to define the appropriate CSS classes\n * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:\n * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation\n * by using the `$animate` service.\n *\n * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:\n *\n * | Directive                                                                                                | Supported Animations                                                     |\n * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|\n * | {@link ng.directive:ngRepeat#animations ngRepeat}                                                        | enter, leave and move                                                    |\n * | {@link ngRoute.directive:ngView#animations ngView}                                                       | enter and leave                                                          |\n * | {@link ng.directive:ngInclude#animations ngInclude}                                                      | enter and leave                                                          |\n * | {@link ng.directive:ngSwitch#animations ngSwitch}                                                        | enter and leave                                                          |\n * | {@link ng.directive:ngIf#animations ngIf}                                                                | enter and leave                                                          |\n * | {@link ng.directive:ngClass#animations ngClass}                                                          | add and remove (the CSS class(es) present)                               |\n * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide}            | add and remove (the ng-hide class value)                                 |\n * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel}    | add and remove (dirty, pristine, valid, invalid & all other validations) |\n * | {@link module:ngMessages#animations ngMessages}                                                          | add and remove (ng-active & ng-inactive)                                 |\n * | {@link module:ngMessages#animations ngMessage}                                                           | enter and leave                                                          |\n *\n * You can find out more information about animations upon visiting each directive page.\n *\n * Below is an example of how to apply animations to a directive that supports animation hooks:\n *\n * ```html\n * <style type=\"text/css\">\n * .slide.ng-enter, .slide.ng-leave {\n *   -webkit-transition:0.5s linear all;\n *   transition:0.5s linear all;\n * }\n *\n * .slide.ng-enter { }        /&#42; starting animations for enter &#42;/\n * .slide.ng-enter.ng-enter-active { } /&#42; terminal animations for enter &#42;/\n * .slide.ng-leave { }        /&#42; starting animations for leave &#42;/\n * .slide.ng-leave.ng-leave-active { } /&#42; terminal animations for leave &#42;/\n * </style>\n *\n * <!--\n * the animate service will automatically add .ng-enter and .ng-leave to the element\n * to trigger the CSS transition/animations\n * -->\n * <ANY class=\"slide\" ng-include=\"...\"></ANY>\n * ```\n *\n * Keep in mind that, by default, if an animation is running, any child elements cannot be animated\n * until the parent element's animation has completed. This blocking feature can be overridden by\n * placing the `ng-animate-children` attribute on a parent container tag.\n *\n * ```html\n * <div class=\"slide-animation\" ng-if=\"on\" ng-animate-children>\n *   <div class=\"fade-animation\" ng-if=\"on\">\n *     <div class=\"explode-animation\" ng-if=\"on\">\n *        ...\n *     </div>\n *   </div>\n * </div>\n * ```\n *\n * When the `on` expression value changes and an animation is triggered then each of the elements within\n * will all animate without the block being applied to child elements.\n *\n * ## Are animations run when the application starts?\n * No they are not. When an application is bootstrapped Angular will disable animations from running to avoid\n * a frenzy of animations from being triggered as soon as the browser has rendered the screen. For this to work,\n * Angular will wait for two digest cycles until enabling animations. From there on, any animation-triggering\n * layout changes in the application will trigger animations as normal.\n *\n * In addition, upon bootstrap, if the routing system or any directives or load remote data (via $http) then Angular\n * will automatically extend the wait time to enable animations once **all** of the outbound HTTP requests\n * are complete.\n *\n * ## CSS-defined Animations\n * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes\n * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported\n * and can be used to play along with this naming structure.\n *\n * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * /&#42;\n *  The animate class is apart of the element and the ng-enter class\n *  is attached to the element once the enter animation event is triggered\n * &#42;/\n * .reveal-animation.ng-enter {\n *  -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/\n *  transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/\n *\n *  /&#42; The animation preparation code &#42;/\n *  opacity: 0;\n * }\n *\n * /&#42;\n *  Keep in mind that you want to combine both CSS\n *  classes together to avoid any CSS-specificity\n *  conflicts\n * &#42;/\n * .reveal-animation.ng-enter.ng-enter-active {\n *  /&#42; The animation code itself &#42;/\n *  opacity: 1;\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * The following code below demonstrates how to perform animations using **CSS animations** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * .reveal-animation.ng-enter {\n *   -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/\n *   animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/\n * }\n * @-webkit-keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * @keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.\n *\n * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add\n * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically\n * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be\n * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end\n * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element\n * has no CSS transition/animation classes applied to it.\n *\n * ### Structural transition animations\n *\n * Structural transitions (such as enter, leave and move) will always apply a `0s none` transition\n * value to force the browser into rendering the styles defined in the setup (.ng-enter, .ng-leave\n * or .ng-move) class. This means that any active transition animations operating on the element\n * will be cut off to make way for the enter, leave or move animation.\n *\n * ### Class-based transition animations\n *\n * Class-based transitions refer to transition animations that are triggered when a CSS class is\n * added to or removed from the element (via `$animate.addClass`, `$animate.removeClass`,\n * `$animate.setClass`, or by directives such as `ngClass`, `ngModel` and `form`).\n * They are different when compared to structural animations since they **do not cancel existing\n * animations** nor do they **block successive transitions** from rendering on the same element.\n * This distinction allows for **multiple class-based transitions** to be performed on the same element.\n *\n * In addition to ngAnimate supporting the default (natural) functionality of class-based transition\n * animations, ngAnimate also decorates the element with starting and ending CSS classes to aid the\n * developer in further styling the element throughout the transition animation. Earlier versions\n * of ngAnimate may have caused natural CSS transitions to break and not render properly due to\n * $animate temporarily blocking transitions using `0s none` in order to allow the setup CSS class\n * (the `-add` or `-remove` class) to be applied without triggering an animation. However, as of\n * **version 1.3**, this workaround has been removed with ngAnimate and all non-ngAnimate CSS\n * class transitions are compatible with ngAnimate.\n *\n * There is, however, one special case when dealing with class-based transitions in ngAnimate.\n * When rendering class-based transitions that make use of the setup and active CSS classes\n * (e.g. `.fade-add` and `.fade-add-active` for when `.fade` is added) be sure to define\n * the transition value **on the active CSS class** and not the setup class.\n *\n * ```css\n * .fade-add {\n *   /&#42; remember to place a 0s transition here\n *      to ensure that the styles are applied instantly\n *      even if the element already has a transition style &#42;/\n *   transition:0s linear all;\n *\n *   /&#42; starting CSS styles &#42;/\n *   opacity:1;\n * }\n * .fade-add.fade-add-active {\n *   /&#42; this will be the length of the animation &#42;/\n *   transition:1s linear all;\n *   opacity:0;\n * }\n * ```\n *\n * The setup CSS class (in this case `.fade-add`) also has a transition style property, however, it\n * has a duration of zero. This may not be required, however, incase the browser is unable to render\n * the styling present in this CSS class instantly then it could be that the browser is attempting\n * to perform an unnecessary transition.\n *\n * This workaround, however, does not apply to  standard class-based transitions that are rendered\n * when a CSS class containing a transition is applied to an element:\n *\n * ```css\n * /&#42; this works as expected &#42;/\n * .fade {\n *   transition:1s linear all;\n *   opacity:0;\n * }\n * ```\n *\n * Please keep this in mind when coding the CSS markup that will be used within class-based transitions.\n * Also, try not to mix the two class-based animation flavors together since the CSS code may become\n * overly complex.\n *\n *\n * ### Preventing Collisions With Third Party Libraries\n *\n * Some third-party frameworks place animation duration defaults across many element or className\n * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which\n * is expecting actual animations on these elements and has to wait for their completion.\n *\n * You can prevent this unwanted behavior by using a prefix on all your animation classes:\n *\n * ```css\n * /&#42; prefixed with animate- &#42;/\n * .animate-fade-add.animate-fade-add-active {\n *   transition:1s linear all;\n *   opacity:0;\n * }\n * ```\n *\n * You then configure `$animate` to enforce this prefix:\n *\n * ```js\n * $animateProvider.classNameFilter(/animate-/);\n * ```\n * </div>\n *\n * ### CSS Staggering Animations\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n *   /&#42; standard transition code &#42;/\n *   -webkit-transition: 1s linear all;\n *   transition: 1s linear all;\n *   opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/\n *   -webkit-transition-delay: 0.1s;\n *   transition-delay: 0.1s;\n *\n *   /&#42; in case the stagger doesn't work then these two values\n *    must be set to 0 to avoid an accidental CSS inheritance &#42;/\n *   -webkit-transition-duration: 0s;\n *   transition-duration: 0s;\n * }\n * .my-animation.ng-enter.ng-enter-active {\n *   /&#42; standard transition styles &#42;/\n *   opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if more than 10ms has passed after the last animation has been fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * $timeout(function() {\n *   //stagger has reset itself\n *   $animate.leave(kids[5]); //stagger index=0\n *   $animate.leave(kids[6]); //stagger index=1\n * }, 100, false);\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * ## JavaScript-defined Animations\n * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not\n * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.\n *\n * ```js\n * //!annotate=\"YourApp\" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.\n * var ngModule = angular.module('YourApp', ['ngAnimate']);\n * ngModule.animation('.my-crazy-animation', function() {\n *   return {\n *     enter: function(element, done) {\n *       //run the animation here and call done when the animation is complete\n *       return function(cancelled) {\n *         //this (optional) function will be called when the animation\n *         //completes or when the animation is cancelled (the cancelled\n *         //flag will be set to true if cancelled).\n *       };\n *     },\n *     leave: function(element, done) { },\n *     move: function(element, done) { },\n *\n *     //animation that can be triggered before the class is added\n *     beforeAddClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is added\n *     addClass: function(element, className, done) { },\n *\n *     //animation that can be triggered before the class is removed\n *     beforeRemoveClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is removed\n *     removeClass: function(element, className, done) { }\n *   };\n * });\n * ```\n *\n * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run\n * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits\n * the element's CSS class attribute value and then run the matching animation event function (if found).\n * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will\n * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).\n *\n * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.\n * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,\n * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation\n * or transition code that is defined via a stylesheet).\n *\n *\n * ### Applying Directive-specific Styles to an Animation\n * In some cases a directive or service may want to provide `$animate` with extra details that the animation will\n * include into its animation. Let's say for example we wanted to render an animation that animates an element\n * towards the mouse coordinates as to where the user clicked last. By collecting the X/Y coordinates of the click\n * (via the event parameter) we can set the `top` and `left` styles into an object and pass that into our function\n * call to `$animate.addClass`.\n *\n * ```js\n * canvas.on('click', function(e) {\n *   $animate.addClass(element, 'on', {\n *     to: {\n *       left : e.client.x + 'px',\n *       top : e.client.y + 'px'\n *     }\n *   }):\n * });\n * ```\n *\n * Now when the animation runs, and a transition or keyframe animation is picked up, then the animation itself will\n * also include and transition the styling of the `left` and `top` properties into its running animation. If we want\n * to provide some starting animation values then we can do so by placing the starting animations styles into an object\n * called `from` in the same object as the `to` animations.\n *\n * ```js\n * canvas.on('click', function(e) {\n *   $animate.addClass(element, 'on', {\n *     from: {\n *        position: 'absolute',\n *        left: '0px',\n *        top: '0px'\n *     },\n *     to: {\n *       left : e.client.x + 'px',\n *       top : e.client.y + 'px'\n *     }\n *   }):\n * });\n * ```\n *\n * Once the animation is complete or cancelled then the union of both the before and after styles are applied to the\n * element. If `ngAnimate` is not present then the styles will be applied immediately.\n *\n */\n\nangular.module('ngAnimate', ['ng'])\n\n  /**\n   * @ngdoc provider\n   * @name $animateProvider\n   * @description\n   *\n   * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.\n   * When an animation is triggered, the $animate service will query the $animate service to find any animations that match\n   * the provided name value.\n   *\n   * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n   *\n   * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n   *\n   */\n  .directive('ngAnimateChildren', function() {\n    var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren';\n    return function(scope, element, attrs) {\n      var val = attrs.ngAnimateChildren;\n      if (angular.isString(val) && val.length === 0) { //empty attribute\n        element.data(NG_ANIMATE_CHILDREN, true);\n      } else {\n        scope.$watch(val, function(value) {\n          element.data(NG_ANIMATE_CHILDREN, !!value);\n        });\n      }\n    };\n  })\n\n  //this private service is only used within CSS-enabled animations\n  //IE8 + IE9 do not support rAF natively, but that is fine since they\n  //also don't support transitions and keyframes which means that the code\n  //below will never be used by the two browsers.\n  .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) {\n    var bod = $document[0].body;\n    return function(fn) {\n      //the returned function acts as the cancellation function\n      return $$rAF(function() {\n        //the line below will force the browser to perform a repaint\n        //so that all the animated elements within the animation frame\n        //will be properly updated and drawn on screen. This is\n        //required to perform multi-class CSS based animations with\n        //Firefox. DO NOT REMOVE THIS LINE.\n        var a = bod.offsetWidth + 1;\n        fn();\n      });\n    };\n  }])\n\n  .config(['$provide', '$animateProvider', function($provide, $animateProvider) {\n    var noop = angular.noop;\n    var forEach = angular.forEach;\n    var selectors = $animateProvider.$$selectors;\n    var isArray = angular.isArray;\n    var isString = angular.isString;\n    var isObject = angular.isObject;\n\n    var ELEMENT_NODE = 1;\n    var NG_ANIMATE_STATE = '$$ngAnimateState';\n    var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren';\n    var NG_ANIMATE_CLASS_NAME = 'ng-animate';\n    var rootAnimateState = {running: true};\n\n    function extractElementNode(element) {\n      for (var i = 0; i < element.length; i++) {\n        var elm = element[i];\n        if (elm.nodeType == ELEMENT_NODE) {\n          return elm;\n        }\n      }\n    }\n\n    function prepareElement(element) {\n      return element && angular.element(element);\n    }\n\n    function stripCommentsFromElement(element) {\n      return angular.element(extractElementNode(element));\n    }\n\n    function isMatchingElement(elm1, elm2) {\n      return extractElementNode(elm1) == extractElementNode(elm2);\n    }\n\n    $provide.decorator('$animate',\n        ['$delegate', '$$q', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document', '$templateRequest',\n function($delegate,   $$q,   $injector,   $sniffer,   $rootElement,   $$asyncCallback,   $rootScope,   $document,   $templateRequest) {\n\n      $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);\n\n      // Wait until all directive and route-related templates are downloaded and\n      // compiled. The $templateRequest.totalPendingRequests variable keeps track of\n      // all of the remote templates being currently downloaded. If there are no\n      // templates currently downloading then the watcher will still fire anyway.\n      var deregisterWatch = $rootScope.$watch(\n        function() { return $templateRequest.totalPendingRequests; },\n        function(val, oldVal) {\n          if (val !== 0) return;\n          deregisterWatch();\n\n          // Now that all templates have been downloaded, $animate will wait until\n          // the post digest queue is empty before enabling animations. By having two\n          // calls to $postDigest calls we can ensure that the flag is enabled at the\n          // very end of the post digest queue. Since all of the animations in $animate\n          // use $postDigest, it's important that the code below executes at the end.\n          // This basically means that the page is fully downloaded and compiled before\n          // any animations are triggered.\n          $rootScope.$$postDigest(function() {\n            $rootScope.$$postDigest(function() {\n              rootAnimateState.running = false;\n            });\n          });\n        }\n      );\n\n      var globalAnimationCounter = 0;\n      var classNameFilter = $animateProvider.classNameFilter();\n      var isAnimatableClassName = !classNameFilter\n              ? function() { return true; }\n              : function(className) {\n                return classNameFilter.test(className);\n              };\n\n      function classBasedAnimationsBlocked(element, setter) {\n        var data = element.data(NG_ANIMATE_STATE) || {};\n        if (setter) {\n          data.running = true;\n          data.structural = true;\n          element.data(NG_ANIMATE_STATE, data);\n        }\n        return data.disabled || (data.running && data.structural);\n      }\n\n      function runAnimationPostDigest(fn) {\n        var cancelFn, defer = $$q.defer();\n        defer.promise.$$cancelFn = function() {\n          cancelFn && cancelFn();\n        };\n        $rootScope.$$postDigest(function() {\n          cancelFn = fn(function() {\n            defer.resolve();\n          });\n        });\n        return defer.promise;\n      }\n\n      function parseAnimateOptions(options) {\n        // some plugin code may still be passing in the callback\n        // function as the last param for the $animate methods so\n        // it's best to only allow string or array values for now\n        if (isObject(options)) {\n          if (options.tempClasses && isString(options.tempClasses)) {\n            options.tempClasses = options.tempClasses.split(/\\s+/);\n          }\n          return options;\n        }\n      }\n\n      function resolveElementClasses(element, cache, runningAnimations) {\n        runningAnimations = runningAnimations || {};\n\n        var lookup = {};\n        forEach(runningAnimations, function(data, selector) {\n          forEach(selector.split(' '), function(s) {\n            lookup[s]=data;\n          });\n        });\n\n        var hasClasses = Object.create(null);\n        forEach((element.attr('class') || '').split(/\\s+/), function(className) {\n          hasClasses[className] = true;\n        });\n\n        var toAdd = [], toRemove = [];\n        forEach((cache && cache.classes) || [], function(status, className) {\n          var hasClass = hasClasses[className];\n          var matchingAnimation = lookup[className] || {};\n\n          // When addClass and removeClass is called then $animate will check to\n          // see if addClass and removeClass cancel each other out. When there are\n          // more calls to removeClass than addClass then the count falls below 0\n          // and then the removeClass animation will be allowed. Otherwise if the\n          // count is above 0 then that means an addClass animation will commence.\n          // Once an animation is allowed then the code will also check to see if\n          // there exists any on-going animation that is already adding or remvoing\n          // the matching CSS class.\n          if (status === false) {\n            //does it have the class or will it have the class\n            if (hasClass || matchingAnimation.event == 'addClass') {\n              toRemove.push(className);\n            }\n          } else if (status === true) {\n            //is the class missing or will it be removed?\n            if (!hasClass || matchingAnimation.event == 'removeClass') {\n              toAdd.push(className);\n            }\n          }\n        });\n\n        return (toAdd.length + toRemove.length) > 0 && [toAdd.join(' '), toRemove.join(' ')];\n      }\n\n      function lookup(name) {\n        if (name) {\n          var matches = [],\n              flagMap = {},\n              classes = name.substr(1).split('.');\n\n          //the empty string value is the default animation\n          //operation which performs CSS transition and keyframe\n          //animations sniffing. This is always included for each\n          //element animation procedure if the browser supports\n          //transitions and/or keyframe animations. The default\n          //animation is added to the top of the list to prevent\n          //any previous animations from affecting the element styling\n          //prior to the element being animated.\n          if ($sniffer.transitions || $sniffer.animations) {\n            matches.push($injector.get(selectors['']));\n          }\n\n          for (var i=0; i < classes.length; i++) {\n            var klass = classes[i],\n                selectorFactoryName = selectors[klass];\n            if (selectorFactoryName && !flagMap[klass]) {\n              matches.push($injector.get(selectorFactoryName));\n              flagMap[klass] = true;\n            }\n          }\n          return matches;\n        }\n      }\n\n      function animationRunner(element, animationEvent, className, options) {\n        //transcluded directives may sometimes fire an animation using only comment nodes\n        //best to catch this early on to prevent any animation operations from occurring\n        var node = element[0];\n        if (!node) {\n          return;\n        }\n\n        if (options) {\n          options.to = options.to || {};\n          options.from = options.from || {};\n        }\n\n        var classNameAdd;\n        var classNameRemove;\n        if (isArray(className)) {\n          classNameAdd = className[0];\n          classNameRemove = className[1];\n          if (!classNameAdd) {\n            className = classNameRemove;\n            animationEvent = 'removeClass';\n          } else if (!classNameRemove) {\n            className = classNameAdd;\n            animationEvent = 'addClass';\n          } else {\n            className = classNameAdd + ' ' + classNameRemove;\n          }\n        }\n\n        var isSetClassOperation = animationEvent == 'setClass';\n        var isClassBased = isSetClassOperation\n                           || animationEvent == 'addClass'\n                           || animationEvent == 'removeClass'\n                           || animationEvent == 'animate';\n\n        var currentClassName = element.attr('class');\n        var classes = currentClassName + ' ' + className;\n        if (!isAnimatableClassName(classes)) {\n          return;\n        }\n\n        var beforeComplete = noop,\n            beforeCancel = [],\n            before = [],\n            afterComplete = noop,\n            afterCancel = [],\n            after = [];\n\n        var animationLookup = (' ' + classes).replace(/\\s+/g,'.');\n        forEach(lookup(animationLookup), function(animationFactory) {\n          var created = registerAnimation(animationFactory, animationEvent);\n          if (!created && isSetClassOperation) {\n            registerAnimation(animationFactory, 'addClass');\n            registerAnimation(animationFactory, 'removeClass');\n          }\n        });\n\n        function registerAnimation(animationFactory, event) {\n          var afterFn = animationFactory[event];\n          var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)];\n          if (afterFn || beforeFn) {\n            if (event == 'leave') {\n              beforeFn = afterFn;\n              //when set as null then animation knows to skip this phase\n              afterFn = null;\n            }\n            after.push({\n              event: event, fn: afterFn\n            });\n            before.push({\n              event: event, fn: beforeFn\n            });\n            return true;\n          }\n        }\n\n        function run(fns, cancellations, allCompleteFn) {\n          var animations = [];\n          forEach(fns, function(animation) {\n            animation.fn && animations.push(animation);\n          });\n\n          var count = 0;\n          function afterAnimationComplete(index) {\n            if (cancellations) {\n              (cancellations[index] || noop)();\n              if (++count < animations.length) return;\n              cancellations = null;\n            }\n            allCompleteFn();\n          }\n\n          //The code below adds directly to the array in order to work with\n          //both sync and async animations. Sync animations are when the done()\n          //operation is called right away. DO NOT REFACTOR!\n          forEach(animations, function(animation, index) {\n            var progress = function() {\n              afterAnimationComplete(index);\n            };\n            switch (animation.event) {\n              case 'setClass':\n                cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress, options));\n                break;\n              case 'animate':\n                cancellations.push(animation.fn(element, className, options.from, options.to, progress));\n                break;\n              case 'addClass':\n                cancellations.push(animation.fn(element, classNameAdd || className,     progress, options));\n                break;\n              case 'removeClass':\n                cancellations.push(animation.fn(element, classNameRemove || className,  progress, options));\n                break;\n              default:\n                cancellations.push(animation.fn(element, progress, options));\n                break;\n            }\n          });\n\n          if (cancellations && cancellations.length === 0) {\n            allCompleteFn();\n          }\n        }\n\n        return {\n          node: node,\n          event: animationEvent,\n          className: className,\n          isClassBased: isClassBased,\n          isSetClassOperation: isSetClassOperation,\n          applyStyles: function() {\n            if (options) {\n              element.css(angular.extend(options.from || {}, options.to || {}));\n            }\n          },\n          before: function(allCompleteFn) {\n            beforeComplete = allCompleteFn;\n            run(before, beforeCancel, function() {\n              beforeComplete = noop;\n              allCompleteFn();\n            });\n          },\n          after: function(allCompleteFn) {\n            afterComplete = allCompleteFn;\n            run(after, afterCancel, function() {\n              afterComplete = noop;\n              allCompleteFn();\n            });\n          },\n          cancel: function() {\n            if (beforeCancel) {\n              forEach(beforeCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              beforeComplete(true);\n            }\n            if (afterCancel) {\n              forEach(afterCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              afterComplete(true);\n            }\n          }\n        };\n      }\n\n      /**\n       * @ngdoc service\n       * @name $animate\n       * @kind object\n       *\n       * @description\n       * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.\n       * When any of these operations are run, the $animate service\n       * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)\n       * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.\n       *\n       * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives\n       * will work out of the box without any extra configuration.\n       *\n       * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n       *\n       * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n       * ## Callback Promises\n       * With AngularJS 1.3, each of the animation methods, on the `$animate` service, return a promise when called. The\n       * promise itself is then resolved once the animation has completed itself, has been cancelled or has been\n       * skipped due to animations being disabled. (Note that even if the animation is cancelled it will still\n       * call the resolve function of the animation.)\n       *\n       * ```js\n       * $animate.enter(element, container).then(function() {\n       *   //...this is called once the animation is complete...\n       * });\n       * ```\n       *\n       * Also note that, due to the nature of the callback promise, if any Angular-specific code (like changing the scope,\n       * location of the page, etc...) is executed within the callback promise then be sure to wrap the code using\n       * `$scope.$apply(...)`;\n       *\n       * ```js\n       * $animate.leave(element).then(function() {\n       *   $scope.$apply(function() {\n       *     $location.path('/new-page');\n       *   });\n       * });\n       * ```\n       *\n       * An animation can also be cancelled by calling the `$animate.cancel(promise)` method with the provided\n       * promise that was returned when the animation was started.\n       *\n       * ```js\n       * var promise = $animate.addClass(element, 'super-long-animation').then(function() {\n       *   //this will still be called even if cancelled\n       * });\n       *\n       * element.on('click', function() {\n       *   //tooo lazy to wait for the animation to end\n       *   $animate.cancel(promise);\n       * });\n       * ```\n       *\n       * (Keep in mind that the promise cancellation is unique to `$animate` since promises in\n       * general cannot be cancelled.)\n       *\n       */\n      return {\n        /**\n         * @ngdoc method\n         * @name $animate#animate\n         * @kind function\n         *\n         * @description\n         * Performs an inline animation on the element which applies the provided `to` and `from` CSS styles to the element.\n         * If any detected CSS transition, keyframe or JavaScript matches the provided `className` value then the animation\n         * will take on the provided styles. For example, if a transition animation is set for the given className then the\n         * provided `from` and `to` styles will be applied alongside the given transition. If a JavaScript animation is\n         * detected then the provided styles will be given in as function paramters.\n         *\n         * ```js\n         * ngModule.animation('.my-inline-animation', function() {\n         *   return {\n         *     animate : function(element, className, from, to, done) {\n         *       //styles\n         *     }\n         *   }\n         * });\n         * ```\n         *\n         * Below is a breakdown of each step that occurs during the `animate` animation:\n         *\n         * | Animation Step                                                                                                    | What the element class attribute looks like                |\n         * |-------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------|\n         * | 1. $animate.animate(...) is called                                                                                | class=\"my-animation\"                                       |\n         * | 2. $animate waits for the next digest to start the animation                                                      | class=\"my-animation ng-animate\"                            |\n         * | 3. $animate runs the JavaScript-defined animations detected on the element                                        | class=\"my-animation ng-animate\"                            |\n         * | 4. the className class value is added to the element                                                              | class=\"my-animation ng-animate className\"                  |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay                       | class=\"my-animation ng-animate className\"                  |\n         * | 6. $animate blocks all CSS transitions on the element to ensure the .className class styling is applied right away| class=\"my-animation ng-animate className\"                  |\n         * | 7. $animate applies the provided collection of `from` CSS styles to the element                                   | class=\"my-animation ng-animate className\"                  |\n         * | 8. $animate waits for a single animation frame (this performs a reflow)                                           | class=\"my-animation ng-animate className\"                  |\n         * | 9. $animate removes the CSS transition block placed on the element                                                | class=\"my-animation ng-animate className\"                  |\n         * | 10. the className-active class is added (this triggers the CSS transition/animation)                              | class=\"my-animation ng-animate className className-active\" |\n         * | 11. $animate applies the collection of `to` CSS styles to the element which are then handled by the transition    | class=\"my-animation ng-animate className className-active\" |\n         * | 12. $animate waits for the animation to complete (via events and timeout)                                         | class=\"my-animation ng-animate className className-active\" |\n         * | 13. The animation ends and all generated CSS classes are removed from the element                                 | class=\"my-animation\"                                       |\n         * | 14. The returned promise is resolved.                                                                             | class=\"my-animation\"                                       |\n         *\n         * @param {DOMElement} element the element that will be the focus of the enter animation\n         * @param {object} from a collection of CSS styles that will be applied to the element at the start of the animation\n         * @param {object} to a collection of CSS styles that the element will animate towards\n         * @param {string=} className an optional CSS class that will be added to the element for the duration of the animation (the default class is `ng-inline-animate`)\n         * @param {object=} options an optional collection of options that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        animate: function(element, from, to, className, options) {\n          className = className || 'ng-inline-animate';\n          options = parseAnimateOptions(options) || {};\n          options.from = to ? from : null;\n          options.to   = to ? to : from;\n\n          return runAnimationPostDigest(function(done) {\n            return performAnimation('animate', className, stripCommentsFromElement(element), null, null, noop, options, done);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#enter\n         * @kind function\n         *\n         * @description\n         * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once\n         * the animation is started, the following CSS classes will be present on the element for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during enter animation:\n         *\n         * | Animation Step                                                                                                    | What the element class attribute looks like              |\n         * |-------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------|\n         * | 1. $animate.enter(...) is called                                                                                  | class=\"my-animation\"                                     |\n         * | 2. element is inserted into the parentElement element or beside the afterElement element                          | class=\"my-animation\"                                     |\n         * | 3. $animate waits for the next digest to start the animation                                                      | class=\"my-animation ng-animate\"                          |\n         * | 4. $animate runs the JavaScript-defined animations detected on the element                                        | class=\"my-animation ng-animate\"                          |\n         * | 5. the .ng-enter class is added to the element                                                                    | class=\"my-animation ng-animate ng-enter\"                 |\n         * | 6. $animate scans the element styles to get the CSS transition/animation duration and delay                       | class=\"my-animation ng-animate ng-enter\"                 |\n         * | 7. $animate blocks all CSS transitions on the element to ensure the .ng-enter class styling is applied right away | class=\"my-animation ng-animate ng-enter\"                 |\n         * | 8. $animate waits for a single animation frame (this performs a reflow)                                           | class=\"my-animation ng-animate ng-enter\"                 |\n         * | 9. $animate removes the CSS transition block placed on the element                                                | class=\"my-animation ng-animate ng-enter\"                 |\n         * | 10. the .ng-enter-active class is added (this triggers the CSS transition/animation)                              | class=\"my-animation ng-animate ng-enter ng-enter-active\" |\n         * | 11. $animate waits for the animation to complete (via events and timeout)                                         | class=\"my-animation ng-animate ng-enter ng-enter-active\" |\n         * | 12. The animation ends and all generated CSS classes are removed from the element                                 | class=\"my-animation\"                                     |\n         * | 13. The returned promise is resolved.                                                                             | class=\"my-animation\"                                     |\n         *\n         * @param {DOMElement} element the element that will be the focus of the enter animation\n         * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation\n         * @param {object=} options an optional collection of options that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        enter: function(element, parentElement, afterElement, options) {\n          options = parseAnimateOptions(options);\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          classBasedAnimationsBlocked(element, true);\n          $delegate.enter(element, parentElement, afterElement);\n          return runAnimationPostDigest(function(done) {\n            return performAnimation('enter', 'ng-enter', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#leave\n         * @kind function\n         *\n         * @description\n         * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during leave animation:\n         *\n         * | Animation Step                                                                                                    | What the element class attribute looks like              |\n         * |-------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------|\n         * | 1. $animate.leave(...) is called                                                                                  | class=\"my-animation\"                                     |\n         * | 2. $animate runs the JavaScript-defined animations detected on the element                                        | class=\"my-animation ng-animate\"                          |\n         * | 3. $animate waits for the next digest to start the animation                                                      | class=\"my-animation ng-animate\"                          |\n         * | 4. the .ng-leave class is added to the element                                                                    | class=\"my-animation ng-animate ng-leave\"                 |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay                       | class=\"my-animation ng-animate ng-leave\"                 |\n         * | 6. $animate blocks all CSS transitions on the element to ensure the .ng-leave class styling is applied right away | class=\"my-animation ng-animate ng-leave\"                 |\n         * | 7. $animate waits for a single animation frame (this performs a reflow)                                           | class=\"my-animation ng-animate ng-leave\"                 |\n         * | 8. $animate removes the CSS transition block placed on the element                                                | class=\"my-animation ng-animate ng-leave\"                 |\n         * | 9. the .ng-leave-active class is added (this triggers the CSS transition/animation)                               | class=\"my-animation ng-animate ng-leave ng-leave-active\" |\n         * | 10. $animate waits for the animation to complete (via events and timeout)                                         | class=\"my-animation ng-animate ng-leave ng-leave-active\" |\n         * | 11. The animation ends and all generated CSS classes are removed from the element                                 | class=\"my-animation\"                                     |\n         * | 12. The element is removed from the DOM                                                                           | ...                                                      |\n         * | 13. The returned promise is resolved.                                                                             | ...                                                      |\n         *\n         * @param {DOMElement} element the element that will be the focus of the leave animation\n         * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        leave: function(element, options) {\n          options = parseAnimateOptions(options);\n          element = angular.element(element);\n\n          cancelChildAnimations(element);\n          classBasedAnimationsBlocked(element, true);\n          return runAnimationPostDigest(function(done) {\n            return performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() {\n              $delegate.leave(element);\n            }, options, done);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#move\n         * @kind function\n         *\n         * @description\n         * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or\n         * add the element directly after the afterElement element if present. Then the move animation will be run. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during move animation:\n         *\n         * | Animation Step                                                                                                   | What the element class attribute looks like            |\n         * |------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|\n         * | 1. $animate.move(...) is called                                                                                  | class=\"my-animation\"                                   |\n         * | 2. element is moved into the parentElement element or beside the afterElement element                            | class=\"my-animation\"                                   |\n         * | 3. $animate waits for the next digest to start the animation                                                     | class=\"my-animation ng-animate\"                        |\n         * | 4. $animate runs the JavaScript-defined animations detected on the element                                       | class=\"my-animation ng-animate\"                        |\n         * | 5. the .ng-move class is added to the element                                                                    | class=\"my-animation ng-animate ng-move\"                |\n         * | 6. $animate scans the element styles to get the CSS transition/animation duration and delay                      | class=\"my-animation ng-animate ng-move\"                |\n         * | 7. $animate blocks all CSS transitions on the element to ensure the .ng-move class styling is applied right away | class=\"my-animation ng-animate ng-move\"                |\n         * | 8. $animate waits for a single animation frame (this performs a reflow)                                          | class=\"my-animation ng-animate ng-move\"                |\n         * | 9. $animate removes the CSS transition block placed on the element                                               | class=\"my-animation ng-animate ng-move\"                |\n         * | 10. the .ng-move-active class is added (this triggers the CSS transition/animation)                              | class=\"my-animation ng-animate ng-move ng-move-active\" |\n         * | 11. $animate waits for the animation to complete (via events and timeout)                                        | class=\"my-animation ng-animate ng-move ng-move-active\" |\n         * | 12. The animation ends and all generated CSS classes are removed from the element                                | class=\"my-animation\"                                   |\n         * | 13. The returned promise is resolved.                                                                            | class=\"my-animation\"                                   |\n         *\n         * @param {DOMElement} element the element that will be the focus of the move animation\n         * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation\n         * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        move: function(element, parentElement, afterElement, options) {\n          options = parseAnimateOptions(options);\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          cancelChildAnimations(element);\n          classBasedAnimationsBlocked(element, true);\n          $delegate.move(element, parentElement, afterElement);\n          return runAnimationPostDigest(function(done) {\n            return performAnimation('move', 'ng-move', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#addClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.\n         * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide\n         * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions\n         * or keyframes are defined on the -add-active or base CSS class).\n         *\n         * Below is a breakdown of each step that occurs during addClass animation:\n         *\n         * | Animation Step                                                                                     | What the element class attribute looks like                      |\n         * |----------------------------------------------------------------------------------------------------|------------------------------------------------------------------|\n         * | 1. $animate.addClass(element, 'super') is called                                                   | class=\"my-animation\"                                             |\n         * | 2. $animate runs the JavaScript-defined animations detected on the element                         | class=\"my-animation ng-animate\"                                  |\n         * | 3. the .super-add class is added to the element                                                    | class=\"my-animation ng-animate super-add\"                        |\n         * | 4. $animate waits for a single animation frame (this performs a reflow)                            | class=\"my-animation ng-animate super-add\"                        |\n         * | 5. the .super and .super-add-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate super super-add super-add-active\" |\n         * | 6. $animate scans the element styles to get the CSS transition/animation duration and delay        | class=\"my-animation ng-animate super super-add super-add-active\" |\n         * | 7. $animate waits for the animation to complete (via events and timeout)                           | class=\"my-animation ng-animate super super-add super-add-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element                   | class=\"my-animation super\"                                       |\n         * | 9. The super class is kept on the element                                                          | class=\"my-animation super\"                                       |\n         * | 10. The returned promise is resolved.                                                              | class=\"my-animation super\"                                       |\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be added to the element and then animated\n         * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        addClass: function(element, className, options) {\n          return this.setClass(element, className, [], options);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#removeClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value\n         * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in\n         * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if\n         * no CSS transitions or keyframes are defined on the -remove or base CSS classes).\n         *\n         * Below is a breakdown of each step that occurs during removeClass animation:\n         *\n         * | Animation Step                                                                                                   | What the element class attribute looks like                      |\n         * |------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------|\n         * | 1. $animate.removeClass(element, 'super') is called                                                              | class=\"my-animation super\"                                       |\n         * | 2. $animate runs the JavaScript-defined animations detected on the element                                       | class=\"my-animation super ng-animate\"                            |\n         * | 3. the .super-remove class is added to the element                                                               | class=\"my-animation super ng-animate super-remove\"               |\n         * | 4. $animate waits for a single animation frame (this performs a reflow)                                          | class=\"my-animation super ng-animate super-remove\"               |\n         * | 5. the .super-remove-active classes are added and .super is removed (this triggers the CSS transition/animation) | class=\"my-animation ng-animate super-remove super-remove-active\" |\n         * | 6. $animate scans the element styles to get the CSS transition/animation duration and delay                      | class=\"my-animation ng-animate super-remove super-remove-active\" |\n         * | 7. $animate waits for the animation to complete (via events and timeout)                                         | class=\"my-animation ng-animate super-remove super-remove-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element                                 | class=\"my-animation\"                                             |\n         * | 9. The returned promise is resolved.                                                                             | class=\"my-animation\"                                             |\n         *\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be animated and then removed from the element\n         * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n        */\n        removeClass: function(element, className, options) {\n          return this.setClass(element, [], className, options);\n        },\n\n        /**\n         *\n         * @ngdoc method\n         * @name $animate#setClass\n         *\n         * @description Adds and/or removes the given CSS classes to and from the element.\n         * Once complete, the done() callback will be fired (if provided).\n         *\n         * | Animation Step                                                                                                                       | What the element class attribute looks like                                          |\n         * |--------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n         * | 1. $animate.setClass(element, 'on', 'off') is called                                                                                 | class=\"my-animation off\"                                                             |\n         * | 2. $animate runs the JavaScript-defined animations detected on the element                                                           | class=\"my-animation ng-animate off\"                                                  |\n         * | 3. the .on-add and .off-remove classes are added to the element                                                                      | class=\"my-animation ng-animate on-add off-remove off\"                                |\n         * | 4. $animate waits for a single animation frame (this performs a reflow)                                                              | class=\"my-animation ng-animate on-add off-remove off\"                                |\n         * | 5. the .on, .on-add-active and .off-remove-active classes are added and .off is removed (this triggers the CSS transition/animation) | class=\"my-animation ng-animate on on-add on-add-active off-remove off-remove-active\" |\n         * | 6. $animate scans the element styles to get the CSS transition/animation duration and delay                                          | class=\"my-animation ng-animate on on-add on-add-active off-remove off-remove-active\" |\n         * | 7. $animate waits for the animation to complete (via events and timeout)                                                             | class=\"my-animation ng-animate on on-add on-add-active off-remove off-remove-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element                                                     | class=\"my-animation on\"                                                              |\n         * | 9. The returned promise is resolved.                                                                                                 | class=\"my-animation on\"                                                              |\n         *\n         * @param {DOMElement} element the element which will have its CSS classes changed\n         *   removed from it\n         * @param {string} add the CSS classes which will be added to the element\n         * @param {string} remove the CSS class which will be removed from the element\n         *   CSS classes have been set on the element\n         * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation\n         * @return {Promise} the animation callback promise\n         */\n        setClass: function(element, add, remove, options) {\n          options = parseAnimateOptions(options);\n\n          var STORAGE_KEY = '$$animateClasses';\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n\n          if (classBasedAnimationsBlocked(element)) {\n            return $delegate.$$setClassImmediately(element, add, remove, options);\n          }\n\n          // we're using a combined array for both the add and remove\n          // operations since the ORDER OF addClass and removeClass matters\n          var classes, cache = element.data(STORAGE_KEY);\n          var hasCache = !!cache;\n          if (!cache) {\n            cache = {};\n            cache.classes = {};\n          }\n          classes = cache.classes;\n\n          add = isArray(add) ? add : add.split(' ');\n          forEach(add, function(c) {\n            if (c && c.length) {\n              classes[c] = true;\n            }\n          });\n\n          remove = isArray(remove) ? remove : remove.split(' ');\n          forEach(remove, function(c) {\n            if (c && c.length) {\n              classes[c] = false;\n            }\n          });\n\n          if (hasCache) {\n            if (options && cache.options) {\n              cache.options = angular.extend(cache.options || {}, options);\n            }\n\n            //the digest cycle will combine all the animations into one function\n            return cache.promise;\n          } else {\n            element.data(STORAGE_KEY, cache = {\n              classes: classes,\n              options: options\n            });\n          }\n\n          return cache.promise = runAnimationPostDigest(function(done) {\n            var parentElement = element.parent();\n            var elementNode = extractElementNode(element);\n            var parentNode = elementNode.parentNode;\n            // TODO(matsko): move this code into the animationsDisabled() function once #8092 is fixed\n            if (!parentNode || parentNode['$$NG_REMOVED'] || elementNode['$$NG_REMOVED']) {\n              done();\n              return;\n            }\n\n            var cache = element.data(STORAGE_KEY);\n            element.removeData(STORAGE_KEY);\n\n            var state = element.data(NG_ANIMATE_STATE) || {};\n            var classes = resolveElementClasses(element, cache, state.active);\n            return !classes\n              ? done()\n              : performAnimation('setClass', classes, element, parentElement, null, function() {\n                  if (classes[0]) $delegate.$$addClassImmediately(element, classes[0]);\n                  if (classes[1]) $delegate.$$removeClassImmediately(element, classes[1]);\n                }, cache.options, done);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#cancel\n         * @kind function\n         *\n         * @param {Promise} animationPromise The animation promise that is returned when an animation is started.\n         *\n         * @description\n         * Cancels the provided animation.\n        */\n        cancel: function(promise) {\n          promise.$$cancelFn();\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#enabled\n         * @kind function\n         *\n         * @param {boolean=} value If provided then set the animation on or off.\n         * @param {DOMElement=} element If provided then the element will be used to represent the enable/disable operation\n         * @return {boolean} Current animation state.\n         *\n         * @description\n         * Globally enables/disables animations.\n         *\n        */\n        enabled: function(value, element) {\n          switch (arguments.length) {\n            case 2:\n              if (value) {\n                cleanup(element);\n              } else {\n                var data = element.data(NG_ANIMATE_STATE) || {};\n                data.disabled = true;\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            break;\n\n            case 1:\n              rootAnimateState.disabled = !value;\n            break;\n\n            default:\n              value = !rootAnimateState.disabled;\n            break;\n          }\n          return !!value;\n         }\n      };\n\n      /*\n        all animations call this shared animation triggering function internally.\n        The animationEvent variable refers to the JavaScript animation event that will be triggered\n        and the className value is the name of the animation that will be applied within the\n        CSS code. Element, parentElement and afterElement are provided DOM elements for the animation\n        and the onComplete callback will be fired once the animation is fully complete.\n      */\n      function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, options, doneCallback) {\n        var noopCancel = noop;\n        var runner = animationRunner(element, animationEvent, className, options);\n        if (!runner) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return noopCancel;\n        }\n\n        animationEvent = runner.event;\n        className = runner.className;\n        var elementEvents = angular.element._data(runner.node);\n        elementEvents = elementEvents && elementEvents.events;\n\n        if (!parentElement) {\n          parentElement = afterElement ? afterElement.parent() : element.parent();\n        }\n\n        //skip the animation if animations are disabled, a parent is already being animated,\n        //the element is not currently attached to the document body or then completely close\n        //the animation if any matching animations are not found at all.\n        //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found.\n        if (animationsDisabled(element, parentElement)) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return noopCancel;\n        }\n\n        var ngAnimateState  = element.data(NG_ANIMATE_STATE) || {};\n        var runningAnimations     = ngAnimateState.active || {};\n        var totalActiveAnimations = ngAnimateState.totalActive || 0;\n        var lastAnimation         = ngAnimateState.last;\n        var skipAnimation = false;\n\n        if (totalActiveAnimations > 0) {\n          var animationsToCancel = [];\n          if (!runner.isClassBased) {\n            if (animationEvent == 'leave' && runningAnimations['ng-leave']) {\n              skipAnimation = true;\n            } else {\n              //cancel all animations when a structural animation takes place\n              for (var klass in runningAnimations) {\n                animationsToCancel.push(runningAnimations[klass]);\n              }\n              ngAnimateState = {};\n              cleanup(element, true);\n            }\n          } else if (lastAnimation.event == 'setClass') {\n            animationsToCancel.push(lastAnimation);\n            cleanup(element, className);\n          }\n          else if (runningAnimations[className]) {\n            var current = runningAnimations[className];\n            if (current.event == animationEvent) {\n              skipAnimation = true;\n            } else {\n              animationsToCancel.push(current);\n              cleanup(element, className);\n            }\n          }\n\n          if (animationsToCancel.length > 0) {\n            forEach(animationsToCancel, function(operation) {\n              operation.cancel();\n            });\n          }\n        }\n\n        if (runner.isClassBased\n            && !runner.isSetClassOperation\n            && animationEvent != 'animate'\n            && !skipAnimation) {\n          skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR\n        }\n\n        if (skipAnimation) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          fireDoneCallbackAsync();\n          return noopCancel;\n        }\n\n        runningAnimations     = ngAnimateState.active || {};\n        totalActiveAnimations = ngAnimateState.totalActive || 0;\n\n        if (animationEvent == 'leave') {\n          //there's no need to ever remove the listener since the element\n          //will be removed (destroyed) after the leave animation ends or\n          //is cancelled midway\n          element.one('$destroy', function(e) {\n            var element = angular.element(this);\n            var state = element.data(NG_ANIMATE_STATE);\n            if (state) {\n              var activeLeaveAnimation = state.active['ng-leave'];\n              if (activeLeaveAnimation) {\n                activeLeaveAnimation.cancel();\n                cleanup(element, 'ng-leave');\n              }\n            }\n          });\n        }\n\n        //the ng-animate class does nothing, but it's here to allow for\n        //parent animations to find and cancel child animations when needed\n        element.addClass(NG_ANIMATE_CLASS_NAME);\n        if (options && options.tempClasses) {\n          forEach(options.tempClasses, function(className) {\n            element.addClass(className);\n          });\n        }\n\n        var localAnimationCount = globalAnimationCounter++;\n        totalActiveAnimations++;\n        runningAnimations[className] = runner;\n\n        element.data(NG_ANIMATE_STATE, {\n          last: runner,\n          active: runningAnimations,\n          index: localAnimationCount,\n          totalActive: totalActiveAnimations\n        });\n\n        //first we run the before animations and when all of those are complete\n        //then we perform the DOM operation and run the next set of animations\n        fireBeforeCallbackAsync();\n        runner.before(function(cancelled) {\n          var data = element.data(NG_ANIMATE_STATE);\n          cancelled = cancelled ||\n                        !data || !data.active[className] ||\n                        (runner.isClassBased && data.active[className].event != animationEvent);\n\n          fireDOMOperation();\n          if (cancelled === true) {\n            closeAnimation();\n          } else {\n            fireAfterCallbackAsync();\n            runner.after(closeAnimation);\n          }\n        });\n\n        return runner.cancel;\n\n        function fireDOMCallback(animationPhase) {\n          var eventName = '$animate:' + animationPhase;\n          if (elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) {\n            $$asyncCallback(function() {\n              element.triggerHandler(eventName, {\n                event: animationEvent,\n                className: className\n              });\n            });\n          }\n        }\n\n        function fireBeforeCallbackAsync() {\n          fireDOMCallback('before');\n        }\n\n        function fireAfterCallbackAsync() {\n          fireDOMCallback('after');\n        }\n\n        function fireDoneCallbackAsync() {\n          fireDOMCallback('close');\n          doneCallback();\n        }\n\n        //it is less complicated to use a flag than managing and canceling\n        //timeouts containing multiple callbacks.\n        function fireDOMOperation() {\n          if (!fireDOMOperation.hasBeenRun) {\n            fireDOMOperation.hasBeenRun = true;\n            domOperation();\n          }\n        }\n\n        function closeAnimation() {\n          if (!closeAnimation.hasBeenRun) {\n            if (runner) { //the runner doesn't exist if it fails to instantiate\n              runner.applyStyles();\n            }\n\n            closeAnimation.hasBeenRun = true;\n            if (options && options.tempClasses) {\n              forEach(options.tempClasses, function(className) {\n                element.removeClass(className);\n              });\n            }\n\n            var data = element.data(NG_ANIMATE_STATE);\n            if (data) {\n\n              /* only structural animations wait for reflow before removing an\n                 animation, but class-based animations don't. An example of this\n                 failing would be when a parent HTML tag has a ng-class attribute\n                 causing ALL directives below to skip animations during the digest */\n              if (runner && runner.isClassBased) {\n                cleanup(element, className);\n              } else {\n                $$asyncCallback(function() {\n                  var data = element.data(NG_ANIMATE_STATE) || {};\n                  if (localAnimationCount == data.index) {\n                    cleanup(element, className, animationEvent);\n                  }\n                });\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            }\n            fireDoneCallbackAsync();\n          }\n        }\n      }\n\n      function cancelChildAnimations(element) {\n        var node = extractElementNode(element);\n        if (node) {\n          var nodes = angular.isFunction(node.getElementsByClassName) ?\n            node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) :\n            node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME);\n          forEach(nodes, function(element) {\n            element = angular.element(element);\n            var data = element.data(NG_ANIMATE_STATE);\n            if (data && data.active) {\n              forEach(data.active, function(runner) {\n                runner.cancel();\n              });\n            }\n          });\n        }\n      }\n\n      function cleanup(element, className) {\n        if (isMatchingElement(element, $rootElement)) {\n          if (!rootAnimateState.disabled) {\n            rootAnimateState.running = false;\n            rootAnimateState.structural = false;\n          }\n        } else if (className) {\n          var data = element.data(NG_ANIMATE_STATE) || {};\n\n          var removeAnimations = className === true;\n          if (!removeAnimations && data.active && data.active[className]) {\n            data.totalActive--;\n            delete data.active[className];\n          }\n\n          if (removeAnimations || !data.totalActive) {\n            element.removeClass(NG_ANIMATE_CLASS_NAME);\n            element.removeData(NG_ANIMATE_STATE);\n          }\n        }\n      }\n\n      function animationsDisabled(element, parentElement) {\n        if (rootAnimateState.disabled) {\n          return true;\n        }\n\n        if (isMatchingElement(element, $rootElement)) {\n          return rootAnimateState.running;\n        }\n\n        var allowChildAnimations, parentRunningAnimation, hasParent;\n        do {\n          //the element did not reach the root element which means that it\n          //is not apart of the DOM. Therefore there is no reason to do\n          //any animations on it\n          if (parentElement.length === 0) break;\n\n          var isRoot = isMatchingElement(parentElement, $rootElement);\n          var state = isRoot ? rootAnimateState : (parentElement.data(NG_ANIMATE_STATE) || {});\n          if (state.disabled) {\n            return true;\n          }\n\n          //no matter what, for an animation to work it must reach the root element\n          //this implies that the element is attached to the DOM when the animation is run\n          if (isRoot) {\n            hasParent = true;\n          }\n\n          //once a flag is found that is strictly false then everything before\n          //it will be discarded and all child animations will be restricted\n          if (allowChildAnimations !== false) {\n            var animateChildrenFlag = parentElement.data(NG_ANIMATE_CHILDREN);\n            if (angular.isDefined(animateChildrenFlag)) {\n              allowChildAnimations = animateChildrenFlag;\n            }\n          }\n\n          parentRunningAnimation = parentRunningAnimation ||\n                                   state.running ||\n                                   (state.last && !state.last.isClassBased);\n        }\n        while (parentElement = parentElement.parent());\n\n        return !hasParent || (!allowChildAnimations && parentRunningAnimation);\n      }\n    }]);\n\n    $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow',\n                           function($window,   $sniffer,   $timeout,   $$animateReflow) {\n      // Detect proper transitionend/animationend event names.\n      var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n      // If unprefixed events are not supported but webkit-prefixed are, use the latter.\n      // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n      // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n      // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n      // Register both events in case `window.onanimationend` is not supported because of that,\n      // do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n      // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n      // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition\n      if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        TRANSITION_PROP = 'WebkitTransition';\n        TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n      } else {\n        TRANSITION_PROP = 'transition';\n        TRANSITIONEND_EVENT = 'transitionend';\n      }\n\n      if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        ANIMATION_PROP = 'WebkitAnimation';\n        ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n      } else {\n        ANIMATION_PROP = 'animation';\n        ANIMATIONEND_EVENT = 'animationend';\n      }\n\n      var DURATION_KEY = 'Duration';\n      var PROPERTY_KEY = 'Property';\n      var DELAY_KEY = 'Delay';\n      var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\n      var ANIMATION_PLAYSTATE_KEY = 'PlayState';\n      var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';\n      var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';\n      var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\n      var CLOSING_TIME_BUFFER = 1.5;\n      var ONE_SECOND = 1000;\n\n      var lookupCache = {};\n      var parentCounter = 0;\n      var animationReflowQueue = [];\n      var cancelAnimationReflow;\n      function clearCacheAfterReflow() {\n        if (!cancelAnimationReflow) {\n          cancelAnimationReflow = $$animateReflow(function() {\n            animationReflowQueue = [];\n            cancelAnimationReflow = null;\n            lookupCache = {};\n          });\n        }\n      }\n\n      function afterReflow(element, callback) {\n        if (cancelAnimationReflow) {\n          cancelAnimationReflow();\n        }\n        animationReflowQueue.push(callback);\n        cancelAnimationReflow = $$animateReflow(function() {\n          forEach(animationReflowQueue, function(fn) {\n            fn();\n          });\n\n          animationReflowQueue = [];\n          cancelAnimationReflow = null;\n          lookupCache = {};\n        });\n      }\n\n      var closingTimer = null;\n      var closingTimestamp = 0;\n      var animationElementQueue = [];\n      function animationCloseHandler(element, totalTime) {\n        var node = extractElementNode(element);\n        element = angular.element(node);\n\n        //this item will be garbage collected by the closing\n        //animation timeout\n        animationElementQueue.push(element);\n\n        //but it may not need to cancel out the existing timeout\n        //if the timestamp is less than the previous one\n        var futureTimestamp = Date.now() + totalTime;\n        if (futureTimestamp <= closingTimestamp) {\n          return;\n        }\n\n        $timeout.cancel(closingTimer);\n\n        closingTimestamp = futureTimestamp;\n        closingTimer = $timeout(function() {\n          closeAllAnimations(animationElementQueue);\n          animationElementQueue = [];\n        }, totalTime, false);\n      }\n\n      function closeAllAnimations(elements) {\n        forEach(elements, function(element) {\n          var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n          if (elementData) {\n            forEach(elementData.closeAnimationFns, function(fn) {\n              fn();\n            });\n          }\n        });\n      }\n\n      function getElementAnimationDetails(element, cacheKey) {\n        var data = cacheKey ? lookupCache[cacheKey] : null;\n        if (!data) {\n          var transitionDuration = 0;\n          var transitionDelay = 0;\n          var animationDuration = 0;\n          var animationDelay = 0;\n\n          //we want all the styles defined before and after\n          forEach(element, function(element) {\n            if (element.nodeType == ELEMENT_NODE) {\n              var elementStyles = $window.getComputedStyle(element) || {};\n\n              var transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];\n              transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);\n\n              var transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];\n              transitionDelay  = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);\n\n              var animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];\n              animationDelay   = Math.max(parseMaxTime(elementStyles[ANIMATION_PROP + DELAY_KEY]), animationDelay);\n\n              var aDuration  = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);\n\n              if (aDuration > 0) {\n                aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;\n              }\n              animationDuration = Math.max(aDuration, animationDuration);\n            }\n          });\n          data = {\n            total: 0,\n            transitionDelay: transitionDelay,\n            transitionDuration: transitionDuration,\n            animationDelay: animationDelay,\n            animationDuration: animationDuration\n          };\n          if (cacheKey) {\n            lookupCache[cacheKey] = data;\n          }\n        }\n        return data;\n      }\n\n      function parseMaxTime(str) {\n        var maxValue = 0;\n        var values = isString(str) ?\n          str.split(/\\s*,\\s*/) :\n          [];\n        forEach(values, function(value) {\n          maxValue = Math.max(parseFloat(value) || 0, maxValue);\n        });\n        return maxValue;\n      }\n\n      function getCacheKey(element) {\n        var parentElement = element.parent();\n        var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);\n        if (!parentID) {\n          parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);\n          parentID = parentCounter;\n        }\n        return parentID + '-' + extractElementNode(element).getAttribute('class');\n      }\n\n      function animateSetup(animationEvent, element, className, styles) {\n        var structural = ['ng-enter','ng-leave','ng-move'].indexOf(className) >= 0;\n\n        var cacheKey = getCacheKey(element);\n        var eventCacheKey = cacheKey + ' ' + className;\n        var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;\n\n        var stagger = {};\n        if (itemIndex > 0) {\n          var staggerClassName = className + '-stagger';\n          var staggerCacheKey = cacheKey + ' ' + staggerClassName;\n          var applyClasses = !lookupCache[staggerCacheKey];\n\n          applyClasses && element.addClass(staggerClassName);\n\n          stagger = getElementAnimationDetails(element, staggerCacheKey);\n\n          applyClasses && element.removeClass(staggerClassName);\n        }\n\n        element.addClass(className);\n\n        var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {};\n        var timings = getElementAnimationDetails(element, eventCacheKey);\n        var transitionDuration = timings.transitionDuration;\n        var animationDuration = timings.animationDuration;\n\n        if (structural && transitionDuration === 0 && animationDuration === 0) {\n          element.removeClass(className);\n          return false;\n        }\n\n        var blockTransition = styles || (structural && transitionDuration > 0);\n        var blockAnimation = animationDuration > 0 &&\n                             stagger.animationDelay > 0 &&\n                             stagger.animationDuration === 0;\n\n        var closeAnimationFns = formerData.closeAnimationFns || [];\n        element.data(NG_ANIMATE_CSS_DATA_KEY, {\n          stagger: stagger,\n          cacheKey: eventCacheKey,\n          running: formerData.running || 0,\n          itemIndex: itemIndex,\n          blockTransition: blockTransition,\n          closeAnimationFns: closeAnimationFns\n        });\n\n        var node = extractElementNode(element);\n\n        if (blockTransition) {\n          blockTransitions(node, true);\n          if (styles) {\n            element.css(styles);\n          }\n        }\n\n        if (blockAnimation) {\n          blockAnimations(node, true);\n        }\n\n        return true;\n      }\n\n      function animateRun(animationEvent, element, className, activeAnimationComplete, styles) {\n        var node = extractElementNode(element);\n        var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if (node.getAttribute('class').indexOf(className) == -1 || !elementData) {\n          activeAnimationComplete();\n          return;\n        }\n\n        var activeClassName = '';\n        var pendingClassName = '';\n        forEach(className.split(' '), function(klass, i) {\n          var prefix = (i > 0 ? ' ' : '') + klass;\n          activeClassName += prefix + '-active';\n          pendingClassName += prefix + '-pending';\n        });\n\n        var style = '';\n        var appliedStyles = [];\n        var itemIndex = elementData.itemIndex;\n        var stagger = elementData.stagger;\n        var staggerTime = 0;\n        if (itemIndex > 0) {\n          var transitionStaggerDelay = 0;\n          if (stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {\n            transitionStaggerDelay = stagger.transitionDelay * itemIndex;\n          }\n\n          var animationStaggerDelay = 0;\n          if (stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n            animationStaggerDelay = stagger.animationDelay * itemIndex;\n            appliedStyles.push(CSS_PREFIX + 'animation-play-state');\n          }\n\n          staggerTime = Math.round(Math.max(transitionStaggerDelay, animationStaggerDelay) * 100) / 100;\n        }\n\n        if (!staggerTime) {\n          element.addClass(activeClassName);\n          if (elementData.blockTransition) {\n            blockTransitions(node, false);\n          }\n        }\n\n        var eventCacheKey = elementData.cacheKey + ' ' + activeClassName;\n        var timings = getElementAnimationDetails(element, eventCacheKey);\n        var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);\n        if (maxDuration === 0) {\n          element.removeClass(activeClassName);\n          animateClose(element, className);\n          activeAnimationComplete();\n          return;\n        }\n\n        if (!staggerTime && styles) {\n          if (!timings.transitionDuration) {\n            element.css('transition', timings.animationDuration + 's linear all');\n            appliedStyles.push('transition');\n          }\n          element.css(styles);\n        }\n\n        var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);\n        var maxDelayTime = maxDelay * ONE_SECOND;\n\n        if (appliedStyles.length > 0) {\n          //the element being animated may sometimes contain comment nodes in\n          //the jqLite object, so we're safe to use a single variable to house\n          //the styles since there is always only one element being animated\n          var oldStyle = node.getAttribute('style') || '';\n          if (oldStyle.charAt(oldStyle.length - 1) !== ';') {\n            oldStyle += ';';\n          }\n          node.setAttribute('style', oldStyle + ' ' + style);\n        }\n\n        var startTime = Date.now();\n        var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;\n        var animationTime     = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER;\n        var totalTime         = (staggerTime + animationTime) * ONE_SECOND;\n\n        var staggerTimeout;\n        if (staggerTime > 0) {\n          element.addClass(pendingClassName);\n          staggerTimeout = $timeout(function() {\n            staggerTimeout = null;\n\n            if (timings.transitionDuration > 0) {\n              blockTransitions(node, false);\n            }\n            if (timings.animationDuration > 0) {\n              blockAnimations(node, false);\n            }\n\n            element.addClass(activeClassName);\n            element.removeClass(pendingClassName);\n\n            if (styles) {\n              if (timings.transitionDuration === 0) {\n                element.css('transition', timings.animationDuration + 's linear all');\n              }\n              element.css(styles);\n              appliedStyles.push('transition');\n            }\n          }, staggerTime * ONE_SECOND, false);\n        }\n\n        element.on(css3AnimationEvents, onAnimationProgress);\n        elementData.closeAnimationFns.push(function() {\n          onEnd();\n          activeAnimationComplete();\n        });\n\n        elementData.running++;\n        animationCloseHandler(element, totalTime);\n        return onEnd;\n\n        // This will automatically be called by $animate so\n        // there is no need to attach this internally to the\n        // timeout done method.\n        function onEnd() {\n          element.off(css3AnimationEvents, onAnimationProgress);\n          element.removeClass(activeClassName);\n          element.removeClass(pendingClassName);\n          if (staggerTimeout) {\n            $timeout.cancel(staggerTimeout);\n          }\n          animateClose(element, className);\n          var node = extractElementNode(element);\n          for (var i in appliedStyles) {\n            node.style.removeProperty(appliedStyles[i]);\n          }\n        }\n\n        function onAnimationProgress(event) {\n          event.stopPropagation();\n          var ev = event.originalEvent || event;\n          var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();\n\n          /* Firefox (or possibly just Gecko) likes to not round values up\n           * when a ms measurement is used for the animation */\n          var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n          /* $manualTimeStamp is a mocked timeStamp value which is set\n           * within browserTrigger(). This is only here so that tests can\n           * mock animations properly. Real events fallback to event.timeStamp,\n           * or, if they don't, then a timeStamp is automatically created for them.\n           * We're checking to see if the timeStamp surpasses the expected delay,\n           * but we're using elapsedTime instead of the timeStamp on the 2nd\n           * pre-condition since animations sometimes close off early */\n          if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n            activeAnimationComplete();\n          }\n        }\n      }\n\n      function blockTransitions(node, bool) {\n        node.style[TRANSITION_PROP + PROPERTY_KEY] = bool ? 'none' : '';\n      }\n\n      function blockAnimations(node, bool) {\n        node.style[ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY] = bool ? 'paused' : '';\n      }\n\n      function animateBefore(animationEvent, element, className, styles) {\n        if (animateSetup(animationEvent, element, className, styles)) {\n          return function(cancelled) {\n            cancelled && animateClose(element, className);\n          };\n        }\n      }\n\n      function animateAfter(animationEvent, element, className, afterAnimationComplete, styles) {\n        if (element.data(NG_ANIMATE_CSS_DATA_KEY)) {\n          return animateRun(animationEvent, element, className, afterAnimationComplete, styles);\n        } else {\n          animateClose(element, className);\n          afterAnimationComplete();\n        }\n      }\n\n      function animate(animationEvent, element, className, animationComplete, options) {\n        //If the animateSetup function doesn't bother returning a\n        //cancellation function then it means that there is no animation\n        //to perform at all\n        var preReflowCancellation = animateBefore(animationEvent, element, className, options.from);\n        if (!preReflowCancellation) {\n          clearCacheAfterReflow();\n          animationComplete();\n          return;\n        }\n\n        //There are two cancellation functions: one is before the first\n        //reflow animation and the second is during the active state\n        //animation. The first function will take care of removing the\n        //data from the element which will not make the 2nd animation\n        //happen in the first place\n        var cancel = preReflowCancellation;\n        afterReflow(element, function() {\n          //once the reflow is complete then we point cancel to\n          //the new cancellation function which will remove all of the\n          //animation properties from the active animation\n          cancel = animateAfter(animationEvent, element, className, animationComplete, options.to);\n        });\n\n        return function(cancelled) {\n          (cancel || noop)(cancelled);\n        };\n      }\n\n      function animateClose(element, className) {\n        element.removeClass(className);\n        var data = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if (data) {\n          if (data.running) {\n            data.running--;\n          }\n          if (!data.running || data.running === 0) {\n            element.removeData(NG_ANIMATE_CSS_DATA_KEY);\n          }\n        }\n      }\n\n      return {\n        animate: function(element, className, from, to, animationCompleted, options) {\n          options = options || {};\n          options.from = from;\n          options.to = to;\n          return animate('animate', element, className, animationCompleted, options);\n        },\n\n        enter: function(element, animationCompleted, options) {\n          options = options || {};\n          return animate('enter', element, 'ng-enter', animationCompleted, options);\n        },\n\n        leave: function(element, animationCompleted, options) {\n          options = options || {};\n          return animate('leave', element, 'ng-leave', animationCompleted, options);\n        },\n\n        move: function(element, animationCompleted, options) {\n          options = options || {};\n          return animate('move', element, 'ng-move', animationCompleted, options);\n        },\n\n        beforeSetClass: function(element, add, remove, animationCompleted, options) {\n          options = options || {};\n          var className = suffixClasses(remove, '-remove') + ' ' +\n                          suffixClasses(add, '-add');\n          var cancellationMethod = animateBefore('setClass', element, className, options.from);\n          if (cancellationMethod) {\n            afterReflow(element, animationCompleted);\n            return cancellationMethod;\n          }\n          clearCacheAfterReflow();\n          animationCompleted();\n        },\n\n        beforeAddClass: function(element, className, animationCompleted, options) {\n          options = options || {};\n          var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), options.from);\n          if (cancellationMethod) {\n            afterReflow(element, animationCompleted);\n            return cancellationMethod;\n          }\n          clearCacheAfterReflow();\n          animationCompleted();\n        },\n\n        beforeRemoveClass: function(element, className, animationCompleted, options) {\n          options = options || {};\n          var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), options.from);\n          if (cancellationMethod) {\n            afterReflow(element, animationCompleted);\n            return cancellationMethod;\n          }\n          clearCacheAfterReflow();\n          animationCompleted();\n        },\n\n        setClass: function(element, add, remove, animationCompleted, options) {\n          options = options || {};\n          remove = suffixClasses(remove, '-remove');\n          add = suffixClasses(add, '-add');\n          var className = remove + ' ' + add;\n          return animateAfter('setClass', element, className, animationCompleted, options.to);\n        },\n\n        addClass: function(element, className, animationCompleted, options) {\n          options = options || {};\n          return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted, options.to);\n        },\n\n        removeClass: function(element, className, animationCompleted, options) {\n          options = options || {};\n          return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted, options.to);\n        }\n      };\n\n      function suffixClasses(classes, suffix) {\n        var className = '';\n        classes = isArray(classes) ? classes : classes.split(/\\s+/);\n        forEach(classes, function(klass, i) {\n          if (klass && klass.length > 0) {\n            className += (i > 0 ? ' ' : '') + klass + suffix;\n          }\n        });\n        return className;\n      }\n    }]);\n  }]);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "client/components/angular-animate/bower.json",
    "content": "{\n  \"name\": \"angular-animate\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-animate.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  }\n}\n"
  },
  {
    "path": "client/components/angular-animate/package.json",
    "content": "{\n  \"name\": \"angular-animate\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS module for animations\",\n  \"main\": \"angular-animate.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"animation\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-aria/.bower.json",
    "content": "{\n  \"name\": \"angular-aria\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-aria.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-aria\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"1490dcd1d4df470c3a404655973d13ba1cf1d5a9\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-aria.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-aria\"\n}"
  },
  {
    "path": "client/components/angular-aria/README.md",
    "content": "# packaged angular-aria\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAria).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-aria\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular-aria/angular-aria.js\"></script>\n```\n\nThen add `ngAria` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngAria']);\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular-aria')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-aria\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-aria/angular-aria.js\"></script>\n```\n\nThen add `ngAria` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngAria']);\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/api/ngAria).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-aria/angular-aria.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngAria\n * @description\n *\n * The `ngAria` module provides support for common\n * [<abbr title=\"Accessible Rich Internet Applications\">ARIA</abbr>](http://www.w3.org/TR/wai-aria/)\n * attributes that convey state or semantic information about the application for users\n * of assistive technologies, such as screen readers.\n *\n * <div doc-module-components=\"ngAria\"></div>\n *\n * ## Usage\n *\n * For ngAria to do its magic, simply include the module as a dependency. The directives supported\n * by ngAria are:\n * `ngModel`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`, `ngDblClick`, and `ngMessages`.\n *\n * Below is a more detailed breakdown of the attributes handled by ngAria:\n *\n * | Directive                                   | Supported Attributes                                                                   |\n * |---------------------------------------------|----------------------------------------------------------------------------------------|\n * | {@link ng.directive:ngModel ngModel}        | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required |\n * | {@link ng.directive:ngDisabled ngDisabled}  | aria-disabled                                                                          |\n * | {@link ng.directive:ngShow ngShow}          | aria-hidden                                                                            |\n * | {@link ng.directive:ngHide ngHide}          | aria-hidden                                                                            |\n * | {@link ng.directive:ngClick ngClick}        | tabindex                                                                               |\n * | {@link ng.directive:ngDblclick ngDblclick}  | tabindex                                                                               |\n * | {@link module:ngMessages ngMessages}        | aria-live                                                                              |\n *\n * Find out more information about each directive by reading the\n * {@link guide/accessibility ngAria Developer Guide}.\n *\n * ##Example\n * Using ngDisabled with ngAria:\n * ```html\n * <md-checkbox ng-disabled=\"disabled\">\n * ```\n * Becomes:\n * ```html\n * <md-checkbox ng-disabled=\"disabled\" aria-disabled=\"true\">\n * ```\n *\n * ##Disabling Attributes\n * It's possible to disable individual attributes added by ngAria with the\n * {@link ngAria.$ariaProvider#config config} method. For more details, see the\n * {@link guide/accessibility Developer Guide}.\n */\n /* global -ngAriaModule */\nvar ngAriaModule = angular.module('ngAria', ['ng']).\n                        provider('$aria', $AriaProvider);\n\n/**\n * @ngdoc provider\n * @name $ariaProvider\n *\n * @description\n *\n * Used for configuring the ARIA attributes injected and managed by ngAria.\n *\n * ```js\n * angular.module('myApp', ['ngAria'], function config($ariaProvider) {\n *   $ariaProvider.config({\n *     ariaValue: true,\n *     tabindex: false\n *   });\n * });\n *```\n *\n * ## Dependencies\n * Requires the {@link ngAria} module to be installed.\n *\n */\nfunction $AriaProvider() {\n  var config = {\n    ariaHidden: true,\n    ariaChecked: true,\n    ariaDisabled: true,\n    ariaRequired: true,\n    ariaInvalid: true,\n    ariaMultiline: true,\n    ariaValue: true,\n    tabindex: true\n  };\n\n  /**\n   * @ngdoc method\n   * @name $ariaProvider#config\n   *\n   * @param {object} config object to enable/disable specific ARIA attributes\n   *\n   *  - **ariaHidden** – `{boolean}` – Enables/disables aria-hidden tags\n   *  - **ariaChecked** – `{boolean}` – Enables/disables aria-checked tags\n   *  - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags\n   *  - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags\n   *  - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags\n   *  - **ariaMultiline** – `{boolean}` – Enables/disables aria-multiline tags\n   *  - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags\n   *  - **tabindex** – `{boolean}` – Enables/disables tabindex tags\n   *\n   * @description\n   * Enables/disables various ARIA attributes\n   */\n  this.config = function(newConfig) {\n    config = angular.extend(config, newConfig);\n  };\n\n  function camelCase(input) {\n    return input.replace(/-./g, function(letter, pos) {\n      return letter[1].toUpperCase();\n    });\n  }\n\n\n  function watchExpr(attrName, ariaAttr, negate) {\n    var ariaCamelName = camelCase(ariaAttr);\n    return function(scope, elem, attr) {\n      if (config[ariaCamelName] && !attr[ariaCamelName]) {\n        scope.$watch(attr[attrName], function(boolVal) {\n          if (negate) {\n            boolVal = !boolVal;\n          }\n          elem.attr(ariaAttr, boolVal);\n        });\n      }\n    };\n  }\n\n  /**\n   * @ngdoc service\n   * @name $aria\n   *\n   * @description\n   *\n   * The $aria service contains helper methods for applying common\n   * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.\n   *\n   * ngAria injects common accessibility attributes that tell assistive technologies when HTML\n   * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria,\n   * let's review a code snippet from ngAria itself:\n   *\n   *```js\n   * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) {\n   *   return $aria.$$watchExpr('ngDisabled', 'aria-disabled');\n   * }])\n   *```\n   * Shown above, the ngAria module creates a directive with the same signature as the\n   * traditional `ng-disabled` directive. But this ngAria version is dedicated to\n   * solely managing accessibility attributes. The internal `$aria` service is used to watch the\n   * boolean attribute `ngDisabled`. If it has not been explicitly set by the developer,\n   * `aria-disabled` is injected as an attribute with its value synchronized to the value in\n   * `ngDisabled`.\n   *\n   * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do\n   * anything to enable this feature. The `aria-disabled` attribute is automatically managed\n   * simply as a silent side-effect of using `ng-disabled` with the ngAria module.\n   *\n   * The full list of directives that interface with ngAria:\n   * * **ngModel**\n   * * **ngShow**\n   * * **ngHide**\n   * * **ngClick**\n   * * **ngDblclick**\n   * * **ngMessages**\n   * * **ngDisabled**\n   *\n   * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each\n   * directive.\n   *\n   *\n   * ## Dependencies\n   * Requires the {@link ngAria} module to be installed.\n   */\n  this.$get = function() {\n    return {\n      config: function(key) {\n        return config[camelCase(key)];\n      },\n      $$watchExpr: watchExpr\n    };\n  };\n}\n\nvar ngAriaTabindex = ['$aria', function($aria) {\n  return function(scope, elem, attr) {\n    if ($aria.config('tabindex') && !elem.attr('tabindex')) {\n      elem.attr('tabindex', 0);\n    }\n  };\n}];\n\nngAriaModule.directive('ngShow', ['$aria', function($aria) {\n  return $aria.$$watchExpr('ngShow', 'aria-hidden', true);\n}])\n.directive('ngHide', ['$aria', function($aria) {\n  return $aria.$$watchExpr('ngHide', 'aria-hidden', false);\n}])\n.directive('ngModel', ['$aria', function($aria) {\n\n  function shouldAttachAttr(attr, elem) {\n    return $aria.config(attr) && !elem.attr(attr);\n  }\n\n  function getShape(attr, elem) {\n    var type = attr.type,\n        role = attr.role;\n\n    return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' :\n           ((type || role) === 'radio'    || role === 'menuitemradio') ? 'radio' :\n           (type === 'range'              || role === 'progressbar' || role === 'slider') ? 'range' :\n           (type || role) === 'textbox'   || elem[0].nodeName === 'TEXTAREA' ? 'multiline' : '';\n  }\n\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elem, attr, ngModel) {\n      var shape = getShape(attr, elem);\n      var needsTabIndex = shouldAttachAttr('tabindex', elem);\n\n      function ngAriaWatchModelValue() {\n        return ngModel.$modelValue;\n      }\n\n      function getRadioReaction() {\n        if (needsTabIndex) {\n          needsTabIndex = false;\n          return function ngAriaRadioReaction(newVal) {\n            var boolVal = newVal === attr.value;\n            elem.attr('aria-checked', boolVal);\n            elem.attr('tabindex', 0 - !boolVal);\n          };\n        } else {\n          return function ngAriaRadioReaction(newVal) {\n            elem.attr('aria-checked', newVal === attr.value);\n          };\n        }\n      }\n\n      function ngAriaCheckboxReaction(newVal) {\n        elem.attr('aria-checked', !!newVal);\n      }\n\n      switch (shape) {\n        case 'radio':\n        case 'checkbox':\n          if (shouldAttachAttr('aria-checked', elem)) {\n            scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?\n                getRadioReaction() : ngAriaCheckboxReaction);\n          }\n          break;\n        case 'range':\n          if ($aria.config('ariaValue')) {\n            if (attr.min && !elem.attr('aria-valuemin')) {\n              elem.attr('aria-valuemin', attr.min);\n            }\n            if (attr.max && !elem.attr('aria-valuemax')) {\n              elem.attr('aria-valuemax', attr.max);\n            }\n            if (!elem.attr('aria-valuenow')) {\n              scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {\n                elem.attr('aria-valuenow', newVal);\n              });\n            }\n          }\n          break;\n        case 'multiline':\n          if (shouldAttachAttr('aria-multiline', elem)) {\n            elem.attr('aria-multiline', true);\n          }\n          break;\n      }\n\n      if (needsTabIndex) {\n        elem.attr('tabindex', 0);\n      }\n\n      if (ngModel.$validators.required && shouldAttachAttr('aria-required', elem)) {\n        scope.$watch(function ngAriaRequiredWatch() {\n          return ngModel.$error.required;\n        }, function ngAriaRequiredReaction(newVal) {\n          elem.attr('aria-required', !!newVal);\n        });\n      }\n\n      if (shouldAttachAttr('aria-invalid', elem)) {\n        scope.$watch(function ngAriaInvalidWatch() {\n          return ngModel.$invalid;\n        }, function ngAriaInvalidReaction(newVal) {\n          elem.attr('aria-invalid', !!newVal);\n        });\n      }\n    }\n  };\n}])\n.directive('ngDisabled', ['$aria', function($aria) {\n  return $aria.$$watchExpr('ngDisabled', 'aria-disabled');\n}])\n.directive('ngMessages', function() {\n  return {\n    restrict: 'A',\n    require: '?ngMessages',\n    link: function(scope, elem, attr, ngMessages) {\n      if (!elem.attr('aria-live')) {\n        elem.attr('aria-live', 'assertive');\n      }\n    }\n  };\n})\n.directive('ngClick', ngAriaTabindex)\n.directive('ngDblclick', ngAriaTabindex);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "client/components/angular-aria/bower.json",
    "content": "{\n  \"name\": \"angular-aria\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-aria.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  }\n}\n"
  },
  {
    "path": "client/components/angular-aria/package.json",
    "content": "{\n  \"name\": \"angular-aria\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS module for making accessibility easy\",\n  \"main\": \"angular-aria.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"accessibility\",\n    \"a11y\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-i18n/.bower.json",
    "content": "{\n  \"name\": \"angular-i18n\",\n  \"version\": \"1.3.5\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"components\"\n  ],\n  \"homepage\": \"https://github.com/angular/bower-angular-i18n\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"6d08b1531d2c3d2b29639c2e5d68ae0ce4873b45\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-i18n.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-i18n\"\n}"
  },
  {
    "path": "client/components/angular-i18n/README.md",
    "content": "# packaged angular-i18n\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-i18n\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular-i18n/angular-locale_YOUR-LOCALE.js\"></script>\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular-i18n')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-i18n\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-i18n/angular-locale_YOUR-LOCALE.js\"></script>\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/guide/i18n).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_aa-dj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Acaada\",\n      \"Etleeni\",\n      \"Talaata\",\n      \"Arbaqa\",\n      \"Kamiisi\",\n      \"Gumqata\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Leqeeni\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Aca\",\n      \"Etl\",\n      \"Tal\",\n      \"Arb\",\n      \"Kam\",\n      \"Gum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Fdj\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"aa-dj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_aa-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Acaada\",\n      \"Etleeni\",\n      \"Talaata\",\n      \"Arbaqa\",\n      \"Kamiisi\",\n      \"Gumqata\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Liiqen\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Aca\",\n      \"Etl\",\n      \"Tal\",\n      \"Arb\",\n      \"Kam\",\n      \"Gum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"aa-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_aa-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Acaada\",\n      \"Etleeni\",\n      \"Talaata\",\n      \"Arbaqa\",\n      \"Kamiisi\",\n      \"Gumqata\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Liiqen\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Aca\",\n      \"Etl\",\n      \"Tal\",\n      \"Arb\",\n      \"Kam\",\n      \"Gum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"aa-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_aa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Acaada\",\n      \"Etleeni\",\n      \"Talaata\",\n      \"Arbaqa\",\n      \"Kamiisi\",\n      \"Gumqata\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Liiqen\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Aca\",\n      \"Etl\",\n      \"Tal\",\n      \"Arb\",\n      \"Kam\",\n      \"Gum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"aa\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_af-na.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vm.\",\n      \"nm.\"\n    ],\n    \"DAY\": [\n      \"Sondag\",\n      \"Maandag\",\n      \"Dinsdag\",\n      \"Woensdag\",\n      \"Donderdag\",\n      \"Vrydag\",\n      \"Saterdag\"\n    ],\n    \"MONTH\": [\n      \"Januarie\",\n      \"Februarie\",\n      \"Maart\",\n      \"April\",\n      \"Mei\",\n      \"Junie\",\n      \"Julie\",\n      \"Augustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"So\",\n      \"Ma\",\n      \"Di\",\n      \"Wo\",\n      \"Do\",\n      \"Vr\",\n      \"Sa\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"Mrt.\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"af-na\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_af-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vm.\",\n      \"nm.\"\n    ],\n    \"DAY\": [\n      \"Sondag\",\n      \"Maandag\",\n      \"Dinsdag\",\n      \"Woensdag\",\n      \"Donderdag\",\n      \"Vrydag\",\n      \"Saterdag\"\n    ],\n    \"MONTH\": [\n      \"Januarie\",\n      \"Februarie\",\n      \"Maart\",\n      \"April\",\n      \"Mei\",\n      \"Junie\",\n      \"Julie\",\n      \"Augustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"So\",\n      \"Ma\",\n      \"Di\",\n      \"Wo\",\n      \"Do\",\n      \"Vr\",\n      \"Sa\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"Mrt.\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM y h:mm:ss a\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y-MM-dd h:mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"af-za\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_af.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vm.\",\n      \"nm.\"\n    ],\n    \"DAY\": [\n      \"Sondag\",\n      \"Maandag\",\n      \"Dinsdag\",\n      \"Woensdag\",\n      \"Donderdag\",\n      \"Vrydag\",\n      \"Saterdag\"\n    ],\n    \"MONTH\": [\n      \"Januarie\",\n      \"Februarie\",\n      \"Maart\",\n      \"April\",\n      \"Mei\",\n      \"Junie\",\n      \"Julie\",\n      \"Augustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"So\",\n      \"Ma\",\n      \"Di\",\n      \"Wo\",\n      \"Do\",\n      \"Vr\",\n      \"Sa\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"Mrt.\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM y h:mm:ss a\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y-MM-dd h:mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"af\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_agq-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.g\",\n      \"a.k\"\n    ],\n    \"DAY\": [\n      \"tsu\\u0294nts\\u0268\",\n      \"tsu\\u0294ukp\\u00e0\",\n      \"tsu\\u0294ugh\\u0254e\",\n      \"tsu\\u0294ut\\u0254\\u0300ml\\u00f2\",\n      \"tsu\\u0294um\\u00e8\",\n      \"tsu\\u0294ugh\\u0268\\u0302m\",\n      \"tsu\\u0294ndz\\u0268k\\u0254\\u0294\\u0254\"\n    ],\n    \"MONTH\": [\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300n\\u00f9m\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300k\\u0197\\u0300z\\u00f9\\u0294\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u0197\\u0300d\\u0289\\u0300gh\\u00e0\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u01ceaf\\u0289\\u0304gh\\u0101\",\n      \"ndz\\u0254\\u0300\\u014b\\u00e8s\\u00e8e\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300nz\\u00f9gh\\u00f2\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300d\\u00f9mlo\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300kw\\u00eef\\u0254\\u0300e\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u0197\\u0300f\\u0289\\u0300gh\\u00e0dzugh\\u00f9\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300gh\\u01d4uwel\\u0254\\u0300m\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300chwa\\u0294\\u00e0kaa wo\",\n      \"ndz\\u0254\\u0300\\u014b\\u00e8fw\\u00f2o\"\n    ],\n    \"SHORTDAY\": [\n      \"nts\",\n      \"kpa\",\n      \"gh\\u0254\",\n      \"t\\u0254m\",\n      \"ume\",\n      \"gh\\u0268\",\n      \"dzk\"\n    ],\n    \"SHORTMONTH\": [\n      \"n\\u00f9m\",\n      \"k\\u0268z\",\n      \"t\\u0268d\",\n      \"taa\",\n      \"see\",\n      \"nzu\",\n      \"dum\",\n      \"f\\u0254e\",\n      \"dzu\",\n      \"l\\u0254m\",\n      \"kaa\",\n      \"fwo\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"agq-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_agq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.g\",\n      \"a.k\"\n    ],\n    \"DAY\": [\n      \"tsu\\u0294nts\\u0268\",\n      \"tsu\\u0294ukp\\u00e0\",\n      \"tsu\\u0294ugh\\u0254e\",\n      \"tsu\\u0294ut\\u0254\\u0300ml\\u00f2\",\n      \"tsu\\u0294um\\u00e8\",\n      \"tsu\\u0294ugh\\u0268\\u0302m\",\n      \"tsu\\u0294ndz\\u0268k\\u0254\\u0294\\u0254\"\n    ],\n    \"MONTH\": [\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300n\\u00f9m\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300k\\u0197\\u0300z\\u00f9\\u0294\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u0197\\u0300d\\u0289\\u0300gh\\u00e0\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u01ceaf\\u0289\\u0304gh\\u0101\",\n      \"ndz\\u0254\\u0300\\u014b\\u00e8s\\u00e8e\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300nz\\u00f9gh\\u00f2\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300d\\u00f9mlo\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300kw\\u00eef\\u0254\\u0300e\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300t\\u0197\\u0300f\\u0289\\u0300gh\\u00e0dzugh\\u00f9\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300gh\\u01d4uwel\\u0254\\u0300m\",\n      \"ndz\\u0254\\u0300\\u014b\\u0254\\u0300chwa\\u0294\\u00e0kaa wo\",\n      \"ndz\\u0254\\u0300\\u014b\\u00e8fw\\u00f2o\"\n    ],\n    \"SHORTDAY\": [\n      \"nts\",\n      \"kpa\",\n      \"gh\\u0254\",\n      \"t\\u0254m\",\n      \"ume\",\n      \"gh\\u0268\",\n      \"dzk\"\n    ],\n    \"SHORTMONTH\": [\n      \"n\\u00f9m\",\n      \"k\\u0268z\",\n      \"t\\u0268d\",\n      \"taa\",\n      \"see\",\n      \"nzu\",\n      \"dum\",\n      \"f\\u0254e\",\n      \"dzu\",\n      \"l\\u0254m\",\n      \"kaa\",\n      \"fwo\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"agq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ak-gh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AN\",\n      \"EW\"\n    ],\n    \"DAY\": [\n      \"Kwesida\",\n      \"Dwowda\",\n      \"Benada\",\n      \"Wukuda\",\n      \"Yawda\",\n      \"Fida\",\n      \"Memeneda\"\n    ],\n    \"MONTH\": [\n      \"Sanda-\\u0186p\\u025bp\\u0254n\",\n      \"Kwakwar-\\u0186gyefuo\",\n      \"Eb\\u0254w-\\u0186benem\",\n      \"Eb\\u0254bira-Oforisuo\",\n      \"Esusow Aketseaba-K\\u0254t\\u0254nimba\",\n      \"Obirade-Ay\\u025bwohomumu\",\n      \"Ay\\u025bwoho-Kitawonsa\",\n      \"Difuu-\\u0186sandaa\",\n      \"Fankwa-\\u0190b\\u0254\",\n      \"\\u0186b\\u025bs\\u025b-Ahinime\",\n      \"\\u0186ber\\u025bf\\u025bw-Obubuo\",\n      \"Mumu-\\u0186p\\u025bnimba\"\n    ],\n    \"SHORTDAY\": [\n      \"Kwe\",\n      \"Dwo\",\n      \"Ben\",\n      \"Wuk\",\n      \"Yaw\",\n      \"Fia\",\n      \"Mem\"\n    ],\n    \"SHORTMONTH\": [\n      \"S-\\u0186\",\n      \"K-\\u0186\",\n      \"E-\\u0186\",\n      \"E-O\",\n      \"E-K\",\n      \"O-A\",\n      \"A-K\",\n      \"D-\\u0186\",\n      \"F-\\u0190\",\n      \"\\u0186-A\",\n      \"\\u0186-O\",\n      \"M-\\u0186\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ak-gh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ak.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AN\",\n      \"EW\"\n    ],\n    \"DAY\": [\n      \"Kwesida\",\n      \"Dwowda\",\n      \"Benada\",\n      \"Wukuda\",\n      \"Yawda\",\n      \"Fida\",\n      \"Memeneda\"\n    ],\n    \"MONTH\": [\n      \"Sanda-\\u0186p\\u025bp\\u0254n\",\n      \"Kwakwar-\\u0186gyefuo\",\n      \"Eb\\u0254w-\\u0186benem\",\n      \"Eb\\u0254bira-Oforisuo\",\n      \"Esusow Aketseaba-K\\u0254t\\u0254nimba\",\n      \"Obirade-Ay\\u025bwohomumu\",\n      \"Ay\\u025bwoho-Kitawonsa\",\n      \"Difuu-\\u0186sandaa\",\n      \"Fankwa-\\u0190b\\u0254\",\n      \"\\u0186b\\u025bs\\u025b-Ahinime\",\n      \"\\u0186ber\\u025bf\\u025bw-Obubuo\",\n      \"Mumu-\\u0186p\\u025bnimba\"\n    ],\n    \"SHORTDAY\": [\n      \"Kwe\",\n      \"Dwo\",\n      \"Ben\",\n      \"Wuk\",\n      \"Yaw\",\n      \"Fia\",\n      \"Mem\"\n    ],\n    \"SHORTMONTH\": [\n      \"S-\\u0186\",\n      \"K-\\u0186\",\n      \"E-\\u0186\",\n      \"E-O\",\n      \"E-K\",\n      \"O-A\",\n      \"A-K\",\n      \"D-\\u0186\",\n      \"F-\\u0190\",\n      \"\\u0186-A\",\n      \"\\u0186-O\",\n      \"M-\\u0186\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ak\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_am-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1325\\u12cb\\u1275\",\n      \"\\u12a8\\u1230\\u12d3\\u1275\"\n    ],\n    \"DAY\": [\n      \"\\u12a5\\u1211\\u12f5\",\n      \"\\u1230\\u129e\",\n      \"\\u121b\\u12ad\\u1230\\u129e\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1210\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1265\",\n      \"\\u1245\\u12f3\\u121c\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u122a\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1276\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u12a5\\u1211\\u12f5\",\n      \"\\u1230\\u129e\",\n      \"\\u121b\\u12ad\\u1230\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1210\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1265\",\n      \"\\u1245\\u12f3\\u121c\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u122a\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1276\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"am-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_am.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1325\\u12cb\\u1275\",\n      \"\\u12a8\\u1230\\u12d3\\u1275\"\n    ],\n    \"DAY\": [\n      \"\\u12a5\\u1211\\u12f5\",\n      \"\\u1230\\u129e\",\n      \"\\u121b\\u12ad\\u1230\\u129e\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1210\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1265\",\n      \"\\u1245\\u12f3\\u121c\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u122a\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1276\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u12a5\\u1211\\u12f5\",\n      \"\\u1230\\u129e\",\n      \"\\u121b\\u12ad\\u1230\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1210\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1265\",\n      \"\\u1245\\u12f3\\u121c\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u122a\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1276\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"am\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-001.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-001\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ae.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ae\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-bh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-bh\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-dj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Fdj\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-dj\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-dz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0627\\u0646\\u0641\\u064a\",\n      \"\\u0641\\u064a\\u0641\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0641\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u062c\\u0648\\u0627\\u0646\",\n      \"\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629\",\n      \"\\u0623\\u0648\\u062a\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0627\\u0646\\u0641\\u064a\",\n      \"\\u0641\\u064a\\u0641\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0641\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u062c\\u0648\\u0627\\u0646\",\n      \"\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629\",\n      \"\\u0623\\u0648\\u062a\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"y/MM/dd h:mm:ss a\",\n    \"mediumDate\": \"y/MM/dd\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y/M/d h:mm a\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-dz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-eg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-eg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-eh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-eh\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-er\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-il.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20aa\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-il\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-iq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-iq\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-jo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-jo\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-km.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CF\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-km\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-kw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-kw\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-lb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"L\\u00a3\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-lb\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ly.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ly\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632\",\n      \"\\u063a\\u0634\\u062a\",\n      \"\\u0634\\u062a\\u0646\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0646\\u0628\\u0631\",\n      \"\\u062f\\u062c\\u0646\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632\",\n      \"\\u063a\\u0634\\u062a\",\n      \"\\u0634\\u062a\\u0646\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0646\\u0628\\u0631\",\n      \"\\u062f\\u062c\\u0646\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"y/MM/dd h:mm:ss a\",\n    \"mediumDate\": \"y/MM/dd\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y/M/d h:mm a\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ma\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-mr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0625\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0634\\u062a\",\n      \"\\u0634\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u062c\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0625\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0634\\u062a\",\n      \"\\u0634\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u062c\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MRO\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-mr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-om.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-om\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ps.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20aa\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ps\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-qa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-qa\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-sa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-sa\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-sd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SDG\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-sd\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-so.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SOS\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-so\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ss.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SSP\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ss\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-sy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0634\\u0628\\u0627\\u0637\",\n      \"\\u0622\\u0630\\u0627\\u0631\",\n      \"\\u0646\\u064a\\u0633\\u0627\\u0646\",\n      \"\\u0623\\u064a\\u0627\\u0631\",\n      \"\\u062d\\u0632\\u064a\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u0645\\u0648\\u0632\",\n      \"\\u0622\\u0628\",\n      \"\\u0623\\u064a\\u0644\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u064a\\u0646 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a\",\n      \"\\u0643\\u0627\\u0646\\u0648\\u0646 \\u0627\\u0644\\u0623\\u0648\\u0644\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-sy\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-td.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-td\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-tn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0627\\u0646\\u0641\\u064a\",\n      \"\\u0641\\u064a\\u0641\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0641\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u062c\\u0648\\u0627\\u0646\",\n      \"\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629\",\n      \"\\u0623\\u0648\\u062a\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0627\\u0646\\u0641\\u064a\",\n      \"\\u0641\\u064a\\u0641\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0641\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u062c\\u0648\\u0627\\u0646\",\n      \"\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629\",\n      \"\\u0623\\u0648\\u062a\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"y/MM/dd h:mm:ss a\",\n    \"mediumDate\": \"y/MM/dd\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y/M/d h:mm a\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-tn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar-ye.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar-ye\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ar.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0635\",\n      \"\\u0645\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u0644\\u0623\\u062d\\u062f\",\n      \"\\u0627\\u0644\\u0627\\u062b\\u0646\\u064a\\u0646\",\n      \"\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\",\n      \"\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633\",\n      \"\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629\",\n      \"\\u0627\\u0644\\u0633\\u0628\\u062a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0646\\u0627\\u064a\\u0631\",\n      \"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0623\\u0628\\u0631\\u064a\\u0644\",\n      \"\\u0645\\u0627\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0646\\u064a\\u0648\",\n      \"\\u064a\\u0648\\u0644\\u064a\\u0648\",\n      \"\\u0623\\u063a\\u0633\\u0637\\u0633\",\n      \"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"dd\\u200f/MM\\u200f/y h:mm:ss a\",\n    \"mediumDate\": \"dd\\u200f/MM\\u200f/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d\\u200f/M\\u200f/y h:mm a\",\n    \"shortDate\": \"d\\u200f/M\\u200f/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ar\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_as-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u09aa\\u09c2\\u09f0\\u09cd\\u09ac\\u09be\\u09b9\\u09cd\\u09a3\",\n      \"\\u0985\\u09aa\\u09f0\\u09be\\u09b9\\u09cd\\u09a3\"\n    ],\n    \"DAY\": [\n      \"\\u09a6\\u09c7\\u0993\\u09ac\\u09be\\u09f0\",\n      \"\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09f0\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09f0\",\n      \"\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09f0\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b7\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09f0\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09f0\\u09ac\\u09be\\u09f0\",\n      \"\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09f0\"\n    ],\n    \"MONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09f1\\u09be\\u09f0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09f0\\u09c1\\u09f1\\u09be\\u09f0\\u09c0\",\n      \"\\u09ae\\u09be\\u09f0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09f0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b7\\u09cd\\u099f\",\n      \"\\u099b\\u09c7\\u09aa\\u09cd\\u09a4\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09f0\",\n      \"\\u09a8\\u09f1\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\",\n      \"\\u09a1\\u09bf\\u099a\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u09f0\\u09ac\\u09bf\",\n      \"\\u09b8\\u09cb\\u09ae\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\",\n      \"\\u09ac\\u09c1\\u09a7\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b7\\u09cd\\u09aa\\u09a4\\u09bf\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09f0\",\n      \"\\u09b6\\u09a8\\u09bf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09f0\\u09c1\",\n      \"\\u09ae\\u09be\\u09f0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09f0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\",\n      \"\\u09a8\\u09ad\\u09c7\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"dd-MM-y h.mm.ss a\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"h.mm.ss a\",\n    \"short\": \"d-M-y h.mm. a\",\n    \"shortDate\": \"d-M-y\",\n    \"shortTime\": \"h.mm. a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"as-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_as.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u09aa\\u09c2\\u09f0\\u09cd\\u09ac\\u09be\\u09b9\\u09cd\\u09a3\",\n      \"\\u0985\\u09aa\\u09f0\\u09be\\u09b9\\u09cd\\u09a3\"\n    ],\n    \"DAY\": [\n      \"\\u09a6\\u09c7\\u0993\\u09ac\\u09be\\u09f0\",\n      \"\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09f0\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09f0\",\n      \"\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09f0\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b7\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09f0\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09f0\\u09ac\\u09be\\u09f0\",\n      \"\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09f0\"\n    ],\n    \"MONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09f1\\u09be\\u09f0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09f0\\u09c1\\u09f1\\u09be\\u09f0\\u09c0\",\n      \"\\u09ae\\u09be\\u09f0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09f0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b7\\u09cd\\u099f\",\n      \"\\u099b\\u09c7\\u09aa\\u09cd\\u09a4\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09f0\",\n      \"\\u09a8\\u09f1\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\",\n      \"\\u09a1\\u09bf\\u099a\\u09c7\\u09ae\\u09cd\\u09ac\\u09f0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u09f0\\u09ac\\u09bf\",\n      \"\\u09b8\\u09cb\\u09ae\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\",\n      \"\\u09ac\\u09c1\\u09a7\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b7\\u09cd\\u09aa\\u09a4\\u09bf\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09f0\",\n      \"\\u09b6\\u09a8\\u09bf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09f0\\u09c1\",\n      \"\\u09ae\\u09be\\u09f0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09f0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\",\n      \"\\u09a8\\u09ad\\u09c7\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"dd-MM-y h.mm.ss a\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"h.mm.ss a\",\n    \"short\": \"d-M-y h.mm. a\",\n    \"shortDate\": \"d-M-y\",\n    \"shortTime\": \"h.mm. a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"as\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_asa-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"icheheavo\",\n      \"ichamthi\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Ijm\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"asa-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_asa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"icheheavo\",\n      \"ichamthi\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Ijm\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"asa\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ast-es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domingu\",\n      \"llunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"xueves\",\n      \"vienres\",\n      \"s\\u00e1badu\"\n    ],\n    \"MONTH\": [\n      \"de xineru\",\n      \"de febreru\",\n      \"de marzu\",\n      \"d\\u2019abril\",\n      \"de mayu\",\n      \"de xunu\",\n      \"de xunetu\",\n      \"d\\u2019agostu\",\n      \"de setiembre\",\n      \"d\\u2019ochobre\",\n      \"de payares\",\n      \"d\\u2019avientu\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"llu\",\n      \"mar\",\n      \"mie\",\n      \"xue\",\n      \"vie\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"xin\",\n      \"feb\",\n      \"mar\",\n      \"abr\",\n      \"may\",\n      \"xun\",\n      \"xnt\",\n      \"ago\",\n      \"set\",\n      \"och\",\n      \"pay\",\n      \"avi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ast-es\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ast.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domingu\",\n      \"llunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"xueves\",\n      \"vienres\",\n      \"s\\u00e1badu\"\n    ],\n    \"MONTH\": [\n      \"de xineru\",\n      \"de febreru\",\n      \"de marzu\",\n      \"d\\u2019abril\",\n      \"de mayu\",\n      \"de xunu\",\n      \"de xunetu\",\n      \"d\\u2019agostu\",\n      \"de setiembre\",\n      \"d\\u2019ochobre\",\n      \"de payares\",\n      \"d\\u2019avientu\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"llu\",\n      \"mar\",\n      \"mie\",\n      \"xue\",\n      \"vie\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"xin\",\n      \"feb\",\n      \"mar\",\n      \"abr\",\n      \"may\",\n      \"xun\",\n      \"xnt\",\n      \"ago\",\n      \"set\",\n      \"och\",\n      \"pay\",\n      \"avi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ast\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_az-cyrl-az.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440\",\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440 \\u0435\\u0440\\u0442\\u04d9\\u0441\\u0438\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9\",\n      \"\\u04b9\\u04af\\u043c\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u04b9\\u04af\\u043c\\u04d9\",\n      \"\\u0448\\u04d9\\u043d\\u0431\\u04d9\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u0458\\u0443\\u043d\",\n      \"\\u0438\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043d\\u043e\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440\",\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440 \\u0435\\u0440\\u0442\\u04d9\\u0441\\u0438\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9\",\n      \"\\u04b9\\u04af\\u043c\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u04b9\\u04af\\u043c\\u04d9\",\n      \"\\u0448\\u04d9\\u043d\\u0431\\u04d9\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u0458\\u0443\\u043d\",\n      \"\\u0438\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043d\\u043e\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"fullDate\": \"EEEE, d, MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"man.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"az-cyrl-az\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_az-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440\",\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440 \\u0435\\u0440\\u0442\\u04d9\\u0441\\u0438\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9\",\n      \"\\u04b9\\u04af\\u043c\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u04b9\\u04af\\u043c\\u04d9\",\n      \"\\u0448\\u04d9\\u043d\\u0431\\u04d9\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u0458\\u0443\\u043d\",\n      \"\\u0438\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043d\\u043e\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440\",\n      \"\\u0431\\u0430\\u0437\\u0430\\u0440 \\u0435\\u0440\\u0442\\u04d9\\u0441\\u0438\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u0447\\u04d9\\u0440\\u0448\\u04d9\\u043d\\u0431\\u04d9\",\n      \"\\u04b9\\u04af\\u043c\\u04d9 \\u0430\\u0445\\u0448\\u0430\\u043c\\u044b\",\n      \"\\u04b9\\u04af\\u043c\\u04d9\",\n      \"\\u0448\\u04d9\\u043d\\u0431\\u04d9\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u0458\\u0443\\u043d\",\n      \"\\u0438\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u043d\\u043e\\u0458\\u0430\\u0431\\u0440\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"fullDate\": \"EEEE, d, MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"az-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_az-latn-az.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"bazar\",\n      \"bazar ert\\u0259si\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259 ax\\u015fam\\u0131\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259\",\n      \"c\\u00fcm\\u0259 ax\\u015fam\\u0131\",\n      \"c\\u00fcm\\u0259\",\n      \"\\u015f\\u0259nb\\u0259\"\n    ],\n    \"MONTH\": [\n      \"yanvar\",\n      \"fevral\",\n      \"mart\",\n      \"aprel\",\n      \"may\",\n      \"iyun\",\n      \"iyul\",\n      \"avqust\",\n      \"sentyabr\",\n      \"oktyabr\",\n      \"noyabr\",\n      \"dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"B.\",\n      \"B.E.\",\n      \"\\u00c7.A.\",\n      \"\\u00c7.\",\n      \"C.A.\",\n      \"C.\",\n      \"\\u015e.\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fev\",\n      \"mar\",\n      \"apr\",\n      \"may\",\n      \"iyn\",\n      \"iyl\",\n      \"avq\",\n      \"sen\",\n      \"okt\",\n      \"noy\",\n      \"dek\"\n    ],\n    \"fullDate\": \"d MMMM y, EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"man.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"az-latn-az\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_az-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"bazar\",\n      \"bazar ert\\u0259si\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259 ax\\u015fam\\u0131\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259\",\n      \"c\\u00fcm\\u0259 ax\\u015fam\\u0131\",\n      \"c\\u00fcm\\u0259\",\n      \"\\u015f\\u0259nb\\u0259\"\n    ],\n    \"MONTH\": [\n      \"yanvar\",\n      \"fevral\",\n      \"mart\",\n      \"aprel\",\n      \"may\",\n      \"iyun\",\n      \"iyul\",\n      \"avqust\",\n      \"sentyabr\",\n      \"oktyabr\",\n      \"noyabr\",\n      \"dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"B.\",\n      \"B.E.\",\n      \"\\u00c7.A.\",\n      \"\\u00c7.\",\n      \"C.A.\",\n      \"C.\",\n      \"\\u015e.\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fev\",\n      \"mar\",\n      \"apr\",\n      \"may\",\n      \"iyn\",\n      \"iyl\",\n      \"avq\",\n      \"sen\",\n      \"okt\",\n      \"noy\",\n      \"dek\"\n    ],\n    \"fullDate\": \"d MMMM y, EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"az-latn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_az.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"bazar\",\n      \"bazar ert\\u0259si\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259 ax\\u015fam\\u0131\",\n      \"\\u00e7\\u0259r\\u015f\\u0259nb\\u0259\",\n      \"c\\u00fcm\\u0259 ax\\u015fam\\u0131\",\n      \"c\\u00fcm\\u0259\",\n      \"\\u015f\\u0259nb\\u0259\"\n    ],\n    \"MONTH\": [\n      \"yanvar\",\n      \"fevral\",\n      \"mart\",\n      \"aprel\",\n      \"may\",\n      \"iyun\",\n      \"iyul\",\n      \"avqust\",\n      \"sentyabr\",\n      \"oktyabr\",\n      \"noyabr\",\n      \"dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"B.\",\n      \"B.E.\",\n      \"\\u00c7.A.\",\n      \"\\u00c7.\",\n      \"C.A.\",\n      \"C.\",\n      \"\\u015e.\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fev\",\n      \"mar\",\n      \"apr\",\n      \"may\",\n      \"iyn\",\n      \"iyl\",\n      \"avq\",\n      \"sen\",\n      \"okt\",\n      \"noy\",\n      \"dek\"\n    ],\n    \"fullDate\": \"d MMMM y, EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"man.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"az\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bas-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"I bik\\u025b\\u0302gl\\u00e0\",\n      \"I \\u0253ugaj\\u0254p\"\n    ],\n    \"DAY\": [\n      \"\\u014bgw\\u00e0 n\\u0254\\u0302y\",\n      \"\\u014bgw\\u00e0 nja\\u014bgumba\",\n      \"\\u014bgw\\u00e0 \\u00fbm\",\n      \"\\u014bgw\\u00e0 \\u014bg\\u00ea\",\n      \"\\u014bgw\\u00e0 mb\\u0254k\",\n      \"\\u014bgw\\u00e0 k\\u0254\\u0254\",\n      \"\\u014bgw\\u00e0 j\\u00f4n\"\n    ],\n    \"MONTH\": [\n      \"K\\u0254nd\\u0254\\u014b\",\n      \"M\\u00e0c\\u025b\\u0302l\",\n      \"M\\u00e0t\\u00f9mb\",\n      \"M\\u00e0top\",\n      \"M\\u0300puy\\u025b\",\n      \"H\\u00ecl\\u00f2nd\\u025b\\u0300\",\n      \"Nj\\u00e8b\\u00e0\",\n      \"H\\u00ecka\\u014b\",\n      \"D\\u00ecp\\u0254\\u0300s\",\n      \"B\\u00ec\\u00f2\\u00f4m\",\n      \"M\\u00e0y\\u025bs\\u00e8p\",\n      \"L\\u00ecbuy li \\u0144y\\u00e8e\"\n    ],\n    \"SHORTDAY\": [\n      \"n\\u0254y\",\n      \"nja\",\n      \"uum\",\n      \"\\u014bge\",\n      \"mb\\u0254\",\n      \"k\\u0254\\u0254\",\n      \"jon\"\n    ],\n    \"SHORTMONTH\": [\n      \"k\\u0254n\",\n      \"mac\",\n      \"mat\",\n      \"mto\",\n      \"mpu\",\n      \"hil\",\n      \"nje\",\n      \"hik\",\n      \"dip\",\n      \"bio\",\n      \"may\",\n      \"li\\u0253\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bas-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bas.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"I bik\\u025b\\u0302gl\\u00e0\",\n      \"I \\u0253ugaj\\u0254p\"\n    ],\n    \"DAY\": [\n      \"\\u014bgw\\u00e0 n\\u0254\\u0302y\",\n      \"\\u014bgw\\u00e0 nja\\u014bgumba\",\n      \"\\u014bgw\\u00e0 \\u00fbm\",\n      \"\\u014bgw\\u00e0 \\u014bg\\u00ea\",\n      \"\\u014bgw\\u00e0 mb\\u0254k\",\n      \"\\u014bgw\\u00e0 k\\u0254\\u0254\",\n      \"\\u014bgw\\u00e0 j\\u00f4n\"\n    ],\n    \"MONTH\": [\n      \"K\\u0254nd\\u0254\\u014b\",\n      \"M\\u00e0c\\u025b\\u0302l\",\n      \"M\\u00e0t\\u00f9mb\",\n      \"M\\u00e0top\",\n      \"M\\u0300puy\\u025b\",\n      \"H\\u00ecl\\u00f2nd\\u025b\\u0300\",\n      \"Nj\\u00e8b\\u00e0\",\n      \"H\\u00ecka\\u014b\",\n      \"D\\u00ecp\\u0254\\u0300s\",\n      \"B\\u00ec\\u00f2\\u00f4m\",\n      \"M\\u00e0y\\u025bs\\u00e8p\",\n      \"L\\u00ecbuy li \\u0144y\\u00e8e\"\n    ],\n    \"SHORTDAY\": [\n      \"n\\u0254y\",\n      \"nja\",\n      \"uum\",\n      \"\\u014bge\",\n      \"mb\\u0254\",\n      \"k\\u0254\\u0254\",\n      \"jon\"\n    ],\n    \"SHORTMONTH\": [\n      \"k\\u0254n\",\n      \"mac\",\n      \"mat\",\n      \"mto\",\n      \"mpu\",\n      \"hil\",\n      \"nje\",\n      \"hik\",\n      \"dip\",\n      \"bio\",\n      \"may\",\n      \"li\\u0253\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bas\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_be-by.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0434\\u0430 \\u043f\\u0430\\u043b\\u0443\\u0434\\u043d\\u044f\",\n      \"\\u043f\\u0430\\u0441\\u043b\\u044f \\u043f\\u0430\\u043b\\u0443\\u0434\\u043d\\u044f\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u044f\",\n      \"\\u043f\\u0430\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u0430\\u043a\",\n      \"\\u0430\\u045e\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0435\\u0440\\u0430\\u0434\\u0430\",\n      \"\\u0447\\u0430\\u0446\\u0432\\u0435\\u0440\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0456\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0441\\u0442\\u0443\\u0434\\u0437\\u0435\\u043d\\u044f\",\n      \"\\u043b\\u044e\\u0442\\u0430\\u0433\\u0430\",\n      \"\\u0441\\u0430\\u043a\\u0430\\u0432\\u0456\\u043a\\u0430\",\n      \"\\u043a\\u0440\\u0430\\u0441\\u0430\\u0432\\u0456\\u043a\\u0430\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0447\\u044d\\u0440\\u0432\\u0435\\u043d\\u044f\",\n      \"\\u043b\\u0456\\u043f\\u0435\\u043d\\u044f\",\n      \"\\u0436\\u043d\\u0456\\u045e\\u043d\\u044f\",\n      \"\\u0432\\u0435\\u0440\\u0430\\u0441\\u043d\\u044f\",\n      \"\\u043a\\u0430\\u0441\\u0442\\u0440\\u044b\\u0447\\u043d\\u0456\\u043a\\u0430\",\n      \"\\u043b\\u0456\\u0441\\u0442\\u0430\\u043f\\u0430\\u0434\\u0430\",\n      \"\\u0441\\u043d\\u0435\\u0436\\u043d\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0434\",\n      \"\\u043f\\u043d\",\n      \"\\u0430\\u045e\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0446\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0441\\u0442\\u0443\",\n      \"\\u043b\\u044e\\u0442\",\n      \"\\u0441\\u0430\\u043a\",\n      \"\\u043a\\u0440\\u0430\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0447\\u044d\\u0440\",\n      \"\\u043b\\u0456\\u043f\",\n      \"\\u0436\\u043d\\u0456\",\n      \"\\u0432\\u0435\\u0440\",\n      \"\\u043a\\u0430\\u0441\",\n      \"\\u043b\\u0456\\u0441\",\n      \"\\u0441\\u043d\\u0435\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d.M.y HH.mm.ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy HH.mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"BYR\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"be-by\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_be.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0434\\u0430 \\u043f\\u0430\\u043b\\u0443\\u0434\\u043d\\u044f\",\n      \"\\u043f\\u0430\\u0441\\u043b\\u044f \\u043f\\u0430\\u043b\\u0443\\u0434\\u043d\\u044f\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u044f\",\n      \"\\u043f\\u0430\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u0430\\u043a\",\n      \"\\u0430\\u045e\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0435\\u0440\\u0430\\u0434\\u0430\",\n      \"\\u0447\\u0430\\u0446\\u0432\\u0435\\u0440\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0456\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0441\\u0442\\u0443\\u0434\\u0437\\u0435\\u043d\\u044f\",\n      \"\\u043b\\u044e\\u0442\\u0430\\u0433\\u0430\",\n      \"\\u0441\\u0430\\u043a\\u0430\\u0432\\u0456\\u043a\\u0430\",\n      \"\\u043a\\u0440\\u0430\\u0441\\u0430\\u0432\\u0456\\u043a\\u0430\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0447\\u044d\\u0440\\u0432\\u0435\\u043d\\u044f\",\n      \"\\u043b\\u0456\\u043f\\u0435\\u043d\\u044f\",\n      \"\\u0436\\u043d\\u0456\\u045e\\u043d\\u044f\",\n      \"\\u0432\\u0435\\u0440\\u0430\\u0441\\u043d\\u044f\",\n      \"\\u043a\\u0430\\u0441\\u0442\\u0440\\u044b\\u0447\\u043d\\u0456\\u043a\\u0430\",\n      \"\\u043b\\u0456\\u0441\\u0442\\u0430\\u043f\\u0430\\u0434\\u0430\",\n      \"\\u0441\\u043d\\u0435\\u0436\\u043d\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0434\",\n      \"\\u043f\\u043d\",\n      \"\\u0430\\u045e\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0446\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0441\\u0442\\u0443\",\n      \"\\u043b\\u044e\\u0442\",\n      \"\\u0441\\u0430\\u043a\",\n      \"\\u043a\\u0440\\u0430\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0447\\u044d\\u0440\",\n      \"\\u043b\\u0456\\u043f\",\n      \"\\u0436\\u043d\\u0456\",\n      \"\\u0432\\u0435\\u0440\",\n      \"\\u043a\\u0430\\u0441\",\n      \"\\u043b\\u0456\\u0441\",\n      \"\\u0441\\u043d\\u0435\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d.M.y HH.mm.ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy HH.mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"BYR\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"be\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bem-zm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"uluchelo\",\n      \"akasuba\"\n    ],\n    \"DAY\": [\n      \"Pa Mulungu\",\n      \"Palichimo\",\n      \"Palichibuli\",\n      \"Palichitatu\",\n      \"Palichine\",\n      \"Palichisano\",\n      \"Pachibelushi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Epreo\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Ogasti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Pa Mulungu\",\n      \"Palichimo\",\n      \"Palichibuli\",\n      \"Palichitatu\",\n      \"Palichine\",\n      \"Palichisano\",\n      \"Pachibelushi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Epr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Oga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ZMW\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bem-zm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bem.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"uluchelo\",\n      \"akasuba\"\n    ],\n    \"DAY\": [\n      \"Pa Mulungu\",\n      \"Palichimo\",\n      \"Palichibuli\",\n      \"Palichitatu\",\n      \"Palichine\",\n      \"Palichisano\",\n      \"Pachibelushi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Epreo\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Ogasti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Pa Mulungu\",\n      \"Palichimo\",\n      \"Palichibuli\",\n      \"Palichitatu\",\n      \"Palichine\",\n      \"Palichisano\",\n      \"Pachibelushi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Epr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Oga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ZMW\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bem\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bez-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pamilau\",\n      \"pamunyi\"\n    ],\n    \"DAY\": [\n      \"pa mulungu\",\n      \"pa shahuviluha\",\n      \"pa hivili\",\n      \"pa hidatu\",\n      \"pa hitayi\",\n      \"pa hihanu\",\n      \"pa shahulembela\"\n    ],\n    \"MONTH\": [\n      \"pa mwedzi gwa hutala\",\n      \"pa mwedzi gwa wuvili\",\n      \"pa mwedzi gwa wudatu\",\n      \"pa mwedzi gwa wutai\",\n      \"pa mwedzi gwa wuhanu\",\n      \"pa mwedzi gwa sita\",\n      \"pa mwedzi gwa saba\",\n      \"pa mwedzi gwa nane\",\n      \"pa mwedzi gwa tisa\",\n      \"pa mwedzi gwa kumi\",\n      \"pa mwedzi gwa kumi na moja\",\n      \"pa mwedzi gwa kumi na mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"Mul\",\n      \"Vil\",\n      \"Hiv\",\n      \"Hid\",\n      \"Hit\",\n      \"Hih\",\n      \"Lem\"\n    ],\n    \"SHORTMONTH\": [\n      \"Hut\",\n      \"Vil\",\n      \"Dat\",\n      \"Tai\",\n      \"Han\",\n      \"Sit\",\n      \"Sab\",\n      \"Nan\",\n      \"Tis\",\n      \"Kum\",\n      \"Kmj\",\n      \"Kmb\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bez-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bez.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pamilau\",\n      \"pamunyi\"\n    ],\n    \"DAY\": [\n      \"pa mulungu\",\n      \"pa shahuviluha\",\n      \"pa hivili\",\n      \"pa hidatu\",\n      \"pa hitayi\",\n      \"pa hihanu\",\n      \"pa shahulembela\"\n    ],\n    \"MONTH\": [\n      \"pa mwedzi gwa hutala\",\n      \"pa mwedzi gwa wuvili\",\n      \"pa mwedzi gwa wudatu\",\n      \"pa mwedzi gwa wutai\",\n      \"pa mwedzi gwa wuhanu\",\n      \"pa mwedzi gwa sita\",\n      \"pa mwedzi gwa saba\",\n      \"pa mwedzi gwa nane\",\n      \"pa mwedzi gwa tisa\",\n      \"pa mwedzi gwa kumi\",\n      \"pa mwedzi gwa kumi na moja\",\n      \"pa mwedzi gwa kumi na mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"Mul\",\n      \"Vil\",\n      \"Hiv\",\n      \"Hid\",\n      \"Hit\",\n      \"Hih\",\n      \"Lem\"\n    ],\n    \"SHORTMONTH\": [\n      \"Hut\",\n      \"Vil\",\n      \"Dat\",\n      \"Tai\",\n      \"Han\",\n      \"Sit\",\n      \"Sab\",\n      \"Nan\",\n      \"Tis\",\n      \"Kum\",\n      \"Kmj\",\n      \"Kmb\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bez\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bg-bg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440.\\u043e\\u0431.\",\n      \"\\u0441\\u043b.\\u043e\\u0431.\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u043b\\u044f\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u044f\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u044a\\u0440\\u0442\\u044a\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u044a\\u043a\",\n      \"\\u0441\\u044a\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u044e\\u043d\\u0438\",\n      \"\\u044e\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0434\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u044e\\u043d\\u0438\",\n      \"\\u044e\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043f\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u0435\\u043c.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d.MM.y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d.MM.y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.MM.yy '\\u0433'. H:mm\",\n    \"shortDate\": \"d.MM.yy '\\u0433'.\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"lev\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bg-bg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440.\\u043e\\u0431.\",\n      \"\\u0441\\u043b.\\u043e\\u0431.\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u043b\\u044f\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u044f\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u044a\\u0440\\u0442\\u044a\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u044a\\u043a\",\n      \"\\u0441\\u044a\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u044e\\u043d\\u0438\",\n      \"\\u044e\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0434\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u044e\\u043d\\u0438\",\n      \"\\u044e\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043f\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u0435\\u043c.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d.MM.y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d.MM.y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.MM.yy '\\u0433'. H:mm\",\n    \"shortDate\": \"d.MM.yy '\\u0433'.\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"lev\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bm-latn-ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"kari\",\n      \"nt\\u025bn\\u025b\",\n      \"tarata\",\n      \"araba\",\n      \"alamisa\",\n      \"juma\",\n      \"sibiri\"\n    ],\n    \"MONTH\": [\n      \"zanwuye\",\n      \"feburuye\",\n      \"marisi\",\n      \"awirili\",\n      \"m\\u025b\",\n      \"zuw\\u025bn\",\n      \"zuluye\",\n      \"uti\",\n      \"s\\u025btanburu\",\n      \"\\u0254kut\\u0254buru\",\n      \"nowanburu\",\n      \"desanburu\"\n    ],\n    \"SHORTDAY\": [\n      \"kar\",\n      \"nt\\u025b\",\n      \"tar\",\n      \"ara\",\n      \"ala\",\n      \"jum\",\n      \"sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"feb\",\n      \"mar\",\n      \"awi\",\n      \"m\\u025b\",\n      \"zuw\",\n      \"zul\",\n      \"uti\",\n      \"s\\u025bt\",\n      \"\\u0254ku\",\n      \"now\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bm-latn-ml\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bm-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"kari\",\n      \"nt\\u025bn\\u025b\",\n      \"tarata\",\n      \"araba\",\n      \"alamisa\",\n      \"juma\",\n      \"sibiri\"\n    ],\n    \"MONTH\": [\n      \"zanwuye\",\n      \"feburuye\",\n      \"marisi\",\n      \"awirili\",\n      \"m\\u025b\",\n      \"zuw\\u025bn\",\n      \"zuluye\",\n      \"uti\",\n      \"s\\u025btanburu\",\n      \"\\u0254kut\\u0254buru\",\n      \"nowanburu\",\n      \"desanburu\"\n    ],\n    \"SHORTDAY\": [\n      \"kar\",\n      \"nt\\u025b\",\n      \"tar\",\n      \"ara\",\n      \"ala\",\n      \"jum\",\n      \"sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"feb\",\n      \"mar\",\n      \"awi\",\n      \"m\\u025b\",\n      \"zuw\",\n      \"zul\",\n      \"uti\",\n      \"s\\u025bt\",\n      \"\\u0254ku\",\n      \"now\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bm-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bm-ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"kari\",\n      \"nt\\u025bn\\u025b\",\n      \"tarata\",\n      \"araba\",\n      \"alamisa\",\n      \"juma\",\n      \"sibiri\"\n    ],\n    \"MONTH\": [\n      \"zanwuye\",\n      \"feburuye\",\n      \"marisi\",\n      \"awirili\",\n      \"m\\u025b\",\n      \"zuw\\u025bn\",\n      \"zuluye\",\n      \"uti\",\n      \"s\\u025btanburu\",\n      \"\\u0254kut\\u0254buru\",\n      \"nowanburu\",\n      \"desanburu\"\n    ],\n    \"SHORTDAY\": [\n      \"kar\",\n      \"nt\\u025b\",\n      \"tar\",\n      \"ara\",\n      \"ala\",\n      \"jum\",\n      \"sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"feb\",\n      \"mar\",\n      \"awi\",\n      \"m\\u025b\",\n      \"zuw\",\n      \"zul\",\n      \"uti\",\n      \"s\\u025bt\",\n      \"\\u0254ku\",\n      \"now\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bm-ml\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"kari\",\n      \"nt\\u025bn\\u025b\",\n      \"tarata\",\n      \"araba\",\n      \"alamisa\",\n      \"juma\",\n      \"sibiri\"\n    ],\n    \"MONTH\": [\n      \"zanwuye\",\n      \"feburuye\",\n      \"marisi\",\n      \"awirili\",\n      \"m\\u025b\",\n      \"zuw\\u025bn\",\n      \"zuluye\",\n      \"uti\",\n      \"s\\u025btanburu\",\n      \"\\u0254kut\\u0254buru\",\n      \"nowanburu\",\n      \"desanburu\"\n    ],\n    \"SHORTDAY\": [\n      \"kar\",\n      \"nt\\u025b\",\n      \"tar\",\n      \"ara\",\n      \"ala\",\n      \"jum\",\n      \"sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"feb\",\n      \"mar\",\n      \"awi\",\n      \"m\\u025b\",\n      \"zuw\",\n      \"zul\",\n      \"uti\",\n      \"s\\u025bt\",\n      \"\\u0254ku\",\n      \"now\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bn-bd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u09b0\\u09ac\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09b0\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09b0\"\n    ],\n    \"MONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u09b0\\u09ac\\u09bf\",\n      \"\\u09b8\\u09cb\\u09ae\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\",\n      \"\\u09ac\\u09c1\\u09a7\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u09f3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bn-bd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bn-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u09b0\\u09ac\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09b0\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09b0\"\n    ],\n    \"MONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u09b0\\u09ac\\u09bf\",\n      \"\\u09b8\\u09cb\\u09ae\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\",\n      \"\\u09ac\\u09c1\\u09a7\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bn-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u09b0\\u09ac\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09b0\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09b0\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\\u09ac\\u09be\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09b0\"\n    ],\n    \"MONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u09b0\\u09ac\\u09bf\",\n      \"\\u09b8\\u09cb\\u09ae\",\n      \"\\u09ae\\u0999\\u09cd\\u0997\\u09b2\",\n      \"\\u09ac\\u09c1\\u09a7\",\n      \"\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\",\n      \"\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\",\n      \"\\u09b6\\u09a8\\u09bf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u099c\\u09be\\u09a8\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09af\\u09bc\\u09be\\u09b0\\u09c0\",\n      \"\\u09ae\\u09be\\u09b0\\u09cd\\u099a\",\n      \"\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2\",\n      \"\\u09ae\\u09c7\",\n      \"\\u099c\\u09c1\\u09a8\",\n      \"\\u099c\\u09c1\\u09b2\\u09be\\u0987\",\n      \"\\u0986\\u0997\\u09b8\\u09cd\\u099f\",\n      \"\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0\",\n      \"\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\",\n      \"\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u09f3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bo-cn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0f66\\u0f94\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\",\n      \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\"\n    ],\n    \"DAY\": [\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"MONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f44\\u0f0b\\u0f54\\u0f7c\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f22\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f23\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f24\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f25\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f26\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f27\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f28\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f29\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f20\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f22\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM\\u0f60\\u0f72\\u0f0b\\u0f59\\u0f7a\\u0f66\\u0f0bd\\u0f51\",\n    \"medium\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd HH:mm:ss\",\n    \"mediumDate\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bo-cn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bo-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0f66\\u0f94\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\",\n      \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\"\n    ],\n    \"DAY\": [\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"MONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f44\\u0f0b\\u0f54\\u0f7c\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f22\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f23\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f24\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f25\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f26\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f27\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f28\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f29\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f20\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f22\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM\\u0f60\\u0f72\\u0f0b\\u0f59\\u0f7a\\u0f66\\u0f0bd\\u0f51\",\n    \"medium\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd HH:mm:ss\",\n    \"mediumDate\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bo-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0f66\\u0f94\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\",\n      \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f51\\u0fb2\\u0f7c\\u0f0b\"\n    ],\n    \"DAY\": [\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"MONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f44\\u0f0b\\u0f54\\u0f7c\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f22\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f23\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f24\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f25\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f26\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f27\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f28\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f29\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f20\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f21\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f21\\u0f22\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM\\u0f60\\u0f72\\u0f0b\\u0f59\\u0f7a\\u0f66\\u0f0bd\\u0f51\",\n    \"medium\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd HH:mm:ss\",\n    \"mediumDate\": \"y \\u0f63\\u0f7c\\u0f0b\\u0f60\\u0f72\\u0f0bMMM\\u0f59\\u0f7a\\u0f66\\u0f0bd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"bo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_br-fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"A.M.\",\n      \"G.M.\"\n    ],\n    \"DAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Meurzh\",\n      \"Merc\\u02bcher\",\n      \"Yaou\",\n      \"Gwener\",\n      \"Sadorn\"\n    ],\n    \"MONTH\": [\n      \"Genver\",\n      \"C\\u02bchwevrer\",\n      \"Meurzh\",\n      \"Ebrel\",\n      \"Mae\",\n      \"Mezheven\",\n      \"Gouere\",\n      \"Eost\",\n      \"Gwengolo\",\n      \"Here\",\n      \"Du\",\n      \"Kerzu\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Meu.\",\n      \"Mer.\",\n      \"Yaou\",\n      \"Gwe.\",\n      \"Sad.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Gen\",\n      \"C\\u02bchwe\",\n      \"Meur\",\n      \"Ebr\",\n      \"Mae\",\n      \"Mezh\",\n      \"Goue\",\n      \"Eost\",\n      \"Gwen\",\n      \"Here\",\n      \"Du\",\n      \"Ker\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"br-fr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) {    return PLURAL_CATEGORY.TWO;  }  if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) {    return PLURAL_CATEGORY.FEW;  }  if (n != 0 && n % 1000000 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_br.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"A.M.\",\n      \"G.M.\"\n    ],\n    \"DAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Meurzh\",\n      \"Merc\\u02bcher\",\n      \"Yaou\",\n      \"Gwener\",\n      \"Sadorn\"\n    ],\n    \"MONTH\": [\n      \"Genver\",\n      \"C\\u02bchwevrer\",\n      \"Meurzh\",\n      \"Ebrel\",\n      \"Mae\",\n      \"Mezheven\",\n      \"Gouere\",\n      \"Eost\",\n      \"Gwengolo\",\n      \"Here\",\n      \"Du\",\n      \"Kerzu\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Meu.\",\n      \"Mer.\",\n      \"Yaou\",\n      \"Gwe.\",\n      \"Sad.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Gen\",\n      \"C\\u02bchwe\",\n      \"Meur\",\n      \"Ebr\",\n      \"Mae\",\n      \"Mezh\",\n      \"Goue\",\n      \"Eost\",\n      \"Gwen\",\n      \"Here\",\n      \"Du\",\n      \"Ker\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"br\",\n  \"pluralCat\": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) {    return PLURAL_CATEGORY.TWO;  }  if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) {    return PLURAL_CATEGORY.FEW;  }  if (n != 0 && n % 1000000 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_brx-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092b\\u0941\\u0902\",\n      \"\\u092c\\u0947\\u0932\\u093e\\u0938\\u0947\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u092c\\u093f\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u092e\\u092c\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0932\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0926\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u093f\\u0938\\u0925\\u093f\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u0941\\u0916\\u0941\\u0930\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u0941\\u0928\\u093f\\u092c\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u0938\",\n      \"\\u090f\\u092b\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0907\",\n      \"\\u0906\\u0917\\u0938\\u094d\\u0925\",\n      \"\\u0938\\u0947\\u092c\\u0925\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0905\\u0916\\u0925\\u092c\\u0930\",\n      \"\\u0928\\u092c\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u092c\\u093f\",\n      \"\\u0938\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0926\",\n      \"\\u092c\\u093f\\u0938\\u0925\\u093f\",\n      \"\\u0938\\u0941\\u0916\\u0941\\u0930\",\n      \"\\u0938\\u0941\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u0938\",\n      \"\\u090f\\u092b\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0907\",\n      \"\\u0906\\u0917\\u0938\\u094d\\u0925\",\n      \"\\u0938\\u0947\\u092c\\u0925\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0905\\u0916\\u0925\\u092c\\u0930\",\n      \"\\u0928\\u092c\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"brx-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_brx.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092b\\u0941\\u0902\",\n      \"\\u092c\\u0947\\u0932\\u093e\\u0938\\u0947\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u092c\\u093f\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u092e\\u092c\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0932\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0926\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u093f\\u0938\\u0925\\u093f\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u0941\\u0916\\u0941\\u0930\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u0941\\u0928\\u093f\\u092c\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u0938\",\n      \"\\u090f\\u092b\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0907\",\n      \"\\u0906\\u0917\\u0938\\u094d\\u0925\",\n      \"\\u0938\\u0947\\u092c\\u0925\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0905\\u0916\\u0925\\u092c\\u0930\",\n      \"\\u0928\\u092c\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u092c\\u093f\",\n      \"\\u0938\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0926\",\n      \"\\u092c\\u093f\\u0938\\u0925\\u093f\",\n      \"\\u0938\\u0941\\u0916\\u0941\\u0930\",\n      \"\\u0938\\u0941\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u0938\",\n      \"\\u090f\\u092b\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0907\",\n      \"\\u0906\\u0917\\u0938\\u094d\\u0925\",\n      \"\\u0938\\u0947\\u092c\\u0925\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0905\\u0916\\u0925\\u092c\\u0930\",\n      \"\\u0928\\u092c\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0947\\u091c\\u094d\\u092c\\u093c\\u0930\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"brx\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bs-cyrl-ba.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e\\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0438\\u0458\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\\u0438\",\n      \"\\u0458\\u0443\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0438\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy. HH:mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bs-cyrl-ba\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bs-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e\\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0438\\u0458\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\\u0438\",\n      \"\\u0458\\u0443\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0438\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy. HH:mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bs-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bs-latn-ba.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"prije podne\",\n      \"popodne\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd. MMM. y. HH:mm:ss\",\n    \"mediumDate\": \"dd. MMM. y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy. HH:mm\",\n    \"shortDate\": \"dd.MM.yy.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bs-latn-ba\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bs-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"prije podne\",\n      \"popodne\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd. MMM. y. HH:mm:ss\",\n    \"mediumDate\": \"dd. MMM. y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy. HH:mm\",\n    \"shortDate\": \"dd.MM.yy.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bs-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_bs.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"prije podne\",\n      \"popodne\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd. MMM. y. HH:mm:ss\",\n    \"mediumDate\": \"dd. MMM. y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy. HH:mm\",\n    \"shortDate\": \"dd.MM.yy.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"bs\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_byn-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u134b\\u12f1\\u1235 \\u1303\\u1265\",\n      \"\\u134b\\u12f1\\u1235 \\u12f0\\u121d\\u1262\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u122d \\u1245\\u12f3\\u12c5\",\n      \"\\u1230\\u1291\",\n      \"\\u1230\\u120a\\u131d\",\n      \"\\u1208\\u1313 \\u12c8\\u122a \\u1208\\u1265\\u12cb\",\n      \"\\u12a3\\u121d\\u12f5\",\n      \"\\u12a3\\u122d\\u1265\",\n      \"\\u1230\\u1295\\u1260\\u122d \\u123d\\u1313\\u12c5\"\n    ],\n    \"MONTH\": [\n      \"\\u120d\\u12f0\\u1275\\u122a\",\n      \"\\u12ab\\u1265\\u12bd\\u1265\\u1272\",\n      \"\\u12ad\\u1265\\u120b\",\n      \"\\u134b\\u1305\\u12ba\\u122a\",\n      \"\\u12ad\\u1262\\u1245\\u122a\",\n      \"\\u121d\\u12aa\\u12a4\\u120d \\u1275\\u131f\\u1292\\u122a\",\n      \"\\u12b0\\u122d\\u12a9\",\n      \"\\u121b\\u122d\\u12eb\\u121d \\u1275\\u122a\",\n      \"\\u12eb\\u12b8\\u1292 \\u1218\\u1233\\u1245\\u1208\\u122a\",\n      \"\\u1218\\u1270\\u1209\",\n      \"\\u121d\\u12aa\\u12a4\\u120d \\u1218\\u123d\\u12c8\\u122a\",\n      \"\\u1270\\u1215\\u1233\\u1235\\u122a\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230/\\u1245\",\n      \"\\u1230\\u1291\",\n      \"\\u1230\\u120a\\u131d\",\n      \"\\u1208\\u1313\",\n      \"\\u12a3\\u121d\\u12f5\",\n      \"\\u12a3\\u122d\\u1265\",\n      \"\\u1230/\\u123d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u120d\\u12f0\\u1275\",\n      \"\\u12ab\\u1265\\u12bd\",\n      \"\\u12ad\\u1265\\u120b\",\n      \"\\u134b\\u1305\\u12ba\",\n      \"\\u12ad\\u1262\\u1245\",\n      \"\\u121d/\\u1275\",\n      \"\\u12b0\\u122d\",\n      \"\\u121b\\u122d\\u12eb\",\n      \"\\u12eb\\u12b8\\u1292\",\n      \"\\u1218\\u1270\\u1209\",\n      \"\\u121d/\\u121d\",\n      \"\\u1270\\u1215\\u1233\"\n    ],\n    \"fullDate\": \"EEEE\\u1361 dd MMMM \\u130d\\u122d\\u130b y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"byn-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_byn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u134b\\u12f1\\u1235 \\u1303\\u1265\",\n      \"\\u134b\\u12f1\\u1235 \\u12f0\\u121d\\u1262\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u122d \\u1245\\u12f3\\u12c5\",\n      \"\\u1230\\u1291\",\n      \"\\u1230\\u120a\\u131d\",\n      \"\\u1208\\u1313 \\u12c8\\u122a \\u1208\\u1265\\u12cb\",\n      \"\\u12a3\\u121d\\u12f5\",\n      \"\\u12a3\\u122d\\u1265\",\n      \"\\u1230\\u1295\\u1260\\u122d \\u123d\\u1313\\u12c5\"\n    ],\n    \"MONTH\": [\n      \"\\u120d\\u12f0\\u1275\\u122a\",\n      \"\\u12ab\\u1265\\u12bd\\u1265\\u1272\",\n      \"\\u12ad\\u1265\\u120b\",\n      \"\\u134b\\u1305\\u12ba\\u122a\",\n      \"\\u12ad\\u1262\\u1245\\u122a\",\n      \"\\u121d\\u12aa\\u12a4\\u120d \\u1275\\u131f\\u1292\\u122a\",\n      \"\\u12b0\\u122d\\u12a9\",\n      \"\\u121b\\u122d\\u12eb\\u121d \\u1275\\u122a\",\n      \"\\u12eb\\u12b8\\u1292 \\u1218\\u1233\\u1245\\u1208\\u122a\",\n      \"\\u1218\\u1270\\u1209\",\n      \"\\u121d\\u12aa\\u12a4\\u120d \\u1218\\u123d\\u12c8\\u122a\",\n      \"\\u1270\\u1215\\u1233\\u1235\\u122a\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230/\\u1245\",\n      \"\\u1230\\u1291\",\n      \"\\u1230\\u120a\\u131d\",\n      \"\\u1208\\u1313\",\n      \"\\u12a3\\u121d\\u12f5\",\n      \"\\u12a3\\u122d\\u1265\",\n      \"\\u1230/\\u123d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u120d\\u12f0\\u1275\",\n      \"\\u12ab\\u1265\\u12bd\",\n      \"\\u12ad\\u1265\\u120b\",\n      \"\\u134b\\u1305\\u12ba\",\n      \"\\u12ad\\u1262\\u1245\",\n      \"\\u121d/\\u1275\",\n      \"\\u12b0\\u122d\",\n      \"\\u121b\\u122d\\u12eb\",\n      \"\\u12eb\\u12b8\\u1292\",\n      \"\\u1218\\u1270\\u1209\",\n      \"\\u121d/\\u121d\",\n      \"\\u1270\\u1215\\u1233\"\n    ],\n    \"fullDate\": \"EEEE\\u1361 dd MMMM \\u130d\\u122d\\u130b y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"byn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca-ad.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca-ad\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca-es-valencia.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca-es-valencia\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca-es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca-es\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca-fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca-fr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca-it.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca-it\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ca.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"diumenge\",\n      \"dilluns\",\n      \"dimarts\",\n      \"dimecres\",\n      \"dijous\",\n      \"divendres\",\n      \"dissabte\"\n    ],\n    \"MONTH\": [\n      \"gener\",\n      \"febrer\",\n      \"mar\\u00e7\",\n      \"abril\",\n      \"maig\",\n      \"juny\",\n      \"juliol\",\n      \"agost\",\n      \"setembre\",\n      \"octubre\",\n      \"novembre\",\n      \"desembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dg.\",\n      \"dl.\",\n      \"dt.\",\n      \"dc.\",\n      \"dj.\",\n      \"dv.\",\n      \"ds.\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen.\",\n      \"febr.\",\n      \"mar\\u00e7\",\n      \"abr.\",\n      \"maig\",\n      \"juny\",\n      \"jul.\",\n      \"ag.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM 'de' y\",\n    \"longDate\": \"d MMMM 'de' y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ca\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cgg-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sande\",\n      \"Orwokubanza\",\n      \"Orwakabiri\",\n      \"Orwakashatu\",\n      \"Orwakana\",\n      \"Orwakataano\",\n      \"Orwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Okwokubanza\",\n      \"Okwakabiri\",\n      \"Okwakashatu\",\n      \"Okwakana\",\n      \"Okwakataana\",\n      \"Okwamukaaga\",\n      \"Okwamushanju\",\n      \"Okwamunaana\",\n      \"Okwamwenda\",\n      \"Okwaikumi\",\n      \"Okwaikumi na kumwe\",\n      \"Okwaikumi na ibiri\"\n    ],\n    \"SHORTDAY\": [\n      \"SAN\",\n      \"ORK\",\n      \"OKB\",\n      \"OKS\",\n      \"OKN\",\n      \"OKT\",\n      \"OMK\"\n    ],\n    \"SHORTMONTH\": [\n      \"KBZ\",\n      \"KBR\",\n      \"KST\",\n      \"KKN\",\n      \"KTN\",\n      \"KMK\",\n      \"KMS\",\n      \"KMN\",\n      \"KMW\",\n      \"KKM\",\n      \"KNK\",\n      \"KNB\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"cgg-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cgg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sande\",\n      \"Orwokubanza\",\n      \"Orwakabiri\",\n      \"Orwakashatu\",\n      \"Orwakana\",\n      \"Orwakataano\",\n      \"Orwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Okwokubanza\",\n      \"Okwakabiri\",\n      \"Okwakashatu\",\n      \"Okwakana\",\n      \"Okwakataana\",\n      \"Okwamukaaga\",\n      \"Okwamushanju\",\n      \"Okwamunaana\",\n      \"Okwamwenda\",\n      \"Okwaikumi\",\n      \"Okwaikumi na kumwe\",\n      \"Okwaikumi na ibiri\"\n    ],\n    \"SHORTDAY\": [\n      \"SAN\",\n      \"ORK\",\n      \"OKB\",\n      \"OKS\",\n      \"OKN\",\n      \"OKT\",\n      \"OMK\"\n    ],\n    \"SHORTMONTH\": [\n      \"KBZ\",\n      \"KBR\",\n      \"KST\",\n      \"KKN\",\n      \"KTN\",\n      \"KMK\",\n      \"KMS\",\n      \"KMN\",\n      \"KMW\",\n      \"KKM\",\n      \"KNK\",\n      \"KNB\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"cgg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_chr-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u13cc\\u13be\\u13b4\",\n      \"\\u13d2\\u13af\\u13f1\\u13a2\\u13d7\\u13e2\"\n    ],\n    \"DAY\": [\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c6\\u13cd\\u13ac\",\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c9\\u13c5\\u13af\",\n      \"\\u13d4\\u13b5\\u13c1\\u13a2\\u13a6\",\n      \"\\u13e6\\u13a2\\u13c1\\u13a2\\u13a6\",\n      \"\\u13c5\\u13a9\\u13c1\\u13a2\\u13a6\",\n      \"\\u13e7\\u13be\\u13a9\\u13b6\\u13cd\\u13d7\",\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c8\\u13d5\\u13be\"\n    ],\n    \"MONTH\": [\n      \"\\u13a4\\u13c3\\u13b8\\u13d4\\u13c5\",\n      \"\\u13a7\\u13a6\\u13b5\",\n      \"\\u13a0\\u13c5\\u13f1\",\n      \"\\u13a7\\u13ec\\u13c2\",\n      \"\\u13a0\\u13c2\\u13cd\\u13ac\\u13d8\",\n      \"\\u13d5\\u13ad\\u13b7\\u13f1\",\n      \"\\u13ab\\u13f0\\u13c9\\u13c2\",\n      \"\\u13a6\\u13b6\\u13c2\",\n      \"\\u13da\\u13b5\\u13cd\\u13d7\",\n      \"\\u13da\\u13c2\\u13c5\\u13d7\",\n      \"\\u13c5\\u13d3\\u13d5\\u13c6\",\n      \"\\u13a5\\u13cd\\u13a9\\u13f1\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u13c6\\u13cd\\u13ac\",\n      \"\\u13c9\\u13c5\\u13af\",\n      \"\\u13d4\\u13b5\\u13c1\",\n      \"\\u13e6\\u13a2\\u13c1\",\n      \"\\u13c5\\u13a9\\u13c1\",\n      \"\\u13e7\\u13be\\u13a9\",\n      \"\\u13c8\\u13d5\\u13be\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u13a4\\u13c3\",\n      \"\\u13a7\\u13a6\",\n      \"\\u13a0\\u13c5\",\n      \"\\u13a7\\u13ec\",\n      \"\\u13a0\\u13c2\",\n      \"\\u13d5\\u13ad\",\n      \"\\u13ab\\u13f0\",\n      \"\\u13a6\\u13b6\",\n      \"\\u13da\\u13b5\",\n      \"\\u13da\\u13c2\",\n      \"\\u13c5\\u13d3\",\n      \"\\u13a5\\u13cd\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"chr-us\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_chr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u13cc\\u13be\\u13b4\",\n      \"\\u13d2\\u13af\\u13f1\\u13a2\\u13d7\\u13e2\"\n    ],\n    \"DAY\": [\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c6\\u13cd\\u13ac\",\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c9\\u13c5\\u13af\",\n      \"\\u13d4\\u13b5\\u13c1\\u13a2\\u13a6\",\n      \"\\u13e6\\u13a2\\u13c1\\u13a2\\u13a6\",\n      \"\\u13c5\\u13a9\\u13c1\\u13a2\\u13a6\",\n      \"\\u13e7\\u13be\\u13a9\\u13b6\\u13cd\\u13d7\",\n      \"\\u13a4\\u13be\\u13d9\\u13d3\\u13c8\\u13d5\\u13be\"\n    ],\n    \"MONTH\": [\n      \"\\u13a4\\u13c3\\u13b8\\u13d4\\u13c5\",\n      \"\\u13a7\\u13a6\\u13b5\",\n      \"\\u13a0\\u13c5\\u13f1\",\n      \"\\u13a7\\u13ec\\u13c2\",\n      \"\\u13a0\\u13c2\\u13cd\\u13ac\\u13d8\",\n      \"\\u13d5\\u13ad\\u13b7\\u13f1\",\n      \"\\u13ab\\u13f0\\u13c9\\u13c2\",\n      \"\\u13a6\\u13b6\\u13c2\",\n      \"\\u13da\\u13b5\\u13cd\\u13d7\",\n      \"\\u13da\\u13c2\\u13c5\\u13d7\",\n      \"\\u13c5\\u13d3\\u13d5\\u13c6\",\n      \"\\u13a5\\u13cd\\u13a9\\u13f1\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u13c6\\u13cd\\u13ac\",\n      \"\\u13c9\\u13c5\\u13af\",\n      \"\\u13d4\\u13b5\\u13c1\",\n      \"\\u13e6\\u13a2\\u13c1\",\n      \"\\u13c5\\u13a9\\u13c1\",\n      \"\\u13e7\\u13be\\u13a9\",\n      \"\\u13c8\\u13d5\\u13be\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u13a4\\u13c3\",\n      \"\\u13a7\\u13a6\",\n      \"\\u13a0\\u13c5\",\n      \"\\u13a7\\u13ec\",\n      \"\\u13a0\\u13c2\",\n      \"\\u13d5\\u13ad\",\n      \"\\u13ab\\u13f0\",\n      \"\\u13a6\\u13b6\",\n      \"\\u13da\\u13b5\",\n      \"\\u13da\\u13c2\",\n      \"\\u13c5\\u13d3\",\n      \"\\u13a5\\u13cd\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"chr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-arab-iq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-arab-iq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-arab-ir.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-arab-ir\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-arab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-arab\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-iq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-iq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-ir.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-ir\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-latn-iq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-latn-iq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ckb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0628.\\u0646\",\n      \"\\u062f.\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06d5\\u06a9\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u062f\\u0648\\u0648\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0633\\u06ce\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u0686\\u0648\\u0627\\u0631\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u067e\\u06ce\\u0646\\u062c\\u0634\\u06d5\\u0645\\u0645\\u06d5\",\n      \"\\u06be\\u06d5\\u06cc\\u0646\\u06cc\",\n      \"\\u0634\\u06d5\\u0645\\u0645\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u0634\\u0648\\u0628\\u0627\\u062a\",\n      \"\\u0626\\u0627\\u0632\\u0627\\u0631\",\n      \"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\n      \"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\n      \"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\n      \"\\u062a\\u06d5\\u0645\\u0648\\u0648\\u0632\",\n      \"\\u0626\\u0627\\u0628\",\n      \"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\",\n      \"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\n      \"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"d\\u06cc MMMM\\u06cc y\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ckb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cs-cz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"ned\\u011ble\",\n      \"pond\\u011bl\\u00ed\",\n      \"\\u00fater\\u00fd\",\n      \"st\\u0159eda\",\n      \"\\u010dtvrtek\",\n      \"p\\u00e1tek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"ledna\",\n      \"\\u00fanora\",\n      \"b\\u0159ezna\",\n      \"dubna\",\n      \"kv\\u011btna\",\n      \"\\u010dervna\",\n      \"\\u010dervence\",\n      \"srpna\",\n      \"z\\u00e1\\u0159\\u00ed\",\n      \"\\u0159\\u00edjna\",\n      \"listopadu\",\n      \"prosince\"\n    ],\n    \"SHORTDAY\": [\n      \"ne\",\n      \"po\",\n      \"\\u00fat\",\n      \"st\",\n      \"\\u010dt\",\n      \"p\\u00e1\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"led\",\n      \"\\u00fano\",\n      \"b\\u0159e\",\n      \"dub\",\n      \"kv\\u011b\",\n      \"\\u010dvn\",\n      \"\\u010dvc\",\n      \"srp\",\n      \"z\\u00e1\\u0159\",\n      \"\\u0159\\u00edj\",\n      \"lis\",\n      \"pro\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. M. y H:mm:ss\",\n    \"mediumDate\": \"d. M. y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"K\\u010d\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"cs-cz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cs.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"ned\\u011ble\",\n      \"pond\\u011bl\\u00ed\",\n      \"\\u00fater\\u00fd\",\n      \"st\\u0159eda\",\n      \"\\u010dtvrtek\",\n      \"p\\u00e1tek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"ledna\",\n      \"\\u00fanora\",\n      \"b\\u0159ezna\",\n      \"dubna\",\n      \"kv\\u011btna\",\n      \"\\u010dervna\",\n      \"\\u010dervence\",\n      \"srpna\",\n      \"z\\u00e1\\u0159\\u00ed\",\n      \"\\u0159\\u00edjna\",\n      \"listopadu\",\n      \"prosince\"\n    ],\n    \"SHORTDAY\": [\n      \"ne\",\n      \"po\",\n      \"\\u00fat\",\n      \"st\",\n      \"\\u010dt\",\n      \"p\\u00e1\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"led\",\n      \"\\u00fano\",\n      \"b\\u0159e\",\n      \"dub\",\n      \"kv\\u011b\",\n      \"\\u010dvn\",\n      \"\\u010dvc\",\n      \"srp\",\n      \"z\\u00e1\\u0159\",\n      \"\\u0159\\u00edj\",\n      \"lis\",\n      \"pro\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. M. y H:mm:ss\",\n    \"mediumDate\": \"d. M. y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"K\\u010d\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"cs\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cy-gb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dydd Sul\",\n      \"Dydd Llun\",\n      \"Dydd Mawrth\",\n      \"Dydd Mercher\",\n      \"Dydd Iau\",\n      \"Dydd Gwener\",\n      \"Dydd Sadwrn\"\n    ],\n    \"MONTH\": [\n      \"Ionawr\",\n      \"Chwefror\",\n      \"Mawrth\",\n      \"Ebrill\",\n      \"Mai\",\n      \"Mehefin\",\n      \"Gorffennaf\",\n      \"Awst\",\n      \"Medi\",\n      \"Hydref\",\n      \"Tachwedd\",\n      \"Rhagfyr\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Llun\",\n      \"Maw\",\n      \"Mer\",\n      \"Iau\",\n      \"Gwen\",\n      \"Sad\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ion\",\n      \"Chwef\",\n      \"Mawrth\",\n      \"Ebrill\",\n      \"Mai\",\n      \"Meh\",\n      \"Gorff\",\n      \"Awst\",\n      \"Medi\",\n      \"Hyd\",\n      \"Tach\",\n      \"Rhag\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"cy-gb\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n == 3) {    return PLURAL_CATEGORY.FEW;  }  if (n == 6) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_cy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dydd Sul\",\n      \"Dydd Llun\",\n      \"Dydd Mawrth\",\n      \"Dydd Mercher\",\n      \"Dydd Iau\",\n      \"Dydd Gwener\",\n      \"Dydd Sadwrn\"\n    ],\n    \"MONTH\": [\n      \"Ionawr\",\n      \"Chwefror\",\n      \"Mawrth\",\n      \"Ebrill\",\n      \"Mai\",\n      \"Mehefin\",\n      \"Gorffennaf\",\n      \"Awst\",\n      \"Medi\",\n      \"Hydref\",\n      \"Tachwedd\",\n      \"Rhagfyr\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Llun\",\n      \"Maw\",\n      \"Mer\",\n      \"Iau\",\n      \"Gwen\",\n      \"Sad\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ion\",\n      \"Chwef\",\n      \"Mawrth\",\n      \"Ebrill\",\n      \"Mai\",\n      \"Meh\",\n      \"Gorff\",\n      \"Awst\",\n      \"Medi\",\n      \"Hyd\",\n      \"Tach\",\n      \"Rhag\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"cy\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n == 3) {    return PLURAL_CATEGORY.FEW;  }  if (n == 6) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_da-dk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\nfunction getWT(v, f) {\n  if (f === 0) {\n    return {w: 0, t: 0};\n  }\n\n  while ((f % 10) === 0) {\n    f /= 10;\n    v--;\n  }\n\n  return {w: v, t: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"marts\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"maj\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE 'den' d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd/MM/y HH.mm.ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"da-dk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_da-gl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\nfunction getWT(v, f) {\n  if (f === 0) {\n    return {w: 0, t: 0};\n  }\n\n  while ((f % 10) === 0) {\n    f /= 10;\n    v--;\n  }\n\n  return {w: v, t: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"marts\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"maj\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE 'den' d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd/MM/y HH.mm.ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"da-gl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_da.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\nfunction getWT(v, f) {\n  if (f === 0) {\n    return {w: 0, t: 0};\n  }\n\n  while ((f % 10) === 0) {\n    f /= 10;\n    v--;\n  }\n\n  return {w: v, t: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"marts\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"maj\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE 'den' d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd/MM/y HH.mm.ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"da\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dav-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Luma lwa K\",\n      \"luma lwa p\"\n    ],\n    \"DAY\": [\n      \"Ituku ja jumwa\",\n      \"Kuramuka jimweri\",\n      \"Kuramuka kawi\",\n      \"Kuramuka kadadu\",\n      \"Kuramuka kana\",\n      \"Kuramuka kasanu\",\n      \"Kifula nguwo\"\n    ],\n    \"MONTH\": [\n      \"Mori ghwa imbiri\",\n      \"Mori ghwa kawi\",\n      \"Mori ghwa kadadu\",\n      \"Mori ghwa kana\",\n      \"Mori ghwa kasanu\",\n      \"Mori ghwa karandadu\",\n      \"Mori ghwa mfungade\",\n      \"Mori ghwa wunyanya\",\n      \"Mori ghwa ikenda\",\n      \"Mori ghwa ikumi\",\n      \"Mori ghwa ikumi na imweri\",\n      \"Mori ghwa ikumi na iwi\"\n    ],\n    \"SHORTDAY\": [\n      \"Jum\",\n      \"Jim\",\n      \"Kaw\",\n      \"Kad\",\n      \"Kan\",\n      \"Kas\",\n      \"Ngu\"\n    ],\n    \"SHORTMONTH\": [\n      \"Imb\",\n      \"Kaw\",\n      \"Kad\",\n      \"Kan\",\n      \"Kas\",\n      \"Kar\",\n      \"Mfu\",\n      \"Wun\",\n      \"Ike\",\n      \"Iku\",\n      \"Imw\",\n      \"Iwi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"dav-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dav.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Luma lwa K\",\n      \"luma lwa p\"\n    ],\n    \"DAY\": [\n      \"Ituku ja jumwa\",\n      \"Kuramuka jimweri\",\n      \"Kuramuka kawi\",\n      \"Kuramuka kadadu\",\n      \"Kuramuka kana\",\n      \"Kuramuka kasanu\",\n      \"Kifula nguwo\"\n    ],\n    \"MONTH\": [\n      \"Mori ghwa imbiri\",\n      \"Mori ghwa kawi\",\n      \"Mori ghwa kadadu\",\n      \"Mori ghwa kana\",\n      \"Mori ghwa kasanu\",\n      \"Mori ghwa karandadu\",\n      \"Mori ghwa mfungade\",\n      \"Mori ghwa wunyanya\",\n      \"Mori ghwa ikenda\",\n      \"Mori ghwa ikumi\",\n      \"Mori ghwa ikumi na imweri\",\n      \"Mori ghwa ikumi na iwi\"\n    ],\n    \"SHORTDAY\": [\n      \"Jum\",\n      \"Jim\",\n      \"Kaw\",\n      \"Kad\",\n      \"Kan\",\n      \"Kas\",\n      \"Ngu\"\n    ],\n    \"SHORTMONTH\": [\n      \"Imb\",\n      \"Kaw\",\n      \"Kad\",\n      \"Kan\",\n      \"Kas\",\n      \"Kar\",\n      \"Mfu\",\n      \"Wun\",\n      \"Ike\",\n      \"Iku\",\n      \"Imw\",\n      \"Iwi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"dav\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-at.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"J\\u00e4nner\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"J\\u00e4n.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y\",\n    \"longDate\": \"dd. MMMM y\",\n    \"medium\": \"dd. MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"de-at\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-be.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"de-be\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"'\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"de-ch\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-de.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"de-de\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-li.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"'\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"de-li\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de-lu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"de-lu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_de.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nachm.\"\n    ],\n    \"DAY\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"So.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Mi.\",\n      \"Do.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4rz\",\n      \"Apr.\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"de\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dje-ne.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Subbaahi\",\n      \"Zaarikay b\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamisi\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dje-ne\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dje.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Subbaahi\",\n      \"Zaarikay b\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamisi\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dje\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dsb-de.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopo\\u0142dnja\",\n      \"w\\u00f3tpo\\u0142dnja\"\n    ],\n    \"DAY\": [\n      \"nje\\u017aela\",\n      \"p\\u00f3nje\\u017aele\",\n      \"wa\\u0142tora\",\n      \"srjoda\",\n      \"stw\\u00f3rtk\",\n      \"p\\u011btk\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januara\",\n      \"februara\",\n      \"m\\u011brca\",\n      \"apryla\",\n      \"maja\",\n      \"junija\",\n      \"julija\",\n      \"awgusta\",\n      \"septembra\",\n      \"oktobra\",\n      \"nowembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"nje\",\n      \"p\\u00f3n\",\n      \"wa\\u0142\",\n      \"srj\",\n      \"stw\",\n      \"p\\u011bt\",\n      \"sob\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"m\\u011br.\",\n      \"apr.\",\n      \"maj.\",\n      \"jun.\",\n      \"jul.\",\n      \"awg.\",\n      \"sep.\",\n      \"okt.\",\n      \"now.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H:mm:ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.M.yy H:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dsb-de\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dsb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopo\\u0142dnja\",\n      \"w\\u00f3tpo\\u0142dnja\"\n    ],\n    \"DAY\": [\n      \"nje\\u017aela\",\n      \"p\\u00f3nje\\u017aele\",\n      \"wa\\u0142tora\",\n      \"srjoda\",\n      \"stw\\u00f3rtk\",\n      \"p\\u011btk\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januara\",\n      \"februara\",\n      \"m\\u011brca\",\n      \"apryla\",\n      \"maja\",\n      \"junija\",\n      \"julija\",\n      \"awgusta\",\n      \"septembra\",\n      \"oktobra\",\n      \"nowembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"nje\",\n      \"p\\u00f3n\",\n      \"wa\\u0142\",\n      \"srj\",\n      \"stw\",\n      \"p\\u011bt\",\n      \"sob\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"m\\u011br.\",\n      \"apr.\",\n      \"maj.\",\n      \"jun.\",\n      \"jul.\",\n      \"awg.\",\n      \"sep.\",\n      \"okt.\",\n      \"now.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H:mm:ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.M.yy H:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dsb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dua-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"idi\\u0253a\",\n      \"eby\\u00e1mu\"\n    ],\n    \"DAY\": [\n      \"\\u00e9ti\",\n      \"m\\u0254\\u0301s\\u00fa\",\n      \"kwas\\u00fa\",\n      \"muk\\u0254\\u0301s\\u00fa\",\n      \"\\u014bgis\\u00fa\",\n      \"\\u0257\\u00f3n\\u025bs\\u00fa\",\n      \"esa\\u0253as\\u00fa\"\n    ],\n    \"MONTH\": [\n      \"dim\\u0254\\u0301di\",\n      \"\\u014bg\\u0254nd\\u025b\",\n      \"s\\u0254\\u014b\\u025b\",\n      \"di\\u0253\\u00e1\\u0253\\u00e1\",\n      \"emiasele\",\n      \"es\\u0254p\\u025bs\\u0254p\\u025b\",\n      \"madi\\u0253\\u025b\\u0301d\\u00ed\\u0253\\u025b\\u0301\",\n      \"di\\u014bgindi\",\n      \"ny\\u025bt\\u025bki\",\n      \"may\\u00e9s\\u025b\\u0301\",\n      \"tin\\u00edn\\u00ed\",\n      \"el\\u00e1\\u014bg\\u025b\\u0301\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u00e9t\",\n      \"m\\u0254\\u0301s\",\n      \"kwa\",\n      \"muk\",\n      \"\\u014bgi\",\n      \"\\u0257\\u00f3n\",\n      \"esa\"\n    ],\n    \"SHORTMONTH\": [\n      \"di\",\n      \"\\u014bg\\u0254n\",\n      \"s\\u0254\\u014b\",\n      \"di\\u0253\",\n      \"emi\",\n      \"es\\u0254\",\n      \"mad\",\n      \"di\\u014b\",\n      \"ny\\u025bt\",\n      \"may\",\n      \"tin\",\n      \"el\\u00e1\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dua-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dua.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"idi\\u0253a\",\n      \"eby\\u00e1mu\"\n    ],\n    \"DAY\": [\n      \"\\u00e9ti\",\n      \"m\\u0254\\u0301s\\u00fa\",\n      \"kwas\\u00fa\",\n      \"muk\\u0254\\u0301s\\u00fa\",\n      \"\\u014bgis\\u00fa\",\n      \"\\u0257\\u00f3n\\u025bs\\u00fa\",\n      \"esa\\u0253as\\u00fa\"\n    ],\n    \"MONTH\": [\n      \"dim\\u0254\\u0301di\",\n      \"\\u014bg\\u0254nd\\u025b\",\n      \"s\\u0254\\u014b\\u025b\",\n      \"di\\u0253\\u00e1\\u0253\\u00e1\",\n      \"emiasele\",\n      \"es\\u0254p\\u025bs\\u0254p\\u025b\",\n      \"madi\\u0253\\u025b\\u0301d\\u00ed\\u0253\\u025b\\u0301\",\n      \"di\\u014bgindi\",\n      \"ny\\u025bt\\u025bki\",\n      \"may\\u00e9s\\u025b\\u0301\",\n      \"tin\\u00edn\\u00ed\",\n      \"el\\u00e1\\u014bg\\u025b\\u0301\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u00e9t\",\n      \"m\\u0254\\u0301s\",\n      \"kwa\",\n      \"muk\",\n      \"\\u014bgi\",\n      \"\\u0257\\u00f3n\",\n      \"esa\"\n    ],\n    \"SHORTMONTH\": [\n      \"di\",\n      \"\\u014bg\\u0254n\",\n      \"s\\u0254\\u014b\",\n      \"di\\u0253\",\n      \"emi\",\n      \"es\\u0254\",\n      \"mad\",\n      \"di\\u014b\",\n      \"ny\\u025bt\",\n      \"may\",\n      \"tin\",\n      \"el\\u00e1\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dua\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dyo-sn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dimas\",\n      \"Tene\\u014b\",\n      \"Talata\",\n      \"Alarbay\",\n      \"Aramisay\",\n      \"Arjuma\",\n      \"Sibiti\"\n    ],\n    \"MONTH\": [\n      \"Sanvie\",\n      \"F\\u00e9birie\",\n      \"Mars\",\n      \"Aburil\",\n      \"Mee\",\n      \"Sue\\u014b\",\n      \"S\\u00fauyee\",\n      \"Ut\",\n      \"Settembar\",\n      \"Oktobar\",\n      \"Novembar\",\n      \"Disambar\"\n    ],\n    \"SHORTDAY\": [\n      \"Dim\",\n      \"Ten\",\n      \"Tal\",\n      \"Ala\",\n      \"Ara\",\n      \"Arj\",\n      \"Sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"Sa\",\n      \"Fe\",\n      \"Ma\",\n      \"Ab\",\n      \"Me\",\n      \"Su\",\n      \"S\\u00fa\",\n      \"Ut\",\n      \"Se\",\n      \"Ok\",\n      \"No\",\n      \"De\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dyo-sn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dyo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dimas\",\n      \"Tene\\u014b\",\n      \"Talata\",\n      \"Alarbay\",\n      \"Aramisay\",\n      \"Arjuma\",\n      \"Sibiti\"\n    ],\n    \"MONTH\": [\n      \"Sanvie\",\n      \"F\\u00e9birie\",\n      \"Mars\",\n      \"Aburil\",\n      \"Mee\",\n      \"Sue\\u014b\",\n      \"S\\u00fauyee\",\n      \"Ut\",\n      \"Settembar\",\n      \"Oktobar\",\n      \"Novembar\",\n      \"Disambar\"\n    ],\n    \"SHORTDAY\": [\n      \"Dim\",\n      \"Ten\",\n      \"Tal\",\n      \"Ala\",\n      \"Ara\",\n      \"Arj\",\n      \"Sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"Sa\",\n      \"Fe\",\n      \"Ma\",\n      \"Ab\",\n      \"Me\",\n      \"Su\",\n      \"S\\u00fa\",\n      \"Ut\",\n      \"Se\",\n      \"Ok\",\n      \"No\",\n      \"De\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"dyo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dz-bt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0f66\\u0f94\\u0f0b\\u0f46\\u0f0b\",\n      \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f46\\u0f0b\"\n    ],\n    \"DAY\": [\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\"\n    ],\n    \"MONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0f44\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f42\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\",\n      \"\\u0f58\\u0f72\\u0f62\\u0f0b\",\n      \"\\u0f63\\u0fb7\\u0f42\\u0f0b\",\n      \"\\u0f55\\u0f74\\u0f62\\u0f0b\",\n      \"\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\",\n      \"\\u0f49\\u0f72\\u0f0b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0f21\",\n      \"\\u0f22\",\n      \"\\u0f23\",\n      \"\\u0f24\",\n      \"\\u0f25\",\n      \"\\u0f26\",\n      \"\\u0f27\",\n      \"\\u0f28\",\n      \"\\u0f29\",\n      \"\\u0f21\\u0f20\",\n      \"\\u0f21\\u0f21\",\n      \"12\"\n    ],\n    \"fullDate\": \"EEEE, \\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd\",\n    \"longDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM \\u0f5a\\u0f7a\\u0f66\\u0f0b dd\",\n    \"medium\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by \\u0f5f\\u0fb3\\u0f0bMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd \\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0bh:mm:ss a\",\n    \"mediumDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by \\u0f5f\\u0fb3\\u0f0bMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd\",\n    \"mediumTime\": \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0bh:mm:ss a\",\n    \"short\": \"y-MM-dd \\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b h \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\\u0f0b mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b h \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\\u0f0b mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nu.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"dz-bt\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_dz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0f66\\u0f94\\u0f0b\\u0f46\\u0f0b\",\n      \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f46\\u0f0b\"\n    ],\n    \"DAY\": [\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b\"\n    ],\n    \"MONTH\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0f44\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f42\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54\\u0f0b\",\n      \"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\\u0f0b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0f5f\\u0fb3\\u0f0b\",\n      \"\\u0f58\\u0f72\\u0f62\\u0f0b\",\n      \"\\u0f63\\u0fb7\\u0f42\\u0f0b\",\n      \"\\u0f55\\u0f74\\u0f62\\u0f0b\",\n      \"\\u0f66\\u0f44\\u0f66\\u0f0b\",\n      \"\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\",\n      \"\\u0f49\\u0f72\\u0f0b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0f21\",\n      \"\\u0f22\",\n      \"\\u0f23\",\n      \"\\u0f24\",\n      \"\\u0f25\",\n      \"\\u0f26\",\n      \"\\u0f27\",\n      \"\\u0f28\",\n      \"\\u0f29\",\n      \"\\u0f21\\u0f20\",\n      \"\\u0f21\\u0f21\",\n      \"12\"\n    ],\n    \"fullDate\": \"EEEE, \\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd\",\n    \"longDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by MMMM \\u0f5a\\u0f7a\\u0f66\\u0f0b dd\",\n    \"medium\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by \\u0f5f\\u0fb3\\u0f0bMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd \\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0bh:mm:ss a\",\n    \"mediumDate\": \"\\u0f66\\u0fa4\\u0fb1\\u0f72\\u0f0b\\u0f63\\u0f7c\\u0f0by \\u0f5f\\u0fb3\\u0f0bMMM \\u0f5a\\u0f7a\\u0f66\\u0f0bdd\",\n    \"mediumTime\": \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0bh:mm:ss a\",\n    \"short\": \"y-MM-dd \\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b h \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\\u0f0b mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b h \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\\u0f0b mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nu.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"dz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ebu-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"KI\",\n      \"UT\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Njumatatu\",\n      \"Njumaine\",\n      \"Njumatano\",\n      \"Aramithi\",\n      \"Njumaa\",\n      \"NJumamothii\"\n    ],\n    \"MONTH\": [\n      \"Mweri wa mbere\",\n      \"Mweri wa ka\\u0129ri\",\n      \"Mweri wa kathat\\u0169\",\n      \"Mweri wa kana\",\n      \"Mweri wa gatano\",\n      \"Mweri wa gatantat\\u0169\",\n      \"Mweri wa m\\u0169gwanja\",\n      \"Mweri wa kanana\",\n      \"Mweri wa kenda\",\n      \"Mweri wa ik\\u0169mi\",\n      \"Mweri wa ik\\u0169mi na \\u0169mwe\",\n      \"Mweri wa ik\\u0169mi na Ka\\u0129r\\u0129\"\n    ],\n    \"SHORTDAY\": [\n      \"Kma\",\n      \"Tat\",\n      \"Ine\",\n      \"Tan\",\n      \"Arm\",\n      \"Maa\",\n      \"NMM\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mbe\",\n      \"Kai\",\n      \"Kat\",\n      \"Kan\",\n      \"Gat\",\n      \"Gan\",\n      \"Mug\",\n      \"Knn\",\n      \"Ken\",\n      \"Iku\",\n      \"Imw\",\n      \"Igi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ebu-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ebu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"KI\",\n      \"UT\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Njumatatu\",\n      \"Njumaine\",\n      \"Njumatano\",\n      \"Aramithi\",\n      \"Njumaa\",\n      \"NJumamothii\"\n    ],\n    \"MONTH\": [\n      \"Mweri wa mbere\",\n      \"Mweri wa ka\\u0129ri\",\n      \"Mweri wa kathat\\u0169\",\n      \"Mweri wa kana\",\n      \"Mweri wa gatano\",\n      \"Mweri wa gatantat\\u0169\",\n      \"Mweri wa m\\u0169gwanja\",\n      \"Mweri wa kanana\",\n      \"Mweri wa kenda\",\n      \"Mweri wa ik\\u0169mi\",\n      \"Mweri wa ik\\u0169mi na \\u0169mwe\",\n      \"Mweri wa ik\\u0169mi na Ka\\u0129r\\u0129\"\n    ],\n    \"SHORTDAY\": [\n      \"Kma\",\n      \"Tat\",\n      \"Ine\",\n      \"Tan\",\n      \"Arm\",\n      \"Maa\",\n      \"NMM\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mbe\",\n      \"Kai\",\n      \"Kat\",\n      \"Kan\",\n      \"Gat\",\n      \"Gan\",\n      \"Mug\",\n      \"Knn\",\n      \"Ken\",\n      \"Iku\",\n      \"Imw\",\n      \"Igi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ebu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ee-gh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u014bdi\",\n      \"\\u0263etr\\u0254\"\n    ],\n    \"DAY\": [\n      \"k\\u0254si\\u0256a\",\n      \"dzo\\u0256a\",\n      \"bla\\u0256a\",\n      \"ku\\u0256a\",\n      \"yawo\\u0256a\",\n      \"fi\\u0256a\",\n      \"memle\\u0256a\"\n    ],\n    \"MONTH\": [\n      \"dzove\",\n      \"dzodze\",\n      \"tedoxe\",\n      \"af\\u0254f\\u0129e\",\n      \"dama\",\n      \"masa\",\n      \"siaml\\u0254m\",\n      \"deasiamime\",\n      \"any\\u0254ny\\u0254\",\n      \"kele\",\n      \"ade\\u025bmekp\\u0254xe\",\n      \"dzome\"\n    ],\n    \"SHORTDAY\": [\n      \"k\\u0254s\",\n      \"dzo\",\n      \"bla\",\n      \"ku\\u0256\",\n      \"yaw\",\n      \"fi\\u0256\",\n      \"mem\"\n    ],\n    \"SHORTMONTH\": [\n      \"dzv\",\n      \"dzd\",\n      \"ted\",\n      \"af\\u0254\",\n      \"dam\",\n      \"mas\",\n      \"sia\",\n      \"dea\",\n      \"any\",\n      \"kel\",\n      \"ade\",\n      \"dzm\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d 'lia' y\",\n    \"longDate\": \"MMMM d 'lia' y\",\n    \"medium\": \"MMM d 'lia', y a 'ga' h:mm:ss\",\n    \"mediumDate\": \"MMM d 'lia', y\",\n    \"mediumTime\": \"a 'ga' h:mm:ss\",\n    \"short\": \"M/d/yy a 'ga' h:mm\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"a 'ga' h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ee-gh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ee-tg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u014bdi\",\n      \"\\u0263etr\\u0254\"\n    ],\n    \"DAY\": [\n      \"k\\u0254si\\u0256a\",\n      \"dzo\\u0256a\",\n      \"bla\\u0256a\",\n      \"ku\\u0256a\",\n      \"yawo\\u0256a\",\n      \"fi\\u0256a\",\n      \"memle\\u0256a\"\n    ],\n    \"MONTH\": [\n      \"dzove\",\n      \"dzodze\",\n      \"tedoxe\",\n      \"af\\u0254f\\u0129e\",\n      \"dama\",\n      \"masa\",\n      \"siaml\\u0254m\",\n      \"deasiamime\",\n      \"any\\u0254ny\\u0254\",\n      \"kele\",\n      \"ade\\u025bmekp\\u0254xe\",\n      \"dzome\"\n    ],\n    \"SHORTDAY\": [\n      \"k\\u0254s\",\n      \"dzo\",\n      \"bla\",\n      \"ku\\u0256\",\n      \"yaw\",\n      \"fi\\u0256\",\n      \"mem\"\n    ],\n    \"SHORTMONTH\": [\n      \"dzv\",\n      \"dzd\",\n      \"ted\",\n      \"af\\u0254\",\n      \"dam\",\n      \"mas\",\n      \"sia\",\n      \"dea\",\n      \"any\",\n      \"kel\",\n      \"ade\",\n      \"dzm\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d 'lia' y\",\n    \"longDate\": \"MMMM d 'lia' y\",\n    \"medium\": \"MMM d 'lia', y a 'ga' h:mm:ss\",\n    \"mediumDate\": \"MMM d 'lia', y\",\n    \"mediumTime\": \"a 'ga' h:mm:ss\",\n    \"short\": \"M/d/yy a 'ga' h:mm\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"a 'ga' h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ee-tg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ee.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u014bdi\",\n      \"\\u0263etr\\u0254\"\n    ],\n    \"DAY\": [\n      \"k\\u0254si\\u0256a\",\n      \"dzo\\u0256a\",\n      \"bla\\u0256a\",\n      \"ku\\u0256a\",\n      \"yawo\\u0256a\",\n      \"fi\\u0256a\",\n      \"memle\\u0256a\"\n    ],\n    \"MONTH\": [\n      \"dzove\",\n      \"dzodze\",\n      \"tedoxe\",\n      \"af\\u0254f\\u0129e\",\n      \"dama\",\n      \"masa\",\n      \"siaml\\u0254m\",\n      \"deasiamime\",\n      \"any\\u0254ny\\u0254\",\n      \"kele\",\n      \"ade\\u025bmekp\\u0254xe\",\n      \"dzome\"\n    ],\n    \"SHORTDAY\": [\n      \"k\\u0254s\",\n      \"dzo\",\n      \"bla\",\n      \"ku\\u0256\",\n      \"yaw\",\n      \"fi\\u0256\",\n      \"mem\"\n    ],\n    \"SHORTMONTH\": [\n      \"dzv\",\n      \"dzd\",\n      \"ted\",\n      \"af\\u0254\",\n      \"dam\",\n      \"mas\",\n      \"sia\",\n      \"dea\",\n      \"any\",\n      \"kel\",\n      \"ade\",\n      \"dzm\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d 'lia' y\",\n    \"longDate\": \"MMMM d 'lia' y\",\n    \"medium\": \"MMM d 'lia', y a 'ga' h:mm:ss\",\n    \"mediumDate\": \"MMM d 'lia', y\",\n    \"mediumTime\": \"a 'ga' h:mm:ss\",\n    \"short\": \"M/d/yy a 'ga' h:mm\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"a 'ga' h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ee\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_el-cy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u03c0.\\u03bc.\",\n      \"\\u03bc.\\u03bc.\"\n    ],\n    \"DAY\": [\n      \"\\u039a\\u03c5\\u03c1\\u03b9\\u03b1\\u03ba\\u03ae\",\n      \"\\u0394\\u03b5\\u03c5\\u03c4\\u03ad\\u03c1\\u03b1\",\n      \"\\u03a4\\u03c1\\u03af\\u03c4\\u03b7\",\n      \"\\u03a4\\u03b5\\u03c4\\u03ac\\u03c1\\u03c4\\u03b7\",\n      \"\\u03a0\\u03ad\\u03bc\\u03c0\\u03c4\\u03b7\",\n      \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03c3\\u03ba\\u03b5\\u03c5\\u03ae\",\n      \"\\u03a3\\u03ac\\u03b2\\u03b2\\u03b1\\u03c4\\u03bf\"\n    ],\n    \"MONTH\": [\n      \"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u03c1\\u03c4\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c0\\u03c1\\u03b9\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u0390\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\\u03af\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c5\\u03b3\\u03bf\\u03cd\\u03c3\\u03c4\\u03bf\\u03c5\",\n      \"\\u03a3\\u03b5\\u03c0\\u03c4\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039f\\u03ba\\u03c4\\u03c9\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039d\\u03bf\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u0394\\u03b5\\u03ba\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u039a\\u03c5\\u03c1\",\n      \"\\u0394\\u03b5\\u03c5\",\n      \"\\u03a4\\u03c1\\u03af\",\n      \"\\u03a4\\u03b5\\u03c4\",\n      \"\\u03a0\\u03ad\\u03bc\",\n      \"\\u03a0\\u03b1\\u03c1\",\n      \"\\u03a3\\u03ac\\u03b2\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0399\\u03b1\\u03bd\",\n      \"\\u03a6\\u03b5\\u03b2\",\n      \"\\u039c\\u03b1\\u03c1\",\n      \"\\u0391\\u03c0\\u03c1\",\n      \"\\u039c\\u03b1\\u0390\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\",\n      \"\\u0391\\u03c5\\u03b3\",\n      \"\\u03a3\\u03b5\\u03c0\",\n      \"\\u039f\\u03ba\\u03c4\",\n      \"\\u039d\\u03bf\\u03b5\",\n      \"\\u0394\\u03b5\\u03ba\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"el-cy\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_el-gr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u03c0.\\u03bc.\",\n      \"\\u03bc.\\u03bc.\"\n    ],\n    \"DAY\": [\n      \"\\u039a\\u03c5\\u03c1\\u03b9\\u03b1\\u03ba\\u03ae\",\n      \"\\u0394\\u03b5\\u03c5\\u03c4\\u03ad\\u03c1\\u03b1\",\n      \"\\u03a4\\u03c1\\u03af\\u03c4\\u03b7\",\n      \"\\u03a4\\u03b5\\u03c4\\u03ac\\u03c1\\u03c4\\u03b7\",\n      \"\\u03a0\\u03ad\\u03bc\\u03c0\\u03c4\\u03b7\",\n      \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03c3\\u03ba\\u03b5\\u03c5\\u03ae\",\n      \"\\u03a3\\u03ac\\u03b2\\u03b2\\u03b1\\u03c4\\u03bf\"\n    ],\n    \"MONTH\": [\n      \"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u03c1\\u03c4\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c0\\u03c1\\u03b9\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u0390\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\\u03af\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c5\\u03b3\\u03bf\\u03cd\\u03c3\\u03c4\\u03bf\\u03c5\",\n      \"\\u03a3\\u03b5\\u03c0\\u03c4\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039f\\u03ba\\u03c4\\u03c9\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039d\\u03bf\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u0394\\u03b5\\u03ba\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u039a\\u03c5\\u03c1\",\n      \"\\u0394\\u03b5\\u03c5\",\n      \"\\u03a4\\u03c1\\u03af\",\n      \"\\u03a4\\u03b5\\u03c4\",\n      \"\\u03a0\\u03ad\\u03bc\",\n      \"\\u03a0\\u03b1\\u03c1\",\n      \"\\u03a3\\u03ac\\u03b2\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0399\\u03b1\\u03bd\",\n      \"\\u03a6\\u03b5\\u03b2\",\n      \"\\u039c\\u03b1\\u03c1\",\n      \"\\u0391\\u03c0\\u03c1\",\n      \"\\u039c\\u03b1\\u0390\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\",\n      \"\\u0391\\u03c5\\u03b3\",\n      \"\\u03a3\\u03b5\\u03c0\",\n      \"\\u039f\\u03ba\\u03c4\",\n      \"\\u039d\\u03bf\\u03b5\",\n      \"\\u0394\\u03b5\\u03ba\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"el-gr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_el.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u03c0.\\u03bc.\",\n      \"\\u03bc.\\u03bc.\"\n    ],\n    \"DAY\": [\n      \"\\u039a\\u03c5\\u03c1\\u03b9\\u03b1\\u03ba\\u03ae\",\n      \"\\u0394\\u03b5\\u03c5\\u03c4\\u03ad\\u03c1\\u03b1\",\n      \"\\u03a4\\u03c1\\u03af\\u03c4\\u03b7\",\n      \"\\u03a4\\u03b5\\u03c4\\u03ac\\u03c1\\u03c4\\u03b7\",\n      \"\\u03a0\\u03ad\\u03bc\\u03c0\\u03c4\\u03b7\",\n      \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03c3\\u03ba\\u03b5\\u03c5\\u03ae\",\n      \"\\u03a3\\u03ac\\u03b2\\u03b2\\u03b1\\u03c4\\u03bf\"\n    ],\n    \"MONTH\": [\n      \"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u03c1\\u03c4\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c0\\u03c1\\u03b9\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u039c\\u03b1\\u0390\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\\u03af\\u03bf\\u03c5\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\\u03af\\u03bf\\u03c5\",\n      \"\\u0391\\u03c5\\u03b3\\u03bf\\u03cd\\u03c3\\u03c4\\u03bf\\u03c5\",\n      \"\\u03a3\\u03b5\\u03c0\\u03c4\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039f\\u03ba\\u03c4\\u03c9\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u039d\\u03bf\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\",\n      \"\\u0394\\u03b5\\u03ba\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u039a\\u03c5\\u03c1\",\n      \"\\u0394\\u03b5\\u03c5\",\n      \"\\u03a4\\u03c1\\u03af\",\n      \"\\u03a4\\u03b5\\u03c4\",\n      \"\\u03a0\\u03ad\\u03bc\",\n      \"\\u03a0\\u03b1\\u03c1\",\n      \"\\u03a3\\u03ac\\u03b2\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0399\\u03b1\\u03bd\",\n      \"\\u03a6\\u03b5\\u03b2\",\n      \"\\u039c\\u03b1\\u03c1\",\n      \"\\u0391\\u03c0\\u03c1\",\n      \"\\u039c\\u03b1\\u0390\",\n      \"\\u0399\\u03bf\\u03c5\\u03bd\",\n      \"\\u0399\\u03bf\\u03c5\\u03bb\",\n      \"\\u0391\\u03c5\\u03b3\",\n      \"\\u03a3\\u03b5\\u03c0\",\n      \"\\u039f\\u03ba\\u03c4\",\n      \"\\u039d\\u03bf\\u03b5\",\n      \"\\u0394\\u03b5\\u03ba\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"el\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-001.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-001\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-150.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"en-150\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ag.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ag\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ai.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ai\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-as.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-as\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-au.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/y h:mm a\",\n    \"shortDate\": \"d/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-au\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-bb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-bb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-be.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"en-be\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-bm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-bm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-bs.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-bs\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-bw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM y h:mm:ss a\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"P\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-bw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-bz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-bz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ca.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y-MM-dd h:mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ca\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-cc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-cc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ck.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ck\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-cx.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-cx\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-dg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-dg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-dm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-dm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-dsrt-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\ud801\\udc08\\ud801\\udc23\",\n      \"\\ud801\\udc11\\ud801\\udc23\"\n    ],\n    \"DAY\": [\n      \"\\ud801\\udc1d\\ud801\\udc32\\ud801\\udc4c\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc23\\ud801\\udc32\\ud801\\udc4c\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc13\\ud801\\udc2d\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc0e\\ud801\\udc2f\\ud801\\udc4c\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc1b\\ud801\\udc32\\ud801\\udc49\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc19\\ud801\\udc49\\ud801\\udc34\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc1d\\ud801\\udc30\\ud801\\udc3b\\ud801\\udc32\\ud801\\udc49\\ud801\\udc3c\\ud801\\udc29\"\n    ],\n    \"MONTH\": [\n      \"\\ud801\\udc16\\ud801\\udc30\\ud801\\udc4c\\ud801\\udc37\\ud801\\udc2d\\ud801\\udc2f\\ud801\\udc49\\ud801\\udc28\",\n      \"\\ud801\\udc19\\ud801\\udc2f\\ud801\\udc3a\\ud801\\udc49\\ud801\\udc2d\\ud801\\udc2f\\ud801\\udc49\\ud801\\udc28\",\n      \"\\ud801\\udc23\\ud801\\udc2a\\ud801\\udc49\\ud801\\udc3d\",\n      \"\\ud801\\udc01\\ud801\\udc39\\ud801\\udc49\\ud801\\udc2e\\ud801\\udc4a\",\n      \"\\ud801\\udc23\\ud801\\udc29\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4c\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4a\\ud801\\udc34\",\n      \"\\ud801\\udc02\\ud801\\udc40\\ud801\\udc32\\ud801\\udc45\\ud801\\udc3b\",\n      \"\\ud801\\udc1d\\ud801\\udc2f\\ud801\\udc39\\ud801\\udc3b\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc09\\ud801\\udc3f\\ud801\\udc3b\\ud801\\udc2c\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc24\\ud801\\udc2c\\ud801\\udc42\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc14\\ud801\\udc28\\ud801\\udc45\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ud801\\udc1d\\ud801\\udc32\\ud801\\udc4c\",\n      \"\\ud801\\udc23\\ud801\\udc32\\ud801\\udc4c\",\n      \"\\ud801\\udc13\\ud801\\udc2d\\ud801\\udc46\",\n      \"\\ud801\\udc0e\\ud801\\udc2f\\ud801\\udc4c\",\n      \"\\ud801\\udc1b\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc19\\ud801\\udc49\\ud801\\udc34\",\n      \"\\ud801\\udc1d\\ud801\\udc30\\ud801\\udc3b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\ud801\\udc16\\ud801\\udc30\\ud801\\udc4c\",\n      \"\\ud801\\udc19\\ud801\\udc2f\\ud801\\udc3a\",\n      \"\\ud801\\udc23\\ud801\\udc2a\\ud801\\udc49\",\n      \"\\ud801\\udc01\\ud801\\udc39\\ud801\\udc49\",\n      \"\\ud801\\udc23\\ud801\\udc29\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4c\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4a\",\n      \"\\ud801\\udc02\\ud801\\udc40\",\n      \"\\ud801\\udc1d\\ud801\\udc2f\\ud801\\udc39\",\n      \"\\ud801\\udc09\\ud801\\udc3f\\ud801\\udc3b\",\n      \"\\ud801\\udc24\\ud801\\udc2c\\ud801\\udc42\",\n      \"\\ud801\\udc14\\ud801\\udc28\\ud801\\udc45\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"(\\u00a4\",\n        \"negSuf\": \")\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-dsrt-us\",\n  \"pluralCat\": function (n) {  if (n == 1) {   return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-dsrt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\ud801\\udc08\\ud801\\udc23\",\n      \"\\ud801\\udc11\\ud801\\udc23\"\n    ],\n    \"DAY\": [\n      \"\\ud801\\udc1d\\ud801\\udc32\\ud801\\udc4c\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc23\\ud801\\udc32\\ud801\\udc4c\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc13\\ud801\\udc2d\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc0e\\ud801\\udc2f\\ud801\\udc4c\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc1b\\ud801\\udc32\\ud801\\udc49\\ud801\\udc46\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc19\\ud801\\udc49\\ud801\\udc34\\ud801\\udc3c\\ud801\\udc29\",\n      \"\\ud801\\udc1d\\ud801\\udc30\\ud801\\udc3b\\ud801\\udc32\\ud801\\udc49\\ud801\\udc3c\\ud801\\udc29\"\n    ],\n    \"MONTH\": [\n      \"\\ud801\\udc16\\ud801\\udc30\\ud801\\udc4c\\ud801\\udc37\\ud801\\udc2d\\ud801\\udc2f\\ud801\\udc49\\ud801\\udc28\",\n      \"\\ud801\\udc19\\ud801\\udc2f\\ud801\\udc3a\\ud801\\udc49\\ud801\\udc2d\\ud801\\udc2f\\ud801\\udc49\\ud801\\udc28\",\n      \"\\ud801\\udc23\\ud801\\udc2a\\ud801\\udc49\\ud801\\udc3d\",\n      \"\\ud801\\udc01\\ud801\\udc39\\ud801\\udc49\\ud801\\udc2e\\ud801\\udc4a\",\n      \"\\ud801\\udc23\\ud801\\udc29\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4c\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4a\\ud801\\udc34\",\n      \"\\ud801\\udc02\\ud801\\udc40\\ud801\\udc32\\ud801\\udc45\\ud801\\udc3b\",\n      \"\\ud801\\udc1d\\ud801\\udc2f\\ud801\\udc39\\ud801\\udc3b\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc09\\ud801\\udc3f\\ud801\\udc3b\\ud801\\udc2c\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc24\\ud801\\udc2c\\ud801\\udc42\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc14\\ud801\\udc28\\ud801\\udc45\\ud801\\udc2f\\ud801\\udc4b\\ud801\\udc3a\\ud801\\udc32\\ud801\\udc49\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ud801\\udc1d\\ud801\\udc32\\ud801\\udc4c\",\n      \"\\ud801\\udc23\\ud801\\udc32\\ud801\\udc4c\",\n      \"\\ud801\\udc13\\ud801\\udc2d\\ud801\\udc46\",\n      \"\\ud801\\udc0e\\ud801\\udc2f\\ud801\\udc4c\",\n      \"\\ud801\\udc1b\\ud801\\udc32\\ud801\\udc49\",\n      \"\\ud801\\udc19\\ud801\\udc49\\ud801\\udc34\",\n      \"\\ud801\\udc1d\\ud801\\udc30\\ud801\\udc3b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\ud801\\udc16\\ud801\\udc30\\ud801\\udc4c\",\n      \"\\ud801\\udc19\\ud801\\udc2f\\ud801\\udc3a\",\n      \"\\ud801\\udc23\\ud801\\udc2a\\ud801\\udc49\",\n      \"\\ud801\\udc01\\ud801\\udc39\\ud801\\udc49\",\n      \"\\ud801\\udc23\\ud801\\udc29\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4c\",\n      \"\\ud801\\udc16\\ud801\\udc2d\\ud801\\udc4a\",\n      \"\\ud801\\udc02\\ud801\\udc40\",\n      \"\\ud801\\udc1d\\ud801\\udc2f\\ud801\\udc39\",\n      \"\\ud801\\udc09\\ud801\\udc3f\\ud801\\udc3b\",\n      \"\\ud801\\udc24\\ud801\\udc2c\\ud801\\udc42\",\n      \"\\ud801\\udc14\\ud801\\udc28\\ud801\\udc45\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"(\\u00a4\",\n        \"negSuf\": \")\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-dsrt\",\n  \"pluralCat\": function (n) {  if (n == 1) {   return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-fj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-fj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-fk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-fk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-fm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-fm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GMD\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-gy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-gy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-hk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/y h:mm a\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-hk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ie.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ie\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-im.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-im\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-io.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-io\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-iso.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yyyy-MM-dd HH:mm\",\n    \"shortDate\": \"yyyy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-iso\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-je.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-je\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-jm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-jm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ki.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ki\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-kn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-kn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ky.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ky\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-lc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-lc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-lr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-lr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ls.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ls\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ar\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MOP\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mp.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mp\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ms.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ms\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mt\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MURs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-mw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MWK\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-mw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-my.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-my\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-na.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-na\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-nf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-nf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ng.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ng\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-nr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-nr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-nu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-nu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-nz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d/MM/y h:mm:ss a\",\n    \"mediumDate\": \"d/MM/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-nz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-pg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"PGK\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-pg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ph.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b1\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ph\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-pk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-pk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-pn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-pn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-pr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-pr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-pw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-pw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-rw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-rw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SCR\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SDG\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SLL\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ss.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SSP\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ss\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sx.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ANG\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sx\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-sz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SZL\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-sz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-tc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-tc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-tk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-tk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-to.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"T$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-to\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-tt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-tt\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-tv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-tv\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-um.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-um\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-us\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-vc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-vc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-vg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-vg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-vi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-vi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-vu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"VUV\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-vu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-ws.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"WST\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-ws\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM y h:mm:ss a\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y/MM/dd h:mm a\",\n    \"shortDate\": \"y/MM/dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-zm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ZMW\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-zm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en-zw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd MMM,y h:mm:ss a\",\n    \"mediumDate\": \"dd MMM,y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/y h:mm a\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-zw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_en.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_eo-001.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"atm\",\n      \"ptm\"\n    ],\n    \"DAY\": [\n      \"diman\\u0109o\",\n      \"lundo\",\n      \"mardo\",\n      \"merkredo\",\n      \"\\u0135a\\u016ddo\",\n      \"vendredo\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"januaro\",\n      \"februaro\",\n      \"marto\",\n      \"aprilo\",\n      \"majo\",\n      \"junio\",\n      \"julio\",\n      \"a\\u016dgusto\",\n      \"septembro\",\n      \"oktobro\",\n      \"novembro\",\n      \"decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"di\",\n      \"lu\",\n      \"ma\",\n      \"me\",\n      \"\\u0135a\",\n      \"ve\",\n      \"sa\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"a\\u016dg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, d-'a' 'de' MMMM y\",\n    \"longDate\": \"y-MMMM-dd\",\n    \"medium\": \"y-MMM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MMM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy-MM-dd HH:mm\",\n    \"shortDate\": \"yy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"eo-001\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_eo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"atm\",\n      \"ptm\"\n    ],\n    \"DAY\": [\n      \"diman\\u0109o\",\n      \"lundo\",\n      \"mardo\",\n      \"merkredo\",\n      \"\\u0135a\\u016ddo\",\n      \"vendredo\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"januaro\",\n      \"februaro\",\n      \"marto\",\n      \"aprilo\",\n      \"majo\",\n      \"junio\",\n      \"julio\",\n      \"a\\u016dgusto\",\n      \"septembro\",\n      \"oktobro\",\n      \"novembro\",\n      \"decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"di\",\n      \"lu\",\n      \"ma\",\n      \"me\",\n      \"\\u0135a\",\n      \"ve\",\n      \"sa\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"a\\u016dg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, d-'a' 'de' MMMM y\",\n    \"longDate\": \"y-MMMM-dd\",\n    \"medium\": \"y-MMM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MMM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy-MM-dd HH:mm\",\n    \"shortDate\": \"yy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"eo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-419.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-419\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ar.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-ar\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-bo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Bs\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-bo\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-cl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd-MM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd-MM-yy h:mm a\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-cl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-co.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d/MM/y h:mm:ss a\",\n    \"mediumDate\": \"d/MM/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-co\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-cr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a1\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-cr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-cu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-cu\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-do.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-do\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ea.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"es-ea\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ec.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-ec\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"es-es\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-gq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-gq\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-gt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d/MM/y h:mm:ss a\",\n    \"mediumDate\": \"d/MM/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Q\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-gt\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-hn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE dd 'de' MMMM 'de' y\",\n    \"longDate\": \"dd 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"L\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-hn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ic.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"es-ic\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-mx.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mi\\u00e9\",\n      \"jue\",\n      \"vie\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene\",\n      \"feb\",\n      \"mar\",\n      \"abr\",\n      \"may\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"sep\",\n      \"oct\",\n      \"nov\",\n      \"dic\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y H:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd/MM/yy H:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-mx\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ni.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"C$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-ni\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-pa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"MM/dd/y h:mm:ss a\",\n    \"mediumDate\": \"MM/dd/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"MM/dd/yy h:mm a\",\n    \"shortDate\": \"MM/dd/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"B/.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-pa\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-pe.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"S/.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-pe\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ph.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b1\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"es-ph\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-pr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"MM/dd/y h:mm:ss a\",\n    \"mediumDate\": \"MM/dd/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"MM/dd/yy h:mm a\",\n    \"shortDate\": \"MM/dd/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-pr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-py.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Gs\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-py\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-sv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-sv\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-us\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-uy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-uy\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es-ve.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\\u00a0m.\",\n      \"p.\\u00a0m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"setiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"set.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y h:mm:ss a\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Bs\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"es-ve\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a. m.\",\n      \"p. m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"lunes\",\n      \"martes\",\n      \"mi\\u00e9rcoles\",\n      \"jueves\",\n      \"viernes\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"enero\",\n      \"febrero\",\n      \"marzo\",\n      \"abril\",\n      \"mayo\",\n      \"junio\",\n      \"julio\",\n      \"agosto\",\n      \"septiembre\",\n      \"octubre\",\n      \"noviembre\",\n      \"diciembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom.\",\n      \"lun.\",\n      \"mar.\",\n      \"mi\\u00e9.\",\n      \"jue.\",\n      \"vie.\",\n      \"s\\u00e1b.\"\n    ],\n    \"SHORTMONTH\": [\n      \"ene.\",\n      \"feb.\",\n      \"mar.\",\n      \"abr.\",\n      \"may.\",\n      \"jun.\",\n      \"jul.\",\n      \"ago.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dic.\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y H:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/yy H:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"es\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_et-ee.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"p\\u00fchap\\u00e4ev\",\n      \"esmasp\\u00e4ev\",\n      \"teisip\\u00e4ev\",\n      \"kolmap\\u00e4ev\",\n      \"neljap\\u00e4ev\",\n      \"reede\",\n      \"laup\\u00e4ev\"\n    ],\n    \"MONTH\": [\n      \"jaanuar\",\n      \"veebruar\",\n      \"m\\u00e4rts\",\n      \"aprill\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"august\",\n      \"september\",\n      \"oktoober\",\n      \"november\",\n      \"detsember\"\n    ],\n    \"SHORTDAY\": [\n      \"P\",\n      \"E\",\n      \"T\",\n      \"K\",\n      \"N\",\n      \"R\",\n      \"L\"\n    ],\n    \"SHORTMONTH\": [\n      \"jaan\",\n      \"veebr\",\n      \"m\\u00e4rts\",\n      \"apr\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"aug\",\n      \"sept\",\n      \"okt\",\n      \"nov\",\n      \"dets\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y H:mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"H:mm.ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"et-ee\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"p\\u00fchap\\u00e4ev\",\n      \"esmasp\\u00e4ev\",\n      \"teisip\\u00e4ev\",\n      \"kolmap\\u00e4ev\",\n      \"neljap\\u00e4ev\",\n      \"reede\",\n      \"laup\\u00e4ev\"\n    ],\n    \"MONTH\": [\n      \"jaanuar\",\n      \"veebruar\",\n      \"m\\u00e4rts\",\n      \"aprill\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"august\",\n      \"september\",\n      \"oktoober\",\n      \"november\",\n      \"detsember\"\n    ],\n    \"SHORTDAY\": [\n      \"P\",\n      \"E\",\n      \"T\",\n      \"K\",\n      \"N\",\n      \"R\",\n      \"L\"\n    ],\n    \"SHORTMONTH\": [\n      \"jaan\",\n      \"veebr\",\n      \"m\\u00e4rts\",\n      \"apr\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"aug\",\n      \"sept\",\n      \"okt\",\n      \"nov\",\n      \"dets\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y H:mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"H:mm.ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_eu-es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"igandea\",\n      \"astelehena\",\n      \"asteartea\",\n      \"asteazkena\",\n      \"osteguna\",\n      \"ostirala\",\n      \"larunbata\"\n    ],\n    \"MONTH\": [\n      \"urtarrilak\",\n      \"otsailak\",\n      \"martxoak\",\n      \"apirilak\",\n      \"maiatzak\",\n      \"ekainak\",\n      \"uztailak\",\n      \"abuztuak\",\n      \"irailak\",\n      \"urriak\",\n      \"azaroak\",\n      \"abenduak\"\n    ],\n    \"SHORTDAY\": [\n      \"ig.\",\n      \"al.\",\n      \"ar.\",\n      \"az.\",\n      \"og.\",\n      \"or.\",\n      \"lr.\"\n    ],\n    \"SHORTMONTH\": [\n      \"urt.\",\n      \"ots.\",\n      \"mar.\",\n      \"api.\",\n      \"mai.\",\n      \"eka.\",\n      \"uzt.\",\n      \"abu.\",\n      \"ira.\",\n      \"urr.\",\n      \"aza.\",\n      \"abe.\"\n    ],\n    \"fullDate\": \"y('e')'ko' MMMM d, EEEE\",\n    \"longDate\": \"y('e')'ko' MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y/MM/dd HH:mm\",\n    \"shortDate\": \"y/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"eu-es\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_eu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"igandea\",\n      \"astelehena\",\n      \"asteartea\",\n      \"asteazkena\",\n      \"osteguna\",\n      \"ostirala\",\n      \"larunbata\"\n    ],\n    \"MONTH\": [\n      \"urtarrilak\",\n      \"otsailak\",\n      \"martxoak\",\n      \"apirilak\",\n      \"maiatzak\",\n      \"ekainak\",\n      \"uztailak\",\n      \"abuztuak\",\n      \"irailak\",\n      \"urriak\",\n      \"azaroak\",\n      \"abenduak\"\n    ],\n    \"SHORTDAY\": [\n      \"ig.\",\n      \"al.\",\n      \"ar.\",\n      \"az.\",\n      \"og.\",\n      \"or.\",\n      \"lr.\"\n    ],\n    \"SHORTMONTH\": [\n      \"urt.\",\n      \"ots.\",\n      \"mar.\",\n      \"api.\",\n      \"mai.\",\n      \"eka.\",\n      \"uzt.\",\n      \"abu.\",\n      \"ira.\",\n      \"urr.\",\n      \"aza.\",\n      \"abe.\"\n    ],\n    \"fullDate\": \"y('e')'ko' MMMM d, EEEE\",\n    \"longDate\": \"y('e')'ko' MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y/MM/dd HH:mm\",\n    \"shortDate\": \"y/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"eu\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ewo-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"k\\u00edk\\u00edr\\u00edg\",\n      \"ng\\u0259g\\u00f3g\\u0259le\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u0254\",\n      \"m\\u0254\\u0301ndi\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301b\\u025b\\u030c\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301l\\u025b\\u0301\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301nyi\",\n      \"f\\u00falad\\u00e9\",\n      \"s\\u00e9rad\\u00e9\"\n    ],\n    \"MONTH\": [\n      \"ng\\u0254n os\\u00fa\",\n      \"ng\\u0254n b\\u025b\\u030c\",\n      \"ng\\u0254n l\\u00e1la\",\n      \"ng\\u0254n nyina\",\n      \"ng\\u0254n t\\u00e1na\",\n      \"ng\\u0254n sam\\u0259na\",\n      \"ng\\u0254n zamgb\\u00e1la\",\n      \"ng\\u0254n mwom\",\n      \"ng\\u0254n ebul\\u00fa\",\n      \"ng\\u0254n aw\\u00f3m\",\n      \"ng\\u0254n aw\\u00f3m ai dzi\\u00e1\",\n      \"ng\\u0254n aw\\u00f3m ai b\\u025b\\u030c\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"m\\u0254\\u0301n\",\n      \"smb\",\n      \"sml\",\n      \"smn\",\n      \"f\\u00fal\",\n      \"s\\u00e9r\"\n    ],\n    \"SHORTMONTH\": [\n      \"ngo\",\n      \"ngb\",\n      \"ngl\",\n      \"ngn\",\n      \"ngt\",\n      \"ngs\",\n      \"ngz\",\n      \"ngm\",\n      \"nge\",\n      \"nga\",\n      \"ngad\",\n      \"ngab\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ewo-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ewo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"k\\u00edk\\u00edr\\u00edg\",\n      \"ng\\u0259g\\u00f3g\\u0259le\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u0254\",\n      \"m\\u0254\\u0301ndi\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301b\\u025b\\u030c\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301l\\u025b\\u0301\",\n      \"s\\u0254\\u0301nd\\u0254 m\\u0259l\\u00fa m\\u0259\\u0301nyi\",\n      \"f\\u00falad\\u00e9\",\n      \"s\\u00e9rad\\u00e9\"\n    ],\n    \"MONTH\": [\n      \"ng\\u0254n os\\u00fa\",\n      \"ng\\u0254n b\\u025b\\u030c\",\n      \"ng\\u0254n l\\u00e1la\",\n      \"ng\\u0254n nyina\",\n      \"ng\\u0254n t\\u00e1na\",\n      \"ng\\u0254n sam\\u0259na\",\n      \"ng\\u0254n zamgb\\u00e1la\",\n      \"ng\\u0254n mwom\",\n      \"ng\\u0254n ebul\\u00fa\",\n      \"ng\\u0254n aw\\u00f3m\",\n      \"ng\\u0254n aw\\u00f3m ai dzi\\u00e1\",\n      \"ng\\u0254n aw\\u00f3m ai b\\u025b\\u030c\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"m\\u0254\\u0301n\",\n      \"smb\",\n      \"sml\",\n      \"smn\",\n      \"f\\u00fal\",\n      \"s\\u00e9r\"\n    ],\n    \"SHORTMONTH\": [\n      \"ngo\",\n      \"ngb\",\n      \"ngl\",\n      \"ngn\",\n      \"ngt\",\n      \"ngs\",\n      \"ngz\",\n      \"ngm\",\n      \"nge\",\n      \"nga\",\n      \"ngad\",\n      \"ngab\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ewo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fa-af.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644\\u200c\\u0627\\u0632\\u0638\\u0647\\u0631\",\n      \"\\u0628\\u0639\\u062f\\u0627\\u0632\\u0638\\u0647\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\",\n      \"\\u0641\\u0648\\u0631\\u06cc\\u0647\\u0654\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0622\\u0648\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0640\\u06cc\",\n      \"\\u0698\\u0648\\u0626\\u0646\",\n      \"\\u062c\\u0648\\u0644\",\n      \"\\u0627\\u0648\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Af.\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u200e\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u200e\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fa-af\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fa-ir.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644\\u200c\\u0627\\u0632\\u0638\\u0647\\u0631\",\n      \"\\u0628\\u0639\\u062f\\u0627\\u0632\\u0638\\u0647\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647\\u0654\",\n      \"\\u0641\\u0648\\u0631\\u06cc\\u0647\\u0654\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0622\\u0648\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0647\\u0654\",\n      \"\\u0698\\u0648\\u0626\\u0646\",\n      \"\\u0698\\u0648\\u0626\\u06cc\\u0647\\u0654\",\n      \"\\u0627\\u0648\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647\\u0654\",\n      \"\\u0641\\u0648\\u0631\\u06cc\\u0647\\u0654\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0622\\u0648\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0647\\u0654\",\n      \"\\u0698\\u0648\\u0626\\u0646\",\n      \"\\u0698\\u0648\\u0626\\u06cc\\u0647\\u0654\",\n      \"\\u0627\\u0648\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u200e\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u200e\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fa-ir\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644\\u200c\\u0627\\u0632\\u0638\\u0647\\u0631\",\n      \"\\u0628\\u0639\\u062f\\u0627\\u0632\\u0638\\u0647\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647\\u0654\",\n      \"\\u0641\\u0648\\u0631\\u06cc\\u0647\\u0654\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0622\\u0648\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0647\\u0654\",\n      \"\\u0698\\u0648\\u0626\\u0646\",\n      \"\\u0698\\u0648\\u0626\\u06cc\\u0647\\u0654\",\n      \"\\u0627\\u0648\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647\\u0654\",\n      \"\\u0641\\u0648\\u0631\\u06cc\\u0647\\u0654\",\n      \"\\u0645\\u0627\\u0631\\u0633\",\n      \"\\u0622\\u0648\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0647\\u0654\",\n      \"\\u0698\\u0648\\u0626\\u0646\",\n      \"\\u0698\\u0648\\u0626\\u06cc\\u0647\\u0654\",\n      \"\\u0627\\u0648\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rial\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u200e\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u200e\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fa\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ff-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"subaka\",\n      \"kikii\\u0257e\"\n    ],\n    \"DAY\": [\n      \"dewo\",\n      \"aa\\u0253nde\",\n      \"mawbaare\",\n      \"njeslaare\",\n      \"naasaande\",\n      \"mawnde\",\n      \"hoore-biir\"\n    ],\n    \"MONTH\": [\n      \"siilo\",\n      \"colte\",\n      \"mbooy\",\n      \"see\\u0257to\",\n      \"duujal\",\n      \"korse\",\n      \"morso\",\n      \"juko\",\n      \"siilto\",\n      \"yarkomaa\",\n      \"jolal\",\n      \"bowte\"\n    ],\n    \"SHORTDAY\": [\n      \"dew\",\n      \"aa\\u0253\",\n      \"maw\",\n      \"nje\",\n      \"naa\",\n      \"mwd\",\n      \"hbi\"\n    ],\n    \"SHORTMONTH\": [\n      \"sii\",\n      \"col\",\n      \"mbo\",\n      \"see\",\n      \"duu\",\n      \"kor\",\n      \"mor\",\n      \"juk\",\n      \"slt\",\n      \"yar\",\n      \"jol\",\n      \"bow\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ff-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ff-gn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"subaka\",\n      \"kikii\\u0257e\"\n    ],\n    \"DAY\": [\n      \"dewo\",\n      \"aa\\u0253nde\",\n      \"mawbaare\",\n      \"njeslaare\",\n      \"naasaande\",\n      \"mawnde\",\n      \"hoore-biir\"\n    ],\n    \"MONTH\": [\n      \"siilo\",\n      \"colte\",\n      \"mbooy\",\n      \"see\\u0257to\",\n      \"duujal\",\n      \"korse\",\n      \"morso\",\n      \"juko\",\n      \"siilto\",\n      \"yarkomaa\",\n      \"jolal\",\n      \"bowte\"\n    ],\n    \"SHORTDAY\": [\n      \"dew\",\n      \"aa\\u0253\",\n      \"maw\",\n      \"nje\",\n      \"naa\",\n      \"mwd\",\n      \"hbi\"\n    ],\n    \"SHORTMONTH\": [\n      \"sii\",\n      \"col\",\n      \"mbo\",\n      \"see\",\n      \"duu\",\n      \"kor\",\n      \"mor\",\n      \"juk\",\n      \"slt\",\n      \"yar\",\n      \"jol\",\n      \"bow\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FG\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ff-gn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ff-mr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"subaka\",\n      \"kikii\\u0257e\"\n    ],\n    \"DAY\": [\n      \"dewo\",\n      \"aa\\u0253nde\",\n      \"mawbaare\",\n      \"njeslaare\",\n      \"naasaande\",\n      \"mawnde\",\n      \"hoore-biir\"\n    ],\n    \"MONTH\": [\n      \"siilo\",\n      \"colte\",\n      \"mbooy\",\n      \"see\\u0257to\",\n      \"duujal\",\n      \"korse\",\n      \"morso\",\n      \"juko\",\n      \"siilto\",\n      \"yarkomaa\",\n      \"jolal\",\n      \"bowte\"\n    ],\n    \"SHORTDAY\": [\n      \"dew\",\n      \"aa\\u0253\",\n      \"maw\",\n      \"nje\",\n      \"naa\",\n      \"mwd\",\n      \"hbi\"\n    ],\n    \"SHORTMONTH\": [\n      \"sii\",\n      \"col\",\n      \"mbo\",\n      \"see\",\n      \"duu\",\n      \"kor\",\n      \"mor\",\n      \"juk\",\n      \"slt\",\n      \"yar\",\n      \"jol\",\n      \"bow\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MRO\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ff-mr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ff-sn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"subaka\",\n      \"kikii\\u0257e\"\n    ],\n    \"DAY\": [\n      \"dewo\",\n      \"aa\\u0253nde\",\n      \"mawbaare\",\n      \"njeslaare\",\n      \"naasaande\",\n      \"mawnde\",\n      \"hoore-biir\"\n    ],\n    \"MONTH\": [\n      \"siilo\",\n      \"colte\",\n      \"mbooy\",\n      \"see\\u0257to\",\n      \"duujal\",\n      \"korse\",\n      \"morso\",\n      \"juko\",\n      \"siilto\",\n      \"yarkomaa\",\n      \"jolal\",\n      \"bowte\"\n    ],\n    \"SHORTDAY\": [\n      \"dew\",\n      \"aa\\u0253\",\n      \"maw\",\n      \"nje\",\n      \"naa\",\n      \"mwd\",\n      \"hbi\"\n    ],\n    \"SHORTMONTH\": [\n      \"sii\",\n      \"col\",\n      \"mbo\",\n      \"see\",\n      \"duu\",\n      \"kor\",\n      \"mor\",\n      \"juk\",\n      \"slt\",\n      \"yar\",\n      \"jol\",\n      \"bow\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ff-sn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ff.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"subaka\",\n      \"kikii\\u0257e\"\n    ],\n    \"DAY\": [\n      \"dewo\",\n      \"aa\\u0253nde\",\n      \"mawbaare\",\n      \"njeslaare\",\n      \"naasaande\",\n      \"mawnde\",\n      \"hoore-biir\"\n    ],\n    \"MONTH\": [\n      \"siilo\",\n      \"colte\",\n      \"mbooy\",\n      \"see\\u0257to\",\n      \"duujal\",\n      \"korse\",\n      \"morso\",\n      \"juko\",\n      \"siilto\",\n      \"yarkomaa\",\n      \"jolal\",\n      \"bowte\"\n    ],\n    \"SHORTDAY\": [\n      \"dew\",\n      \"aa\\u0253\",\n      \"maw\",\n      \"nje\",\n      \"naa\",\n      \"mwd\",\n      \"hbi\"\n    ],\n    \"SHORTMONTH\": [\n      \"sii\",\n      \"col\",\n      \"mbo\",\n      \"see\",\n      \"duu\",\n      \"kor\",\n      \"mor\",\n      \"juk\",\n      \"slt\",\n      \"yar\",\n      \"jol\",\n      \"bow\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ff\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fi-fi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ap.\",\n      \"ip.\"\n    ],\n    \"DAY\": [\n      \"sunnuntaina\",\n      \"maanantaina\",\n      \"tiistaina\",\n      \"keskiviikkona\",\n      \"torstaina\",\n      \"perjantaina\",\n      \"lauantaina\"\n    ],\n    \"MONTH\": [\n      \"tammikuuta\",\n      \"helmikuuta\",\n      \"maaliskuuta\",\n      \"huhtikuuta\",\n      \"toukokuuta\",\n      \"kes\\u00e4kuuta\",\n      \"hein\\u00e4kuuta\",\n      \"elokuuta\",\n      \"syyskuuta\",\n      \"lokakuuta\",\n      \"marraskuuta\",\n      \"joulukuuta\"\n    ],\n    \"SHORTDAY\": [\n      \"su\",\n      \"ma\",\n      \"ti\",\n      \"ke\",\n      \"to\",\n      \"pe\",\n      \"la\"\n    ],\n    \"SHORTMONTH\": [\n      \"tammikuuta\",\n      \"helmikuuta\",\n      \"maaliskuuta\",\n      \"huhtikuuta\",\n      \"toukokuuta\",\n      \"kes\\u00e4kuuta\",\n      \"hein\\u00e4kuuta\",\n      \"elokuuta\",\n      \"syyskuuta\",\n      \"lokakuuta\",\n      \"marraskuuta\",\n      \"joulukuuta\"\n    ],\n    \"fullDate\": \"cccc d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H.mm.ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H.mm.ss\",\n    \"short\": \"d.M.y H.mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"H.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fi-fi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ap.\",\n      \"ip.\"\n    ],\n    \"DAY\": [\n      \"sunnuntaina\",\n      \"maanantaina\",\n      \"tiistaina\",\n      \"keskiviikkona\",\n      \"torstaina\",\n      \"perjantaina\",\n      \"lauantaina\"\n    ],\n    \"MONTH\": [\n      \"tammikuuta\",\n      \"helmikuuta\",\n      \"maaliskuuta\",\n      \"huhtikuuta\",\n      \"toukokuuta\",\n      \"kes\\u00e4kuuta\",\n      \"hein\\u00e4kuuta\",\n      \"elokuuta\",\n      \"syyskuuta\",\n      \"lokakuuta\",\n      \"marraskuuta\",\n      \"joulukuuta\"\n    ],\n    \"SHORTDAY\": [\n      \"su\",\n      \"ma\",\n      \"ti\",\n      \"ke\",\n      \"to\",\n      \"pe\",\n      \"la\"\n    ],\n    \"SHORTMONTH\": [\n      \"tammikuuta\",\n      \"helmikuuta\",\n      \"maaliskuuta\",\n      \"huhtikuuta\",\n      \"toukokuuta\",\n      \"kes\\u00e4kuuta\",\n      \"hein\\u00e4kuuta\",\n      \"elokuuta\",\n      \"syyskuuta\",\n      \"lokakuuta\",\n      \"marraskuuta\",\n      \"joulukuuta\"\n    ],\n    \"fullDate\": \"cccc d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H.mm.ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H.mm.ss\",\n    \"short\": \"d.M.y H.mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"H.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fil-ph.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Linggo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Miyerkules\",\n      \"Huwebes\",\n      \"Biyernes\",\n      \"Sabado\"\n    ],\n    \"MONTH\": [\n      \"Enero\",\n      \"Pebrero\",\n      \"Marso\",\n      \"Abril\",\n      \"Mayo\",\n      \"Hunyo\",\n      \"Hulyo\",\n      \"Agosto\",\n      \"Setyembre\",\n      \"Oktubre\",\n      \"Nobyembre\",\n      \"Disyembre\"\n    ],\n    \"SHORTDAY\": [\n      \"Lin\",\n      \"Lun\",\n      \"Mar\",\n      \"Miy\",\n      \"Huw\",\n      \"Biy\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ene\",\n      \"Peb\",\n      \"Mar\",\n      \"Abr\",\n      \"May\",\n      \"Hun\",\n      \"Hul\",\n      \"Ago\",\n      \"Set\",\n      \"Okt\",\n      \"Nob\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b1\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fil-ph\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fil.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Linggo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Miyerkules\",\n      \"Huwebes\",\n      \"Biyernes\",\n      \"Sabado\"\n    ],\n    \"MONTH\": [\n      \"Enero\",\n      \"Pebrero\",\n      \"Marso\",\n      \"Abril\",\n      \"Mayo\",\n      \"Hunyo\",\n      \"Hulyo\",\n      \"Agosto\",\n      \"Setyembre\",\n      \"Oktubre\",\n      \"Nobyembre\",\n      \"Disyembre\"\n    ],\n    \"SHORTDAY\": [\n      \"Lin\",\n      \"Lun\",\n      \"Mar\",\n      \"Miy\",\n      \"Huw\",\n      \"Biy\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ene\",\n      \"Peb\",\n      \"Mar\",\n      \"Abr\",\n      \"May\",\n      \"Hun\",\n      \"Hul\",\n      \"Ago\",\n      \"Set\",\n      \"Okt\",\n      \"Nob\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b1\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fil\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fo-fo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"um fyrrapartur\",\n      \"um seinnapartur\"\n    ],\n    \"DAY\": [\n      \"sunnudagur\",\n      \"m\\u00e1nadagur\",\n      \"t\\u00fdsdagur\",\n      \"mikudagur\",\n      \"h\\u00f3sdagur\",\n      \"fr\\u00edggjadagur\",\n      \"leygardagur\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"apr\\u00edl\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"sun\",\n      \"m\\u00e1n\",\n      \"t\\u00fds\",\n      \"mik\",\n      \"h\\u00f3s\",\n      \"fr\\u00ed\",\n      \"ley\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"d. MMM y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fo-fo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"um fyrrapartur\",\n      \"um seinnapartur\"\n    ],\n    \"DAY\": [\n      \"sunnudagur\",\n      \"m\\u00e1nadagur\",\n      \"t\\u00fdsdagur\",\n      \"mikudagur\",\n      \"h\\u00f3sdagur\",\n      \"fr\\u00edggjadagur\",\n      \"leygardagur\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"apr\\u00edl\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"sun\",\n      \"m\\u00e1n\",\n      \"t\\u00fds\",\n      \"mik\",\n      \"h\\u00f3s\",\n      \"fr\\u00ed\",\n      \"ley\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"d. MMM y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-be.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/MM/yy HH:mm\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-be\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-bf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-bf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-bi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FBu\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-bi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-bj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-bj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-bl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-bl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ca.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"y-MM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy-MM-dd HH:mm\",\n    \"shortDate\": \"yy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ca\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-cd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-cd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-cf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-cf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-cg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-cg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fr-ch\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ci.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ci\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-dj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Fdj\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-dj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-dz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-dz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-fr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ga.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ga\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-gf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-gf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-gn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FG\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-gn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-gp.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-gp\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-gq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-gq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ht.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"HTG\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ht\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-km.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-km\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-lu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-lu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ma\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ar\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ml\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MRO\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-mu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MURs\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-mu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-nc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFP\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-nc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-ne.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-ne\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-pf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFP\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-pf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-pm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-pm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-re.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-re\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-rw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-rw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-sc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SCR\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-sc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-sn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-sn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-sy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-sy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-td.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-td\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-tg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-tg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-tn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-tn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-vu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"VUV\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-vu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-wf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFP\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-wf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr-yt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr-yt\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"MONTH\": [\n      \"janvier\",\n      \"f\\u00e9vrier\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"ao\\u00fbt\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"d\\u00e9cembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dim.\",\n      \"lun.\",\n      \"mar.\",\n      \"mer.\",\n      \"jeu.\",\n      \"ven.\",\n      \"sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"f\\u00e9vr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juil.\",\n      \"ao\\u00fbt\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"d\\u00e9c.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"fr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fur-it.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\",\n      \"p.\"\n    ],\n    \"DAY\": [\n      \"domenie\",\n      \"lunis\",\n      \"martars\",\n      \"miercus\",\n      \"joibe\",\n      \"vinars\",\n      \"sabide\"\n    ],\n    \"MONTH\": [\n      \"Zen\\u00e2r\",\n      \"Fevr\\u00e2r\",\n      \"Mar\\u00e7\",\n      \"Avr\\u00eel\",\n      \"Mai\",\n      \"Jugn\",\n      \"Lui\",\n      \"Avost\",\n      \"Setembar\",\n      \"Otubar\",\n      \"Novembar\",\n      \"Dicembar\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mie\",\n      \"joi\",\n      \"vin\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Zen\",\n      \"Fev\",\n      \"Mar\",\n      \"Avr\",\n      \"Mai\",\n      \"Jug\",\n      \"Lui\",\n      \"Avo\",\n      \"Set\",\n      \"Otu\",\n      \"Nov\",\n      \"Dic\"\n    ],\n    \"fullDate\": \"EEEE d 'di' MMMM 'dal' y\",\n    \"longDate\": \"d 'di' MMMM 'dal' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fur-it\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fur.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.\",\n      \"p.\"\n    ],\n    \"DAY\": [\n      \"domenie\",\n      \"lunis\",\n      \"martars\",\n      \"miercus\",\n      \"joibe\",\n      \"vinars\",\n      \"sabide\"\n    ],\n    \"MONTH\": [\n      \"Zen\\u00e2r\",\n      \"Fevr\\u00e2r\",\n      \"Mar\\u00e7\",\n      \"Avr\\u00eel\",\n      \"Mai\",\n      \"Jugn\",\n      \"Lui\",\n      \"Avost\",\n      \"Setembar\",\n      \"Otubar\",\n      \"Novembar\",\n      \"Dicembar\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mie\",\n      \"joi\",\n      \"vin\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Zen\",\n      \"Fev\",\n      \"Mar\",\n      \"Avr\",\n      \"Mai\",\n      \"Jug\",\n      \"Lui\",\n      \"Avo\",\n      \"Set\",\n      \"Otu\",\n      \"Nov\",\n      \"Dic\"\n    ],\n    \"fullDate\": \"EEEE d 'di' MMMM 'dal' y\",\n    \"longDate\": \"d 'di' MMMM 'dal' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fur\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fy-nl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"snein\",\n      \"moandei\",\n      \"tiisdei\",\n      \"woansdei\",\n      \"tongersdei\",\n      \"freed\",\n      \"sneon\"\n    ],\n    \"MONTH\": [\n      \"jannewaris\",\n      \"febrewaris\",\n      \"maart\",\n      \"april\",\n      \"maaie\",\n      \"juny\",\n      \"july\",\n      \"augustus\",\n      \"septimber\",\n      \"oktober\",\n      \"novimber\",\n      \"desimber\"\n    ],\n    \"SHORTDAY\": [\n      \"si\",\n      \"mo\",\n      \"ti\",\n      \"wo\",\n      \"to\",\n      \"fr\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fy-nl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_fy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"snein\",\n      \"moandei\",\n      \"tiisdei\",\n      \"woansdei\",\n      \"tongersdei\",\n      \"freed\",\n      \"sneon\"\n    ],\n    \"MONTH\": [\n      \"jannewaris\",\n      \"febrewaris\",\n      \"maart\",\n      \"april\",\n      \"maaie\",\n      \"juny\",\n      \"july\",\n      \"augustus\",\n      \"septimber\",\n      \"oktober\",\n      \"novimber\",\n      \"desimber\"\n    ],\n    \"SHORTDAY\": [\n      \"si\",\n      \"mo\",\n      \"ti\",\n      \"wo\",\n      \"to\",\n      \"fr\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"fy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ga-ie.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"D\\u00e9 Domhnaigh\",\n      \"D\\u00e9 Luain\",\n      \"D\\u00e9 M\\u00e1irt\",\n      \"D\\u00e9 C\\u00e9adaoin\",\n      \"D\\u00e9ardaoin\",\n      \"D\\u00e9 hAoine\",\n      \"D\\u00e9 Sathairn\"\n    ],\n    \"MONTH\": [\n      \"Ean\\u00e1ir\",\n      \"Feabhra\",\n      \"M\\u00e1rta\",\n      \"Aibre\\u00e1n\",\n      \"Bealtaine\",\n      \"Meitheamh\",\n      \"I\\u00fail\",\n      \"L\\u00fanasa\",\n      \"Me\\u00e1n F\\u00f3mhair\",\n      \"Deireadh F\\u00f3mhair\",\n      \"Samhain\",\n      \"Nollaig\"\n    ],\n    \"SHORTDAY\": [\n      \"Domh\",\n      \"Luan\",\n      \"M\\u00e1irt\",\n      \"C\\u00e9ad\",\n      \"D\\u00e9ar\",\n      \"Aoine\",\n      \"Sath\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ean\",\n      \"Feabh\",\n      \"M\\u00e1rta\",\n      \"Aib\",\n      \"Beal\",\n      \"Meith\",\n      \"I\\u00fail\",\n      \"L\\u00fan\",\n      \"MF\\u00f3mh\",\n      \"DF\\u00f3mh\",\n      \"Samh\",\n      \"Noll\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ga-ie\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n >= 3 && n <= 6) {    return PLURAL_CATEGORY.FEW;  }  if (n >= 7 && n <= 10) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ga.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"D\\u00e9 Domhnaigh\",\n      \"D\\u00e9 Luain\",\n      \"D\\u00e9 M\\u00e1irt\",\n      \"D\\u00e9 C\\u00e9adaoin\",\n      \"D\\u00e9ardaoin\",\n      \"D\\u00e9 hAoine\",\n      \"D\\u00e9 Sathairn\"\n    ],\n    \"MONTH\": [\n      \"Ean\\u00e1ir\",\n      \"Feabhra\",\n      \"M\\u00e1rta\",\n      \"Aibre\\u00e1n\",\n      \"Bealtaine\",\n      \"Meitheamh\",\n      \"I\\u00fail\",\n      \"L\\u00fanasa\",\n      \"Me\\u00e1n F\\u00f3mhair\",\n      \"Deireadh F\\u00f3mhair\",\n      \"Samhain\",\n      \"Nollaig\"\n    ],\n    \"SHORTDAY\": [\n      \"Domh\",\n      \"Luan\",\n      \"M\\u00e1irt\",\n      \"C\\u00e9ad\",\n      \"D\\u00e9ar\",\n      \"Aoine\",\n      \"Sath\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ean\",\n      \"Feabh\",\n      \"M\\u00e1rta\",\n      \"Aib\",\n      \"Beal\",\n      \"Meith\",\n      \"I\\u00fail\",\n      \"L\\u00fan\",\n      \"MF\\u00f3mh\",\n      \"DF\\u00f3mh\",\n      \"Samh\",\n      \"Noll\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ga\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n >= 3 && n <= 6) {    return PLURAL_CATEGORY.FEW;  }  if (n >= 7 && n <= 10) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gd-gb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"m\",\n      \"f\"\n    ],\n    \"DAY\": [\n      \"DiD\\u00f2mhnaich\",\n      \"DiLuain\",\n      \"DiM\\u00e0irt\",\n      \"DiCiadain\",\n      \"DiarDaoin\",\n      \"DihAoine\",\n      \"DiSathairne\"\n    ],\n    \"MONTH\": [\n      \"dhen Fhaoilleach\",\n      \"dhen Ghearran\",\n      \"dhen Mh\\u00e0rt\",\n      \"dhen Ghiblean\",\n      \"dhen Ch\\u00e8itean\",\n      \"dhen \\u00d2gmhios\",\n      \"dhen Iuchar\",\n      \"dhen L\\u00f9nastal\",\n      \"dhen t-Sultain\",\n      \"dhen D\\u00e0mhair\",\n      \"dhen t-Samhain\",\n      \"dhen D\\u00f9bhlachd\"\n    ],\n    \"SHORTDAY\": [\n      \"DiD\",\n      \"DiL\",\n      \"DiM\",\n      \"DiC\",\n      \"Dia\",\n      \"Dih\",\n      \"DiS\"\n    ],\n    \"SHORTMONTH\": [\n      \"Faoi\",\n      \"Gearr\",\n      \"M\\u00e0rt\",\n      \"Gibl\",\n      \"C\\u00e8it\",\n      \"\\u00d2gmh\",\n      \"Iuch\",\n      \"L\\u00f9na\",\n      \"Sult\",\n      \"D\\u00e0mh\",\n      \"Samh\",\n      \"D\\u00f9bh\"\n    ],\n    \"fullDate\": \"EEEE, d'mh' MMMM y\",\n    \"longDate\": \"d'mh' MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gd-gb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"m\",\n      \"f\"\n    ],\n    \"DAY\": [\n      \"DiD\\u00f2mhnaich\",\n      \"DiLuain\",\n      \"DiM\\u00e0irt\",\n      \"DiCiadain\",\n      \"DiarDaoin\",\n      \"DihAoine\",\n      \"DiSathairne\"\n    ],\n    \"MONTH\": [\n      \"dhen Fhaoilleach\",\n      \"dhen Ghearran\",\n      \"dhen Mh\\u00e0rt\",\n      \"dhen Ghiblean\",\n      \"dhen Ch\\u00e8itean\",\n      \"dhen \\u00d2gmhios\",\n      \"dhen Iuchar\",\n      \"dhen L\\u00f9nastal\",\n      \"dhen t-Sultain\",\n      \"dhen D\\u00e0mhair\",\n      \"dhen t-Samhain\",\n      \"dhen D\\u00f9bhlachd\"\n    ],\n    \"SHORTDAY\": [\n      \"DiD\",\n      \"DiL\",\n      \"DiM\",\n      \"DiC\",\n      \"Dia\",\n      \"Dih\",\n      \"DiS\"\n    ],\n    \"SHORTMONTH\": [\n      \"Faoi\",\n      \"Gearr\",\n      \"M\\u00e0rt\",\n      \"Gibl\",\n      \"C\\u00e8it\",\n      \"\\u00d2gmh\",\n      \"Iuch\",\n      \"L\\u00f9na\",\n      \"Sult\",\n      \"D\\u00e0mh\",\n      \"Samh\",\n      \"D\\u00f9bh\"\n    ],\n    \"fullDate\": \"EEEE, d'mh' MMMM y\",\n    \"longDate\": \"d'mh' MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gl-es.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"luns\",\n      \"martes\",\n      \"m\\u00e9rcores\",\n      \"xoves\",\n      \"venres\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"xaneiro\",\n      \"febreiro\",\n      \"marzo\",\n      \"abril\",\n      \"maio\",\n      \"xu\\u00f1o\",\n      \"xullo\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"m\\u00e9r\",\n      \"xov\",\n      \"ven\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"xan\",\n      \"feb\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"xu\\u00f1\",\n      \"xul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gl-es\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"luns\",\n      \"martes\",\n      \"m\\u00e9rcores\",\n      \"xoves\",\n      \"venres\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"xaneiro\",\n      \"febreiro\",\n      \"marzo\",\n      \"abril\",\n      \"maio\",\n      \"xu\\u00f1o\",\n      \"xullo\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"m\\u00e9r\",\n      \"xov\",\n      \"ven\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"xan\",\n      \"feb\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"xu\\u00f1\",\n      \"xul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gsw-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nam.\"\n    ],\n    \"DAY\": [\n      \"Sunntig\",\n      \"M\\u00e4\\u00e4ntig\",\n      \"Ziischtig\",\n      \"Mittwuch\",\n      \"Dunschtig\",\n      \"Friitig\",\n      \"Samschtig\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Auguscht\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"M\\u00e4.\",\n      \"Zi.\",\n      \"Mi.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"M\\u00e4r\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"gsw-ch\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gsw-fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nam.\"\n    ],\n    \"DAY\": [\n      \"Sunntig\",\n      \"M\\u00e4\\u00e4ntig\",\n      \"Ziischtig\",\n      \"Mittwuch\",\n      \"Dunschtig\",\n      \"Friitig\",\n      \"Samschtig\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Auguscht\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"M\\u00e4.\",\n      \"Zi.\",\n      \"Mi.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"M\\u00e4r\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"gsw-fr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gsw-li.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nam.\"\n    ],\n    \"DAY\": [\n      \"Sunntig\",\n      \"M\\u00e4\\u00e4ntig\",\n      \"Ziischtig\",\n      \"Mittwuch\",\n      \"Dunschtig\",\n      \"Friitig\",\n      \"Samschtig\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Auguscht\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"M\\u00e4.\",\n      \"Zi.\",\n      \"Mi.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"M\\u00e4r\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"gsw-li\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gsw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"vorm.\",\n      \"nam.\"\n    ],\n    \"DAY\": [\n      \"Sunntig\",\n      \"M\\u00e4\\u00e4ntig\",\n      \"Ziischtig\",\n      \"Mittwuch\",\n      \"Dunschtig\",\n      \"Friitig\",\n      \"Samschtig\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4rz\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"Auguscht\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"M\\u00e4.\",\n      \"Zi.\",\n      \"Mi.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"M\\u00e4r\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"dd.MM.y HH:mm:ss\",\n    \"mediumDate\": \"dd.MM.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"gsw\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gu-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0ab0\\u0ab5\\u0abf\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab8\\u0acb\\u0aae\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0aae\\u0a82\\u0a97\\u0ab3\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0aac\\u0ac1\\u0aa7\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0a97\\u0ac1\\u0ab0\\u0ac1\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab6\\u0aa8\\u0abf\\u0ab5\\u0abe\\u0ab0\"\n    ],\n    \"MONTH\": [\n      \"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1\\u0a86\\u0ab0\\u0ac0\",\n      \"\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1\\u0a86\\u0ab0\\u0ac0\",\n      \"\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a\",\n      \"\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf\\u0ab2\",\n      \"\\u0aae\\u0ac7\",\n      \"\\u0a9c\\u0ac2\\u0aa8\",\n      \"\\u0a9c\\u0ac1\\u0ab2\\u0abe\\u0a88\",\n      \"\\u0a91\\u0a97\\u0ab8\\u0acd\\u0a9f\",\n      \"\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\",\n      \"\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acb\\u0aac\\u0ab0\",\n      \"\\u0aa8\\u0ab5\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\",\n      \"\\u0aa1\\u0abf\\u0ab8\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0ab0\\u0ab5\\u0abf\",\n      \"\\u0ab8\\u0acb\\u0aae\",\n      \"\\u0aae\\u0a82\\u0a97\\u0ab3\",\n      \"\\u0aac\\u0ac1\\u0aa7\",\n      \"\\u0a97\\u0ac1\\u0ab0\\u0ac1\",\n      \"\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0\",\n      \"\\u0ab6\\u0aa8\\u0abf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1\",\n      \"\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1\",\n      \"\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a\",\n      \"\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf\\u0ab2\",\n      \"\\u0aae\\u0ac7\",\n      \"\\u0a9c\\u0ac2\\u0aa8\",\n      \"\\u0a9c\\u0ac1\\u0ab2\\u0abe\\u0a88\",\n      \"\\u0a91\\u0a97\",\n      \"\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7\",\n      \"\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acb\",\n      \"\\u0aa8\\u0ab5\\u0ac7\",\n      \"\\u0aa1\\u0abf\\u0ab8\\u0ac7\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y hh:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"d/M/yy hh:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gu-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0ab0\\u0ab5\\u0abf\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab8\\u0acb\\u0aae\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0aae\\u0a82\\u0a97\\u0ab3\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0aac\\u0ac1\\u0aa7\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0a97\\u0ac1\\u0ab0\\u0ac1\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0\\u0ab5\\u0abe\\u0ab0\",\n      \"\\u0ab6\\u0aa8\\u0abf\\u0ab5\\u0abe\\u0ab0\"\n    ],\n    \"MONTH\": [\n      \"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1\\u0a86\\u0ab0\\u0ac0\",\n      \"\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1\\u0a86\\u0ab0\\u0ac0\",\n      \"\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a\",\n      \"\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf\\u0ab2\",\n      \"\\u0aae\\u0ac7\",\n      \"\\u0a9c\\u0ac2\\u0aa8\",\n      \"\\u0a9c\\u0ac1\\u0ab2\\u0abe\\u0a88\",\n      \"\\u0a91\\u0a97\\u0ab8\\u0acd\\u0a9f\",\n      \"\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\",\n      \"\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acb\\u0aac\\u0ab0\",\n      \"\\u0aa8\\u0ab5\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\",\n      \"\\u0aa1\\u0abf\\u0ab8\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0ab0\\u0ab5\\u0abf\",\n      \"\\u0ab8\\u0acb\\u0aae\",\n      \"\\u0aae\\u0a82\\u0a97\\u0ab3\",\n      \"\\u0aac\\u0ac1\\u0aa7\",\n      \"\\u0a97\\u0ac1\\u0ab0\\u0ac1\",\n      \"\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0\",\n      \"\\u0ab6\\u0aa8\\u0abf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1\",\n      \"\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1\",\n      \"\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a\",\n      \"\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf\\u0ab2\",\n      \"\\u0aae\\u0ac7\",\n      \"\\u0a9c\\u0ac2\\u0aa8\",\n      \"\\u0a9c\\u0ac1\\u0ab2\\u0abe\\u0a88\",\n      \"\\u0a91\\u0a97\",\n      \"\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7\",\n      \"\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acb\",\n      \"\\u0aa8\\u0ab5\\u0ac7\",\n      \"\\u0aa1\\u0abf\\u0ab8\\u0ac7\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y hh:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"d/M/yy hh:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_guz-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Ma/Mo\",\n      \"Mambia/Mog\"\n    ],\n    \"DAY\": [\n      \"Chumapiri\",\n      \"Chumatato\",\n      \"Chumaine\",\n      \"Chumatano\",\n      \"Aramisi\",\n      \"Ichuma\",\n      \"Esabato\"\n    ],\n    \"MONTH\": [\n      \"Chanuari\",\n      \"Feburari\",\n      \"Machi\",\n      \"Apiriri\",\n      \"Mei\",\n      \"Juni\",\n      \"Chulai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Okitoba\",\n      \"Nobemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Cpr\",\n      \"Ctt\",\n      \"Cmn\",\n      \"Cmt\",\n      \"Ars\",\n      \"Icm\",\n      \"Est\"\n    ],\n    \"SHORTMONTH\": [\n      \"Can\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Cul\",\n      \"Agt\",\n      \"Sep\",\n      \"Okt\",\n      \"Nob\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"guz-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_guz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Ma/Mo\",\n      \"Mambia/Mog\"\n    ],\n    \"DAY\": [\n      \"Chumapiri\",\n      \"Chumatato\",\n      \"Chumaine\",\n      \"Chumatano\",\n      \"Aramisi\",\n      \"Ichuma\",\n      \"Esabato\"\n    ],\n    \"MONTH\": [\n      \"Chanuari\",\n      \"Feburari\",\n      \"Machi\",\n      \"Apiriri\",\n      \"Mei\",\n      \"Juni\",\n      \"Chulai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Okitoba\",\n      \"Nobemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Cpr\",\n      \"Ctt\",\n      \"Cmn\",\n      \"Cmt\",\n      \"Ars\",\n      \"Icm\",\n      \"Est\"\n    ],\n    \"SHORTMONTH\": [\n      \"Can\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Cul\",\n      \"Agt\",\n      \"Sep\",\n      \"Okt\",\n      \"Nob\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"guz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gv-im.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Jedoonee\",\n      \"Jelhein\",\n      \"Jemayrt\",\n      \"Jercean\",\n      \"Jerdein\",\n      \"Jeheiney\",\n      \"Jesarn\"\n    ],\n    \"MONTH\": [\n      \"Jerrey-geuree\",\n      \"Toshiaght-arree\",\n      \"Mayrnt\",\n      \"Averil\",\n      \"Boaldyn\",\n      \"Mean-souree\",\n      \"Jerrey-souree\",\n      \"Luanistyn\",\n      \"Mean-fouyir\",\n      \"Jerrey-fouyir\",\n      \"Mee Houney\",\n      \"Mee ny Nollick\"\n    ],\n    \"SHORTDAY\": [\n      \"Jed\",\n      \"Jel\",\n      \"Jem\",\n      \"Jerc\",\n      \"Jerd\",\n      \"Jeh\",\n      \"Jes\"\n    ],\n    \"SHORTMONTH\": [\n      \"J-guer\",\n      \"T-arree\",\n      \"Mayrnt\",\n      \"Avrril\",\n      \"Boaldyn\",\n      \"M-souree\",\n      \"J-souree\",\n      \"Luanistyn\",\n      \"M-fouyir\",\n      \"J-fouyir\",\n      \"M.Houney\",\n      \"M.Nollick\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"MMM dd, y HH:mm:ss\",\n    \"mediumDate\": \"MMM dd, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gv-im\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_gv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Jedoonee\",\n      \"Jelhein\",\n      \"Jemayrt\",\n      \"Jercean\",\n      \"Jerdein\",\n      \"Jeheiney\",\n      \"Jesarn\"\n    ],\n    \"MONTH\": [\n      \"Jerrey-geuree\",\n      \"Toshiaght-arree\",\n      \"Mayrnt\",\n      \"Averil\",\n      \"Boaldyn\",\n      \"Mean-souree\",\n      \"Jerrey-souree\",\n      \"Luanistyn\",\n      \"Mean-fouyir\",\n      \"Jerrey-fouyir\",\n      \"Mee Houney\",\n      \"Mee ny Nollick\"\n    ],\n    \"SHORTDAY\": [\n      \"Jed\",\n      \"Jel\",\n      \"Jem\",\n      \"Jerc\",\n      \"Jerd\",\n      \"Jeh\",\n      \"Jes\"\n    ],\n    \"SHORTMONTH\": [\n      \"J-guer\",\n      \"T-arree\",\n      \"Mayrnt\",\n      \"Avrril\",\n      \"Boaldyn\",\n      \"M-souree\",\n      \"J-souree\",\n      \"Luanistyn\",\n      \"M-fouyir\",\n      \"J-fouyir\",\n      \"M.Houney\",\n      \"M.Nollick\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"MMM dd, y HH:mm:ss\",\n    \"mediumDate\": \"MMM dd, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"gv\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ha-latn-gh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lahadi\",\n      \"Litinin\",\n      \"Talata\",\n      \"Laraba\",\n      \"Alhamis\",\n      \"Jumma\\u02bca\",\n      \"Asabar\"\n    ],\n    \"MONTH\": [\n      \"Janairu\",\n      \"Faburairu\",\n      \"Maris\",\n      \"Afirilu\",\n      \"Mayu\",\n      \"Yuni\",\n      \"Yuli\",\n      \"Agusta\",\n      \"Satumba\",\n      \"Oktoba\",\n      \"Nuwamba\",\n      \"Disamba\"\n    ],\n    \"SHORTDAY\": [\n      \"Lh\",\n      \"Li\",\n      \"Ta\",\n      \"Lr\",\n      \"Al\",\n      \"Ju\",\n      \"As\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fab\",\n      \"Mar\",\n      \"Afi\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"Agu\",\n      \"Sat\",\n      \"Okt\",\n      \"Nuw\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GHS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ha-latn-gh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ha-latn-ne.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lahadi\",\n      \"Litinin\",\n      \"Talata\",\n      \"Laraba\",\n      \"Alhamis\",\n      \"Jumma\\u02bca\",\n      \"Asabar\"\n    ],\n    \"MONTH\": [\n      \"Janairu\",\n      \"Faburairu\",\n      \"Maris\",\n      \"Afirilu\",\n      \"Mayu\",\n      \"Yuni\",\n      \"Yuli\",\n      \"Agusta\",\n      \"Satumba\",\n      \"Oktoba\",\n      \"Nuwamba\",\n      \"Disamba\"\n    ],\n    \"SHORTDAY\": [\n      \"Lh\",\n      \"Li\",\n      \"Ta\",\n      \"Lr\",\n      \"Al\",\n      \"Ju\",\n      \"As\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fab\",\n      \"Mar\",\n      \"Afi\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"Agu\",\n      \"Sat\",\n      \"Okt\",\n      \"Nuw\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ha-latn-ne\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ha-latn-ng.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lahadi\",\n      \"Litinin\",\n      \"Talata\",\n      \"Laraba\",\n      \"Alhamis\",\n      \"Jumma\\u02bca\",\n      \"Asabar\"\n    ],\n    \"MONTH\": [\n      \"Janairu\",\n      \"Faburairu\",\n      \"Maris\",\n      \"Afirilu\",\n      \"Mayu\",\n      \"Yuni\",\n      \"Yuli\",\n      \"Agusta\",\n      \"Satumba\",\n      \"Oktoba\",\n      \"Nuwamba\",\n      \"Disamba\"\n    ],\n    \"SHORTDAY\": [\n      \"Lh\",\n      \"Li\",\n      \"Ta\",\n      \"Lr\",\n      \"Al\",\n      \"Ju\",\n      \"As\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fab\",\n      \"Mar\",\n      \"Afi\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"Agu\",\n      \"Sat\",\n      \"Okt\",\n      \"Nuw\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ha-latn-ng\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ha-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lahadi\",\n      \"Litinin\",\n      \"Talata\",\n      \"Laraba\",\n      \"Alhamis\",\n      \"Jumma\\u02bca\",\n      \"Asabar\"\n    ],\n    \"MONTH\": [\n      \"Janairu\",\n      \"Faburairu\",\n      \"Maris\",\n      \"Afirilu\",\n      \"Mayu\",\n      \"Yuni\",\n      \"Yuli\",\n      \"Agusta\",\n      \"Satumba\",\n      \"Oktoba\",\n      \"Nuwamba\",\n      \"Disamba\"\n    ],\n    \"SHORTDAY\": [\n      \"Lh\",\n      \"Li\",\n      \"Ta\",\n      \"Lr\",\n      \"Al\",\n      \"Ju\",\n      \"As\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fab\",\n      \"Mar\",\n      \"Afi\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"Agu\",\n      \"Sat\",\n      \"Okt\",\n      \"Nuw\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ha-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ha.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lahadi\",\n      \"Litinin\",\n      \"Talata\",\n      \"Laraba\",\n      \"Alhamis\",\n      \"Jumma\\u02bca\",\n      \"Asabar\"\n    ],\n    \"MONTH\": [\n      \"Janairu\",\n      \"Faburairu\",\n      \"Maris\",\n      \"Afirilu\",\n      \"Mayu\",\n      \"Yuni\",\n      \"Yuli\",\n      \"Agusta\",\n      \"Satumba\",\n      \"Oktoba\",\n      \"Nuwamba\",\n      \"Disamba\"\n    ],\n    \"SHORTDAY\": [\n      \"Lh\",\n      \"Li\",\n      \"Ta\",\n      \"Lr\",\n      \"Al\",\n      \"Ju\",\n      \"As\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fab\",\n      \"Mar\",\n      \"Afi\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"Agu\",\n      \"Sat\",\n      \"Okt\",\n      \"Nuw\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ha\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_haw-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"L\\u0101pule\",\n      \"Po\\u02bbakahi\",\n      \"Po\\u02bbalua\",\n      \"Po\\u02bbakolu\",\n      \"Po\\u02bbah\\u0101\",\n      \"Po\\u02bbalima\",\n      \"Po\\u02bbaono\"\n    ],\n    \"MONTH\": [\n      \"Ianuali\",\n      \"Pepeluali\",\n      \"Malaki\",\n      \"\\u02bbApelila\",\n      \"Mei\",\n      \"Iune\",\n      \"Iulai\",\n      \"\\u02bbAukake\",\n      \"Kepakemapa\",\n      \"\\u02bbOkakopa\",\n      \"Nowemapa\",\n      \"Kekemapa\"\n    ],\n    \"SHORTDAY\": [\n      \"LP\",\n      \"P1\",\n      \"P2\",\n      \"P3\",\n      \"P4\",\n      \"P5\",\n      \"P6\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ian.\",\n      \"Pep.\",\n      \"Mal.\",\n      \"\\u02bbAp.\",\n      \"Mei\",\n      \"Iun.\",\n      \"Iul.\",\n      \"\\u02bbAu.\",\n      \"Kep.\",\n      \"\\u02bbOk.\",\n      \"Now.\",\n      \"Kek.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"haw-us\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_haw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"L\\u0101pule\",\n      \"Po\\u02bbakahi\",\n      \"Po\\u02bbalua\",\n      \"Po\\u02bbakolu\",\n      \"Po\\u02bbah\\u0101\",\n      \"Po\\u02bbalima\",\n      \"Po\\u02bbaono\"\n    ],\n    \"MONTH\": [\n      \"Ianuali\",\n      \"Pepeluali\",\n      \"Malaki\",\n      \"\\u02bbApelila\",\n      \"Mei\",\n      \"Iune\",\n      \"Iulai\",\n      \"\\u02bbAukake\",\n      \"Kepakemapa\",\n      \"\\u02bbOkakopa\",\n      \"Nowemapa\",\n      \"Kekemapa\"\n    ],\n    \"SHORTDAY\": [\n      \"LP\",\n      \"P1\",\n      \"P2\",\n      \"P3\",\n      \"P4\",\n      \"P5\",\n      \"P6\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ian.\",\n      \"Pep.\",\n      \"Mal.\",\n      \"\\u02bbAp.\",\n      \"Mei\",\n      \"Iun.\",\n      \"Iul.\",\n      \"\\u02bbAu.\",\n      \"Kep.\",\n      \"\\u02bbOk.\",\n      \"Now.\",\n      \"Kek.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"haw\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_he-il.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u05dc\\u05e4\\u05e0\\u05d4\\u05f4\\u05e6\",\n      \"\\u05d0\\u05d7\\u05d4\\u05f4\\u05e6\"\n    ],\n    \"DAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d0\\u05e9\\u05d5\\u05df\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05dc\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d1\\u05d9\\u05e2\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d7\\u05de\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d1\\u05ea\"\n    ],\n    \"MONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05d0\\u05e8\",\n      \"\\u05e4\\u05d1\\u05e8\\u05d5\\u05d0\\u05e8\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e4\\u05d8\\u05de\\u05d1\\u05e8\",\n      \"\\u05d0\\u05d5\\u05e7\\u05d8\\u05d5\\u05d1\\u05e8\",\n      \"\\u05e0\\u05d5\\u05d1\\u05de\\u05d1\\u05e8\",\n      \"\\u05d3\\u05e6\\u05de\\u05d1\\u05e8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05d0\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d1\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d2\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d3\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d4\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d5\\u05f3\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05f3\",\n      \"\\u05e4\\u05d1\\u05e8\\u05f3\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05f3\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05f3\",\n      \"\\u05e1\\u05e4\\u05d8\\u05f3\",\n      \"\\u05d0\\u05d5\\u05e7\\u05f3\",\n      \"\\u05e0\\u05d5\\u05d1\\u05f3\",\n      \"\\u05d3\\u05e6\\u05de\\u05f3\"\n    ],\n    \"fullDate\": \"EEEE, d \\u05d1MMMM y\",\n    \"longDate\": \"d \\u05d1MMMM y\",\n    \"medium\": \"d \\u05d1MMM y HH:mm:ss\",\n    \"mediumDate\": \"d \\u05d1MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.y HH:mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20aa\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"he-il\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_he.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u05dc\\u05e4\\u05e0\\u05d4\\u05f4\\u05e6\",\n      \"\\u05d0\\u05d7\\u05d4\\u05f4\\u05e6\"\n    ],\n    \"DAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d0\\u05e9\\u05d5\\u05df\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05dc\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d1\\u05d9\\u05e2\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d7\\u05de\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d1\\u05ea\"\n    ],\n    \"MONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05d0\\u05e8\",\n      \"\\u05e4\\u05d1\\u05e8\\u05d5\\u05d0\\u05e8\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e4\\u05d8\\u05de\\u05d1\\u05e8\",\n      \"\\u05d0\\u05d5\\u05e7\\u05d8\\u05d5\\u05d1\\u05e8\",\n      \"\\u05e0\\u05d5\\u05d1\\u05de\\u05d1\\u05e8\",\n      \"\\u05d3\\u05e6\\u05de\\u05d1\\u05e8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05d0\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d1\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d2\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d3\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d4\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d5\\u05f3\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05f3\",\n      \"\\u05e4\\u05d1\\u05e8\\u05f3\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05f3\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05f3\",\n      \"\\u05e1\\u05e4\\u05d8\\u05f3\",\n      \"\\u05d0\\u05d5\\u05e7\\u05f3\",\n      \"\\u05e0\\u05d5\\u05d1\\u05f3\",\n      \"\\u05d3\\u05e6\\u05de\\u05f3\"\n    ],\n    \"fullDate\": \"EEEE, d \\u05d1MMMM y\",\n    \"longDate\": \"d \\u05d1MMMM y\",\n    \"medium\": \"d \\u05d1MMM y HH:mm:ss\",\n    \"mediumDate\": \"d \\u05d1MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.y HH:mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20aa\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"he\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hi-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0932\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932\",\n      \"\\u092e\\u0908\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u0924\",\n      \"\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u0924\\u0942\\u092c\\u0930\",\n      \"\\u0928\\u0935\\u0902\\u092c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u0928\\u0970\",\n      \"\\u092b\\u093c\\u0930\\u0970\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932\",\n      \"\\u092e\\u0908\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0970\",\n      \"\\u0905\\u0917\\u0970\",\n      \"\\u0938\\u093f\\u0924\\u0970\",\n      \"\\u0905\\u0915\\u094d\\u0924\\u0942\\u0970\",\n      \"\\u0928\\u0935\\u0970\",\n      \"\\u0926\\u093f\\u0938\\u0970\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd/MM/y h:mm:ss a\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"hi-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0932\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932\",\n      \"\\u092e\\u0908\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u0924\",\n      \"\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u0924\\u0942\\u092c\\u0930\",\n      \"\\u0928\\u0935\\u0902\\u092c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u0928\\u0970\",\n      \"\\u092b\\u093c\\u0930\\u0970\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932\",\n      \"\\u092e\\u0908\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0970\",\n      \"\\u0905\\u0917\\u0970\",\n      \"\\u0938\\u093f\\u0924\\u0970\",\n      \"\\u0905\\u0915\\u094d\\u0924\\u0942\\u0970\",\n      \"\\u0928\\u0935\\u0970\",\n      \"\\u0926\\u093f\\u0938\\u0970\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd/MM/y h:mm:ss a\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"hi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hr-ba.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"sije\\u010dnja\",\n      \"velja\\u010de\",\n      \"o\\u017eujka\",\n      \"travnja\",\n      \"svibnja\",\n      \"lipnja\",\n      \"srpnja\",\n      \"kolovoza\",\n      \"rujna\",\n      \"listopada\",\n      \"studenoga\",\n      \"prosinca\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"sij\",\n      \"velj\",\n      \"o\\u017eu\",\n      \"tra\",\n      \"svi\",\n      \"lip\",\n      \"srp\",\n      \"kol\",\n      \"ruj\",\n      \"lis\",\n      \"stu\",\n      \"pro\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y.\",\n    \"longDate\": \"d. MMMM y.\",\n    \"medium\": \"d. MMM y. HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y. HH:mm\",\n    \"shortDate\": \"dd.MM.y.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hr-ba\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hr-hr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"sije\\u010dnja\",\n      \"velja\\u010de\",\n      \"o\\u017eujka\",\n      \"travnja\",\n      \"svibnja\",\n      \"lipnja\",\n      \"srpnja\",\n      \"kolovoza\",\n      \"rujna\",\n      \"listopada\",\n      \"studenoga\",\n      \"prosinca\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"sij\",\n      \"velj\",\n      \"o\\u017eu\",\n      \"tra\",\n      \"svi\",\n      \"lip\",\n      \"srp\",\n      \"kol\",\n      \"ruj\",\n      \"lis\",\n      \"stu\",\n      \"pro\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y.\",\n    \"longDate\": \"d. MMMM y.\",\n    \"medium\": \"d. MMM y. HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y. HH:mm\",\n    \"shortDate\": \"dd.MM.y.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hr-hr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"nedjelja\",\n      \"ponedjeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"sije\\u010dnja\",\n      \"velja\\u010de\",\n      \"o\\u017eujka\",\n      \"travnja\",\n      \"svibnja\",\n      \"lipnja\",\n      \"srpnja\",\n      \"kolovoza\",\n      \"rujna\",\n      \"listopada\",\n      \"studenoga\",\n      \"prosinca\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"sij\",\n      \"velj\",\n      \"o\\u017eu\",\n      \"tra\",\n      \"svi\",\n      \"lip\",\n      \"srp\",\n      \"kol\",\n      \"ruj\",\n      \"lis\",\n      \"stu\",\n      \"pro\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y.\",\n    \"longDate\": \"d. MMMM y.\",\n    \"medium\": \"d. MMM y. HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y. HH:mm\",\n    \"shortDate\": \"dd.MM.y.\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hsb-de.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopo\\u0142dnja\",\n      \"popo\\u0142dnju\"\n    ],\n    \"DAY\": [\n      \"njed\\u017aela\",\n      \"p\\u00f3nd\\u017aela\",\n      \"wutora\",\n      \"srjeda\",\n      \"\\u0161tw\\u00f3rtk\",\n      \"pjatk\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januara\",\n      \"februara\",\n      \"m\\u011brca\",\n      \"apryla\",\n      \"meje\",\n      \"junija\",\n      \"julija\",\n      \"awgusta\",\n      \"septembra\",\n      \"oktobra\",\n      \"nowembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"nje\",\n      \"p\\u00f3n\",\n      \"wut\",\n      \"srj\",\n      \"\\u0161tw\",\n      \"pja\",\n      \"sob\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"m\\u011br.\",\n      \"apr.\",\n      \"mej.\",\n      \"jun.\",\n      \"jul.\",\n      \"awg.\",\n      \"sep.\",\n      \"okt.\",\n      \"now.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H:mm:ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.M.yy H:mm 'hod\\u017a'.\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"H:mm 'hod\\u017a'.\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hsb-de\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hsb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopo\\u0142dnja\",\n      \"popo\\u0142dnju\"\n    ],\n    \"DAY\": [\n      \"njed\\u017aela\",\n      \"p\\u00f3nd\\u017aela\",\n      \"wutora\",\n      \"srjeda\",\n      \"\\u0161tw\\u00f3rtk\",\n      \"pjatk\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januara\",\n      \"februara\",\n      \"m\\u011brca\",\n      \"apryla\",\n      \"meje\",\n      \"junija\",\n      \"julija\",\n      \"awgusta\",\n      \"septembra\",\n      \"oktobra\",\n      \"nowembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"nje\",\n      \"p\\u00f3n\",\n      \"wut\",\n      \"srj\",\n      \"\\u0161tw\",\n      \"pja\",\n      \"sob\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"m\\u011br.\",\n      \"apr.\",\n      \"mej.\",\n      \"jun.\",\n      \"jul.\",\n      \"awg.\",\n      \"sep.\",\n      \"okt.\",\n      \"now.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d.M.y H:mm:ss\",\n    \"mediumDate\": \"d.M.y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d.M.yy H:mm 'hod\\u017a'.\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"H:mm 'hod\\u017a'.\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hsb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hu-hu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"de.\",\n      \"du.\"\n    ],\n    \"DAY\": [\n      \"vas\\u00e1rnap\",\n      \"h\\u00e9tf\\u0151\",\n      \"kedd\",\n      \"szerda\",\n      \"cs\\u00fct\\u00f6rt\\u00f6k\",\n      \"p\\u00e9ntek\",\n      \"szombat\"\n    ],\n    \"MONTH\": [\n      \"janu\\u00e1r\",\n      \"febru\\u00e1r\",\n      \"m\\u00e1rcius\",\n      \"\\u00e1prilis\",\n      \"m\\u00e1jus\",\n      \"j\\u00fanius\",\n      \"j\\u00falius\",\n      \"augusztus\",\n      \"szeptember\",\n      \"okt\\u00f3ber\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"V\",\n      \"H\",\n      \"K\",\n      \"Sze\",\n      \"Cs\",\n      \"P\",\n      \"Szo\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"febr.\",\n      \"m\\u00e1rc.\",\n      \"\\u00e1pr.\",\n      \"m\\u00e1j.\",\n      \"j\\u00fan.\",\n      \"j\\u00fal.\",\n      \"aug.\",\n      \"szept.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"y. MMMM d., EEEE\",\n    \"longDate\": \"y. MMMM d.\",\n    \"medium\": \"y. MMM d. H:mm:ss\",\n    \"mediumDate\": \"y. MMM d.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y. MM. dd. H:mm\",\n    \"shortDate\": \"y. MM. dd.\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ft\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hu-hu\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"de.\",\n      \"du.\"\n    ],\n    \"DAY\": [\n      \"vas\\u00e1rnap\",\n      \"h\\u00e9tf\\u0151\",\n      \"kedd\",\n      \"szerda\",\n      \"cs\\u00fct\\u00f6rt\\u00f6k\",\n      \"p\\u00e9ntek\",\n      \"szombat\"\n    ],\n    \"MONTH\": [\n      \"janu\\u00e1r\",\n      \"febru\\u00e1r\",\n      \"m\\u00e1rcius\",\n      \"\\u00e1prilis\",\n      \"m\\u00e1jus\",\n      \"j\\u00fanius\",\n      \"j\\u00falius\",\n      \"augusztus\",\n      \"szeptember\",\n      \"okt\\u00f3ber\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"V\",\n      \"H\",\n      \"K\",\n      \"Sze\",\n      \"Cs\",\n      \"P\",\n      \"Szo\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"febr.\",\n      \"m\\u00e1rc.\",\n      \"\\u00e1pr.\",\n      \"m\\u00e1j.\",\n      \"j\\u00fan.\",\n      \"j\\u00fal.\",\n      \"aug.\",\n      \"szept.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"y. MMMM d., EEEE\",\n    \"longDate\": \"y. MMMM d.\",\n    \"medium\": \"y. MMM d. H:mm:ss\",\n    \"mediumDate\": \"y. MMM d.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y. MM. dd. H:mm\",\n    \"shortDate\": \"y. MM. dd.\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ft\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hu\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hy-am.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u056f\\u0565\\u057d\\u0585\\u0580\\u056b\\u0581 \\u0561\\u057c\\u0561\\u057b\",\n      \"\\u056f\\u0565\\u057d\\u0585\\u0580\\u056b\\u0581 \\u0570\\u0565\\u057f\\u0578\"\n    ],\n    \"DAY\": [\n      \"\\u056f\\u056b\\u0580\\u0561\\u056f\\u056b\",\n      \"\\u0565\\u0580\\u056f\\u0578\\u0582\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0565\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0579\\u0578\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0570\\u056b\\u0576\\u0563\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0578\\u0582\\u0580\\u0562\\u0561\\u0569\",\n      \"\\u0577\\u0561\\u0562\\u0561\\u0569\"\n    ],\n    \"MONTH\": [\n      \"\\u0570\\u0578\\u0582\\u0576\\u057e\\u0561\\u0580\\u056b\",\n      \"\\u0583\\u0565\\u057f\\u0580\\u057e\\u0561\\u0580\\u056b\",\n      \"\\u0574\\u0561\\u0580\\u057f\\u056b\",\n      \"\\u0561\\u057a\\u0580\\u056b\\u056c\\u056b\",\n      \"\\u0574\\u0561\\u0575\\u056b\\u057d\\u056b\",\n      \"\\u0570\\u0578\\u0582\\u0576\\u056b\\u057d\\u056b\",\n      \"\\u0570\\u0578\\u0582\\u056c\\u056b\\u057d\\u056b\",\n      \"\\u0585\\u0563\\u0578\\u057d\\u057f\\u0578\\u057d\\u056b\",\n      \"\\u057d\\u0565\\u057a\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0570\\u0578\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0576\\u0578\\u0575\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0564\\u0565\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u056f\\u056b\\u0580\",\n      \"\\u0565\\u0580\\u056f\",\n      \"\\u0565\\u0580\\u0584\",\n      \"\\u0579\\u0580\\u0584\",\n      \"\\u0570\\u0576\\u0563\",\n      \"\\u0578\\u0582\\u0580\",\n      \"\\u0577\\u0562\\u0569\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0570\\u0576\\u057e\",\n      \"\\u0583\\u057f\\u057e\",\n      \"\\u0574\\u0580\\u057f\",\n      \"\\u0561\\u057a\\u0580\",\n      \"\\u0574\\u0575\\u057d\",\n      \"\\u0570\\u0576\\u057d\",\n      \"\\u0570\\u056c\\u057d\",\n      \"\\u0585\\u0563\\u057d\",\n      \"\\u057d\\u0565\\u057a\",\n      \"\\u0570\\u0578\\u056f\",\n      \"\\u0576\\u0578\\u0575\",\n      \"\\u0564\\u0565\\u056f\"\n    ],\n    \"fullDate\": \"y\\u0569. MMMM d, EEEE\",\n    \"longDate\": \"dd MMMM, y\\u0569.\",\n    \"medium\": \"dd MMM, y\\u0569. H:mm:ss\",\n    \"mediumDate\": \"dd MMM, y\\u0569.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Dram\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hy-am\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_hy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u056f\\u0565\\u057d\\u0585\\u0580\\u056b\\u0581 \\u0561\\u057c\\u0561\\u057b\",\n      \"\\u056f\\u0565\\u057d\\u0585\\u0580\\u056b\\u0581 \\u0570\\u0565\\u057f\\u0578\"\n    ],\n    \"DAY\": [\n      \"\\u056f\\u056b\\u0580\\u0561\\u056f\\u056b\",\n      \"\\u0565\\u0580\\u056f\\u0578\\u0582\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0565\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0579\\u0578\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0570\\u056b\\u0576\\u0563\\u0577\\u0561\\u0562\\u0569\\u056b\",\n      \"\\u0578\\u0582\\u0580\\u0562\\u0561\\u0569\",\n      \"\\u0577\\u0561\\u0562\\u0561\\u0569\"\n    ],\n    \"MONTH\": [\n      \"\\u0570\\u0578\\u0582\\u0576\\u057e\\u0561\\u0580\\u056b\",\n      \"\\u0583\\u0565\\u057f\\u0580\\u057e\\u0561\\u0580\\u056b\",\n      \"\\u0574\\u0561\\u0580\\u057f\\u056b\",\n      \"\\u0561\\u057a\\u0580\\u056b\\u056c\\u056b\",\n      \"\\u0574\\u0561\\u0575\\u056b\\u057d\\u056b\",\n      \"\\u0570\\u0578\\u0582\\u0576\\u056b\\u057d\\u056b\",\n      \"\\u0570\\u0578\\u0582\\u056c\\u056b\\u057d\\u056b\",\n      \"\\u0585\\u0563\\u0578\\u057d\\u057f\\u0578\\u057d\\u056b\",\n      \"\\u057d\\u0565\\u057a\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0570\\u0578\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0576\\u0578\\u0575\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\",\n      \"\\u0564\\u0565\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u056f\\u056b\\u0580\",\n      \"\\u0565\\u0580\\u056f\",\n      \"\\u0565\\u0580\\u0584\",\n      \"\\u0579\\u0580\\u0584\",\n      \"\\u0570\\u0576\\u0563\",\n      \"\\u0578\\u0582\\u0580\",\n      \"\\u0577\\u0562\\u0569\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0570\\u0576\\u057e\",\n      \"\\u0583\\u057f\\u057e\",\n      \"\\u0574\\u0580\\u057f\",\n      \"\\u0561\\u057a\\u0580\",\n      \"\\u0574\\u0575\\u057d\",\n      \"\\u0570\\u0576\\u057d\",\n      \"\\u0570\\u056c\\u057d\",\n      \"\\u0585\\u0563\\u057d\",\n      \"\\u057d\\u0565\\u057a\",\n      \"\\u0570\\u0578\\u056f\",\n      \"\\u0576\\u0578\\u0575\",\n      \"\\u0564\\u0565\\u056f\"\n    ],\n    \"fullDate\": \"y\\u0569. MMMM d, EEEE\",\n    \"longDate\": \"dd MMMM, y\\u0569.\",\n    \"medium\": \"dd MMM, y\\u0569. H:mm:ss\",\n    \"mediumDate\": \"dd MMM, y\\u0569.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Dram\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"hy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ia-fr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"dominica\",\n      \"lunedi\",\n      \"martedi\",\n      \"mercuridi\",\n      \"jovedi\",\n      \"venerdi\",\n      \"sabbato\"\n    ],\n    \"MONTH\": [\n      \"januario\",\n      \"februario\",\n      \"martio\",\n      \"april\",\n      \"maio\",\n      \"junio\",\n      \"julio\",\n      \"augusto\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"decembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"jov\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"oct\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ia-fr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ia.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"dominica\",\n      \"lunedi\",\n      \"martedi\",\n      \"mercuridi\",\n      \"jovedi\",\n      \"venerdi\",\n      \"sabbato\"\n    ],\n    \"MONTH\": [\n      \"januario\",\n      \"februario\",\n      \"martio\",\n      \"april\",\n      \"maio\",\n      \"junio\",\n      \"julio\",\n      \"augusto\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"decembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"jov\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"oct\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ia\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_id-id.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Minggu\",\n      \"Senin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Kamis\",\n      \"Jumat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Maret\",\n      \"April\",\n      \"Mei\",\n      \"Juni\",\n      \"Juli\",\n      \"Agustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"Min\",\n      \"Sen\",\n      \"Sel\",\n      \"Rab\",\n      \"Kam\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Agt\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH.mm.ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rp\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"id-id\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_id.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Minggu\",\n      \"Senin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Kamis\",\n      \"Jumat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Maret\",\n      \"April\",\n      \"Mei\",\n      \"Juni\",\n      \"Juli\",\n      \"Agustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"Min\",\n      \"Sen\",\n      \"Sel\",\n      \"Rab\",\n      \"Kam\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Agt\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH.mm.ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rp\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"id\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ig-ng.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"A.M.\",\n      \"P.M.\"\n    ],\n    \"DAY\": [\n      \"Mb\\u1ecds\\u1ecb \\u1ee4ka\",\n      \"M\\u1ecdnde\",\n      \"Tiuzdee\",\n      \"Wenezdee\",\n      \"T\\u1ecd\\u1ecdzdee\",\n      \"Fra\\u1ecbdee\",\n      \"Sat\\u1ecddee\"\n    ],\n    \"MONTH\": [\n      \"Jen\\u1ee5war\\u1ecb\",\n      \"Febr\\u1ee5war\\u1ecb\",\n      \"Maach\\u1ecb\",\n      \"Eprel\",\n      \"Mee\",\n      \"Juun\",\n      \"Jula\\u1ecb\",\n      \"\\u1eccg\\u1ecd\\u1ecdst\",\n      \"Septemba\",\n      \"\\u1eccktoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1ee4ka\",\n      \"M\\u1ecdn\",\n      \"Tiu\",\n      \"Wen\",\n      \"T\\u1ecd\\u1ecd\",\n      \"Fra\\u1ecb\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jen\",\n      \"Feb\",\n      \"Maa\",\n      \"Epr\",\n      \"Mee\",\n      \"Juu\",\n      \"Jul\",\n      \"\\u1eccg\\u1ecd\",\n      \"Sep\",\n      \"\\u1ecckt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ig-ng\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ig.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"A.M.\",\n      \"P.M.\"\n    ],\n    \"DAY\": [\n      \"Mb\\u1ecds\\u1ecb \\u1ee4ka\",\n      \"M\\u1ecdnde\",\n      \"Tiuzdee\",\n      \"Wenezdee\",\n      \"T\\u1ecd\\u1ecdzdee\",\n      \"Fra\\u1ecbdee\",\n      \"Sat\\u1ecddee\"\n    ],\n    \"MONTH\": [\n      \"Jen\\u1ee5war\\u1ecb\",\n      \"Febr\\u1ee5war\\u1ecb\",\n      \"Maach\\u1ecb\",\n      \"Eprel\",\n      \"Mee\",\n      \"Juun\",\n      \"Jula\\u1ecb\",\n      \"\\u1eccg\\u1ecd\\u1ecdst\",\n      \"Septemba\",\n      \"\\u1eccktoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1ee4ka\",\n      \"M\\u1ecdn\",\n      \"Tiu\",\n      \"Wen\",\n      \"T\\u1ecd\\u1ecd\",\n      \"Fra\\u1ecb\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jen\",\n      \"Feb\",\n      \"Maa\",\n      \"Epr\",\n      \"Mee\",\n      \"Juu\",\n      \"Jul\",\n      \"\\u1eccg\\u1ecd\",\n      \"Sep\",\n      \"\\u1ecckt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ig\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ii-cn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\ua3b8\\ua111\",\n      \"\\ua06f\\ua2d2\"\n    ],\n    \"DAY\": [\n      \"\\ua46d\\ua18f\\ua44d\",\n      \"\\ua18f\\ua282\\ua2cd\",\n      \"\\ua18f\\ua282\\ua44d\",\n      \"\\ua18f\\ua282\\ua315\",\n      \"\\ua18f\\ua282\\ua1d6\",\n      \"\\ua18f\\ua282\\ua26c\",\n      \"\\ua18f\\ua282\\ua0d8\"\n    ],\n    \"MONTH\": [\n      \"\\ua2cd\\ua1aa\",\n      \"\\ua44d\\ua1aa\",\n      \"\\ua315\\ua1aa\",\n      \"\\ua1d6\\ua1aa\",\n      \"\\ua26c\\ua1aa\",\n      \"\\ua0d8\\ua1aa\",\n      \"\\ua3c3\\ua1aa\",\n      \"\\ua246\\ua1aa\",\n      \"\\ua22c\\ua1aa\",\n      \"\\ua2b0\\ua1aa\",\n      \"\\ua2b0\\ua2aa\\ua1aa\",\n      \"\\ua2b0\\ua44b\\ua1aa\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ua46d\\ua18f\",\n      \"\\ua18f\\ua2cd\",\n      \"\\ua18f\\ua44d\",\n      \"\\ua18f\\ua315\",\n      \"\\ua18f\\ua1d6\",\n      \"\\ua18f\\ua26c\",\n      \"\\ua18f\\ua0d8\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\",\n      \"2\",\n      \"3\",\n      \"4\",\n      \"5\",\n      \"6\",\n      \"7\",\n      \"8\",\n      \"9\",\n      \"10\",\n      \"11\",\n      \"12\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ii-cn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ii.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\ua3b8\\ua111\",\n      \"\\ua06f\\ua2d2\"\n    ],\n    \"DAY\": [\n      \"\\ua46d\\ua18f\\ua44d\",\n      \"\\ua18f\\ua282\\ua2cd\",\n      \"\\ua18f\\ua282\\ua44d\",\n      \"\\ua18f\\ua282\\ua315\",\n      \"\\ua18f\\ua282\\ua1d6\",\n      \"\\ua18f\\ua282\\ua26c\",\n      \"\\ua18f\\ua282\\ua0d8\"\n    ],\n    \"MONTH\": [\n      \"\\ua2cd\\ua1aa\",\n      \"\\ua44d\\ua1aa\",\n      \"\\ua315\\ua1aa\",\n      \"\\ua1d6\\ua1aa\",\n      \"\\ua26c\\ua1aa\",\n      \"\\ua0d8\\ua1aa\",\n      \"\\ua3c3\\ua1aa\",\n      \"\\ua246\\ua1aa\",\n      \"\\ua22c\\ua1aa\",\n      \"\\ua2b0\\ua1aa\",\n      \"\\ua2b0\\ua2aa\\ua1aa\",\n      \"\\ua2b0\\ua44b\\ua1aa\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ua46d\\ua18f\",\n      \"\\ua18f\\ua2cd\",\n      \"\\ua18f\\ua44d\",\n      \"\\ua18f\\ua315\",\n      \"\\ua18f\\ua1d6\",\n      \"\\ua18f\\ua26c\",\n      \"\\ua18f\\ua0d8\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\",\n      \"2\",\n      \"3\",\n      \"4\",\n      \"5\",\n      \"6\",\n      \"7\",\n      \"8\",\n      \"9\",\n      \"10\",\n      \"11\",\n      \"12\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ii\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Minggu\",\n      \"Senin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Kamis\",\n      \"Jumat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Maret\",\n      \"April\",\n      \"Mei\",\n      \"Juni\",\n      \"Juli\",\n      \"Agustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"SHORTDAY\": [\n      \"Min\",\n      \"Sen\",\n      \"Sel\",\n      \"Rab\",\n      \"Kam\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Agt\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH.mm.ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd/MM/yy HH.mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rp\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"in\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_is-is.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\nfunction getWT(v, f) {\n  if (f === 0) {\n    return {w: 0, t: 0};\n  }\n\n  while ((f % 10) === 0) {\n    f /= 10;\n    v--;\n  }\n\n  return {w: v, t: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"f.h.\",\n      \"e.h.\"\n    ],\n    \"DAY\": [\n      \"sunnudagur\",\n      \"m\\u00e1nudagur\",\n      \"\\u00feri\\u00f0judagur\",\n      \"mi\\u00f0vikudagur\",\n      \"fimmtudagur\",\n      \"f\\u00f6studagur\",\n      \"laugardagur\"\n    ],\n    \"MONTH\": [\n      \"jan\\u00faar\",\n      \"febr\\u00faar\",\n      \"mars\",\n      \"apr\\u00edl\",\n      \"ma\\u00ed\",\n      \"j\\u00fan\\u00ed\",\n      \"j\\u00fal\\u00ed\",\n      \"\\u00e1g\\u00fast\",\n      \"september\",\n      \"okt\\u00f3ber\",\n      \"n\\u00f3vember\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"sun.\",\n      \"m\\u00e1n.\",\n      \"\\u00feri.\",\n      \"mi\\u00f0.\",\n      \"fim.\",\n      \"f\\u00f6s.\",\n      \"lau.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"ma\\u00ed\",\n      \"j\\u00fan.\",\n      \"j\\u00fal.\",\n      \"\\u00e1g\\u00fa.\",\n      \"sep.\",\n      \"okt.\",\n      \"n\\u00f3v.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.y HH:mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"is-is\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_is.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\nfunction getWT(v, f) {\n  if (f === 0) {\n    return {w: 0, t: 0};\n  }\n\n  while ((f % 10) === 0) {\n    f /= 10;\n    v--;\n  }\n\n  return {w: v, t: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"f.h.\",\n      \"e.h.\"\n    ],\n    \"DAY\": [\n      \"sunnudagur\",\n      \"m\\u00e1nudagur\",\n      \"\\u00feri\\u00f0judagur\",\n      \"mi\\u00f0vikudagur\",\n      \"fimmtudagur\",\n      \"f\\u00f6studagur\",\n      \"laugardagur\"\n    ],\n    \"MONTH\": [\n      \"jan\\u00faar\",\n      \"febr\\u00faar\",\n      \"mars\",\n      \"apr\\u00edl\",\n      \"ma\\u00ed\",\n      \"j\\u00fan\\u00ed\",\n      \"j\\u00fal\\u00ed\",\n      \"\\u00e1g\\u00fast\",\n      \"september\",\n      \"okt\\u00f3ber\",\n      \"n\\u00f3vember\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"sun.\",\n      \"m\\u00e1n.\",\n      \"\\u00feri.\",\n      \"mi\\u00f0.\",\n      \"fim.\",\n      \"f\\u00f6s.\",\n      \"lau.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"ma\\u00ed\",\n      \"j\\u00fan.\",\n      \"j\\u00fal.\",\n      \"\\u00e1g\\u00fa.\",\n      \"sep.\",\n      \"okt.\",\n      \"n\\u00f3v.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.y HH:mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"is\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_it-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domenica\",\n      \"luned\\u00ec\",\n      \"marted\\u00ec\",\n      \"mercoled\\u00ec\",\n      \"gioved\\u00ec\",\n      \"venerd\\u00ec\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"gennaio\",\n      \"febbraio\",\n      \"marzo\",\n      \"aprile\",\n      \"maggio\",\n      \"giugno\",\n      \"luglio\",\n      \"agosto\",\n      \"settembre\",\n      \"ottobre\",\n      \"novembre\",\n      \"dicembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"gio\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mag\",\n      \"giu\",\n      \"lug\",\n      \"ago\",\n      \"set\",\n      \"ott\",\n      \"nov\",\n      \"dic\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d-MMM-y HH:mm:ss\",\n    \"mediumDate\": \"d-MMM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"'\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"it-ch\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_it-it.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domenica\",\n      \"luned\\u00ec\",\n      \"marted\\u00ec\",\n      \"mercoled\\u00ec\",\n      \"gioved\\u00ec\",\n      \"venerd\\u00ec\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"gennaio\",\n      \"febbraio\",\n      \"marzo\",\n      \"aprile\",\n      \"maggio\",\n      \"giugno\",\n      \"luglio\",\n      \"agosto\",\n      \"settembre\",\n      \"ottobre\",\n      \"novembre\",\n      \"dicembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"gio\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mag\",\n      \"giu\",\n      \"lug\",\n      \"ago\",\n      \"set\",\n      \"ott\",\n      \"nov\",\n      \"dic\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"it-it\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_it-sm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domenica\",\n      \"luned\\u00ec\",\n      \"marted\\u00ec\",\n      \"mercoled\\u00ec\",\n      \"gioved\\u00ec\",\n      \"venerd\\u00ec\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"gennaio\",\n      \"febbraio\",\n      \"marzo\",\n      \"aprile\",\n      \"maggio\",\n      \"giugno\",\n      \"luglio\",\n      \"agosto\",\n      \"settembre\",\n      \"ottobre\",\n      \"novembre\",\n      \"dicembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"gio\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mag\",\n      \"giu\",\n      \"lug\",\n      \"ago\",\n      \"set\",\n      \"ott\",\n      \"nov\",\n      \"dic\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"it-sm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_it.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domenica\",\n      \"luned\\u00ec\",\n      \"marted\\u00ec\",\n      \"mercoled\\u00ec\",\n      \"gioved\\u00ec\",\n      \"venerd\\u00ec\",\n      \"sabato\"\n    ],\n    \"MONTH\": [\n      \"gennaio\",\n      \"febbraio\",\n      \"marzo\",\n      \"aprile\",\n      \"maggio\",\n      \"giugno\",\n      \"luglio\",\n      \"agosto\",\n      \"settembre\",\n      \"ottobre\",\n      \"novembre\",\n      \"dicembre\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"lun\",\n      \"mar\",\n      \"mer\",\n      \"gio\",\n      \"ven\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"gen\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"mag\",\n      \"giu\",\n      \"lug\",\n      \"ago\",\n      \"set\",\n      \"ott\",\n      \"nov\",\n      \"dic\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"it\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_iw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u05dc\\u05e4\\u05e0\\u05d4\\u05f4\\u05e6\",\n      \"\\u05d0\\u05d7\\u05d4\\u05f4\\u05e6\"\n    ],\n    \"DAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d0\\u05e9\\u05d5\\u05df\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05dc\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e8\\u05d1\\u05d9\\u05e2\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d7\\u05de\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d9\\u05e9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dd \\u05e9\\u05d1\\u05ea\"\n    ],\n    \"MONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05d0\\u05e8\",\n      \"\\u05e4\\u05d1\\u05e8\\u05d5\\u05d0\\u05e8\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e4\\u05d8\\u05de\\u05d1\\u05e8\",\n      \"\\u05d0\\u05d5\\u05e7\\u05d8\\u05d5\\u05d1\\u05e8\",\n      \"\\u05e0\\u05d5\\u05d1\\u05de\\u05d1\\u05e8\",\n      \"\\u05d3\\u05e6\\u05de\\u05d1\\u05e8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u05d9\\u05d5\\u05dd \\u05d0\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d1\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d2\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d3\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d4\\u05f3\",\n      \"\\u05d9\\u05d5\\u05dd \\u05d5\\u05f3\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u05d9\\u05e0\\u05d5\\u05f3\",\n      \"\\u05e4\\u05d1\\u05e8\\u05f3\",\n      \"\\u05de\\u05e8\\u05e5\",\n      \"\\u05d0\\u05e4\\u05e8\\u05f3\",\n      \"\\u05de\\u05d0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d2\\u05f3\",\n      \"\\u05e1\\u05e4\\u05d8\\u05f3\",\n      \"\\u05d0\\u05d5\\u05e7\\u05f3\",\n      \"\\u05e0\\u05d5\\u05d1\\u05f3\",\n      \"\\u05d3\\u05e6\\u05de\\u05f3\"\n    ],\n    \"fullDate\": \"EEEE, d \\u05d1MMMM y\",\n    \"longDate\": \"d \\u05d1MMMM y\",\n    \"medium\": \"d \\u05d1MMM y HH:mm:ss\",\n    \"mediumDate\": \"d \\u05d1MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.y HH:mm\",\n    \"shortDate\": \"d.M.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20aa\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"iw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ja-jp.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u5348\\u524d\",\n      \"\\u5348\\u5f8c\"\n    ],\n    \"DAY\": [\n      \"\\u65e5\\u66dc\\u65e5\",\n      \"\\u6708\\u66dc\\u65e5\",\n      \"\\u706b\\u66dc\\u65e5\",\n      \"\\u6c34\\u66dc\\u65e5\",\n      \"\\u6728\\u66dc\\u65e5\",\n      \"\\u91d1\\u66dc\\u65e5\",\n      \"\\u571f\\u66dc\\u65e5\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u65e5\",\n      \"\\u6708\",\n      \"\\u706b\",\n      \"\\u6c34\",\n      \"\\u6728\",\n      \"\\u91d1\",\n      \"\\u571f\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y/MM/dd H:mm:ss\",\n    \"mediumDate\": \"y/MM/dd\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/MM/dd H:mm\",\n    \"shortDate\": \"y/MM/dd\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ja-jp\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ja.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u5348\\u524d\",\n      \"\\u5348\\u5f8c\"\n    ],\n    \"DAY\": [\n      \"\\u65e5\\u66dc\\u65e5\",\n      \"\\u6708\\u66dc\\u65e5\",\n      \"\\u706b\\u66dc\\u65e5\",\n      \"\\u6c34\\u66dc\\u65e5\",\n      \"\\u6728\\u66dc\\u65e5\",\n      \"\\u91d1\\u66dc\\u65e5\",\n      \"\\u571f\\u66dc\\u65e5\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u65e5\",\n      \"\\u6708\",\n      \"\\u706b\",\n      \"\\u6c34\",\n      \"\\u6728\",\n      \"\\u91d1\",\n      \"\\u571f\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y/MM/dd H:mm:ss\",\n    \"mediumDate\": \"y/MM/dd\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/MM/dd H:mm\",\n    \"shortDate\": \"y/MM/dd\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ja\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_jgo-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"mba\\ua78cmba\\ua78c\",\n      \"\\u014bka mb\\u0254\\u0301t nji\"\n    ],\n    \"DAY\": [\n      \"S\\u0254\\u0301ndi\",\n      \"M\\u0254\\u0301ndi\",\n      \"\\u00c1pta M\\u0254\\u0301ndi\",\n      \"W\\u025b\\u0301n\\u025bs\\u025bd\\u025b\",\n      \"T\\u0254\\u0301s\\u025bd\\u025b\",\n      \"F\\u025bl\\u00e2y\\u025bd\\u025b\",\n      \"S\\u00e1sid\\u025b\"\n    ],\n    \"MONTH\": [\n      \"Ndu\\u014bmbi Sa\\u014b\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301p\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301t\\u00e1t\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301kwa\",\n      \"P\\u025bsa\\u014b Pataa\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301nt\\u00fak\\u00fa\",\n      \"P\\u025bsa\\u014b Saamb\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301f\\u0254m\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301pf\\u00fa\\ua78b\\u00fa\",\n      \"P\\u025bsa\\u014b N\\u025bg\\u025b\\u0301m\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpm\\u0254\\u0301\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpp\\u00e1\"\n    ],\n    \"SHORTDAY\": [\n      \"S\\u0254\\u0301ndi\",\n      \"M\\u0254\\u0301ndi\",\n      \"\\u00c1pta M\\u0254\\u0301ndi\",\n      \"W\\u025b\\u0301n\\u025bs\\u025bd\\u025b\",\n      \"T\\u0254\\u0301s\\u025bd\\u025b\",\n      \"F\\u025bl\\u00e2y\\u025bd\\u025b\",\n      \"S\\u00e1sid\\u025b\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ndu\\u014bmbi Sa\\u014b\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301p\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301t\\u00e1t\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301kwa\",\n      \"P\\u025bsa\\u014b Pataa\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301nt\\u00fak\\u00fa\",\n      \"P\\u025bsa\\u014b Saamb\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301f\\u0254m\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301pf\\u00fa\\ua78b\\u00fa\",\n      \"P\\u025bsa\\u014b N\\u025bg\\u025b\\u0301m\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpm\\u0254\\u0301\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpp\\u00e1\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"jgo-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_jgo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"mba\\ua78cmba\\ua78c\",\n      \"\\u014bka mb\\u0254\\u0301t nji\"\n    ],\n    \"DAY\": [\n      \"S\\u0254\\u0301ndi\",\n      \"M\\u0254\\u0301ndi\",\n      \"\\u00c1pta M\\u0254\\u0301ndi\",\n      \"W\\u025b\\u0301n\\u025bs\\u025bd\\u025b\",\n      \"T\\u0254\\u0301s\\u025bd\\u025b\",\n      \"F\\u025bl\\u00e2y\\u025bd\\u025b\",\n      \"S\\u00e1sid\\u025b\"\n    ],\n    \"MONTH\": [\n      \"Ndu\\u014bmbi Sa\\u014b\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301p\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301t\\u00e1t\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301kwa\",\n      \"P\\u025bsa\\u014b Pataa\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301nt\\u00fak\\u00fa\",\n      \"P\\u025bsa\\u014b Saamb\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301f\\u0254m\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301pf\\u00fa\\ua78b\\u00fa\",\n      \"P\\u025bsa\\u014b N\\u025bg\\u025b\\u0301m\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpm\\u0254\\u0301\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpp\\u00e1\"\n    ],\n    \"SHORTDAY\": [\n      \"S\\u0254\\u0301ndi\",\n      \"M\\u0254\\u0301ndi\",\n      \"\\u00c1pta M\\u0254\\u0301ndi\",\n      \"W\\u025b\\u0301n\\u025bs\\u025bd\\u025b\",\n      \"T\\u0254\\u0301s\\u025bd\\u025b\",\n      \"F\\u025bl\\u00e2y\\u025bd\\u025b\",\n      \"S\\u00e1sid\\u025b\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ndu\\u014bmbi Sa\\u014b\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301p\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301t\\u00e1t\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301kwa\",\n      \"P\\u025bsa\\u014b Pataa\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301nt\\u00fak\\u00fa\",\n      \"P\\u025bsa\\u014b Saamb\\u00e1\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301f\\u0254m\",\n      \"P\\u025bsa\\u014b P\\u025b\\u0301n\\u025b\\u0301pf\\u00fa\\ua78b\\u00fa\",\n      \"P\\u025bsa\\u014b N\\u025bg\\u025b\\u0301m\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpm\\u0254\\u0301\",\n      \"P\\u025bsa\\u014b Nts\\u0254\\u030cpp\\u00e1\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"jgo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_jmc-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"jmc-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_jmc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"jmc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ka-ge.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u10d9\\u10d5\\u10d8\\u10e0\\u10d0\",\n      \"\\u10dd\\u10e0\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10e1\\u10d0\\u10db\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10dd\\u10d7\\u10ee\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10ee\\u10e3\\u10d7\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10de\\u10d0\\u10e0\\u10d0\\u10e1\\u10d9\\u10d4\\u10d5\\u10d8\",\n      \"\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\"\n    ],\n    \"MONTH\": [\n      \"\\u10d8\\u10d0\\u10dc\\u10d5\\u10d0\\u10e0\\u10d8\",\n      \"\\u10d7\\u10d4\\u10d1\\u10d4\\u10e0\\u10d5\\u10d0\\u10da\\u10d8\",\n      \"\\u10db\\u10d0\\u10e0\\u10e2\\u10d8\",\n      \"\\u10d0\\u10de\\u10e0\\u10d8\\u10da\\u10d8\",\n      \"\\u10db\\u10d0\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d8\\u10d5\\u10dc\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d8\\u10d5\\u10da\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d0\\u10d2\\u10d5\\u10d8\\u10e1\\u10e2\\u10dd\",\n      \"\\u10e1\\u10d4\\u10e5\\u10e2\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10dd\\u10e5\\u10e2\\u10dd\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10dc\\u10dd\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10d3\\u10d4\\u10d9\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u10d9\\u10d5\\u10d8\",\n      \"\\u10dd\\u10e0\\u10e8\",\n      \"\\u10e1\\u10d0\\u10db\",\n      \"\\u10dd\\u10d7\\u10ee\",\n      \"\\u10ee\\u10e3\\u10d7\",\n      \"\\u10de\\u10d0\\u10e0\",\n      \"\\u10e8\\u10d0\\u10d1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u10d8\\u10d0\\u10dc\",\n      \"\\u10d7\\u10d4\\u10d1\",\n      \"\\u10db\\u10d0\\u10e0\",\n      \"\\u10d0\\u10de\\u10e0\",\n      \"\\u10db\\u10d0\\u10d8\",\n      \"\\u10d8\\u10d5\\u10dc\",\n      \"\\u10d8\\u10d5\\u10da\",\n      \"\\u10d0\\u10d2\\u10d5\",\n      \"\\u10e1\\u10d4\\u10e5\",\n      \"\\u10dd\\u10e5\\u10e2\",\n      \"\\u10dc\\u10dd\\u10d4\",\n      \"\\u10d3\\u10d4\\u10d9\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GEL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ka-ge\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ka.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u10d9\\u10d5\\u10d8\\u10e0\\u10d0\",\n      \"\\u10dd\\u10e0\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10e1\\u10d0\\u10db\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10dd\\u10d7\\u10ee\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10ee\\u10e3\\u10d7\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\",\n      \"\\u10de\\u10d0\\u10e0\\u10d0\\u10e1\\u10d9\\u10d4\\u10d5\\u10d8\",\n      \"\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\"\n    ],\n    \"MONTH\": [\n      \"\\u10d8\\u10d0\\u10dc\\u10d5\\u10d0\\u10e0\\u10d8\",\n      \"\\u10d7\\u10d4\\u10d1\\u10d4\\u10e0\\u10d5\\u10d0\\u10da\\u10d8\",\n      \"\\u10db\\u10d0\\u10e0\\u10e2\\u10d8\",\n      \"\\u10d0\\u10de\\u10e0\\u10d8\\u10da\\u10d8\",\n      \"\\u10db\\u10d0\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d8\\u10d5\\u10dc\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d8\\u10d5\\u10da\\u10d8\\u10e1\\u10d8\",\n      \"\\u10d0\\u10d2\\u10d5\\u10d8\\u10e1\\u10e2\\u10dd\",\n      \"\\u10e1\\u10d4\\u10e5\\u10e2\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10dd\\u10e5\\u10e2\\u10dd\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10dc\\u10dd\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\",\n      \"\\u10d3\\u10d4\\u10d9\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u10d9\\u10d5\\u10d8\",\n      \"\\u10dd\\u10e0\\u10e8\",\n      \"\\u10e1\\u10d0\\u10db\",\n      \"\\u10dd\\u10d7\\u10ee\",\n      \"\\u10ee\\u10e3\\u10d7\",\n      \"\\u10de\\u10d0\\u10e0\",\n      \"\\u10e8\\u10d0\\u10d1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u10d8\\u10d0\\u10dc\",\n      \"\\u10d7\\u10d4\\u10d1\",\n      \"\\u10db\\u10d0\\u10e0\",\n      \"\\u10d0\\u10de\\u10e0\",\n      \"\\u10db\\u10d0\\u10d8\",\n      \"\\u10d8\\u10d5\\u10dc\",\n      \"\\u10d8\\u10d5\\u10da\",\n      \"\\u10d0\\u10d2\\u10d5\",\n      \"\\u10e1\\u10d4\\u10e5\",\n      \"\\u10dd\\u10e5\\u10e2\",\n      \"\\u10dc\\u10dd\\u10d4\",\n      \"\\u10d3\\u10d4\\u10d9\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GEL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ka\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kab-dz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"n tufat\",\n      \"n tmeddit\"\n    ],\n    \"DAY\": [\n      \"Yanass\",\n      \"Sanass\",\n      \"Kra\\u1e0dass\",\n      \"Ku\\u1e93ass\",\n      \"Samass\",\n      \"S\\u1e0disass\",\n      \"Sayass\"\n    ],\n    \"MONTH\": [\n      \"Yennayer\",\n      \"Fu\\u1e5bar\",\n      \"Me\\u0263res\",\n      \"Yebrir\",\n      \"Mayyu\",\n      \"Yunyu\",\n      \"Yulyu\",\n      \"\\u0194uct\",\n      \"Ctembe\\u1e5b\",\n      \"Tube\\u1e5b\",\n      \"Nunembe\\u1e5b\",\n      \"Du\\u01e7embe\\u1e5b\"\n    ],\n    \"SHORTDAY\": [\n      \"Yan\",\n      \"San\",\n      \"Kra\\u1e0d\",\n      \"Ku\\u1e93\",\n      \"Sam\",\n      \"S\\u1e0dis\",\n      \"Say\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yen\",\n      \"Fur\",\n      \"Me\\u0263\",\n      \"Yeb\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"\\u0194uc\",\n      \"Cte\",\n      \"Tub\",\n      \"Nun\",\n      \"Du\\u01e7\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kab-dz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"n tufat\",\n      \"n tmeddit\"\n    ],\n    \"DAY\": [\n      \"Yanass\",\n      \"Sanass\",\n      \"Kra\\u1e0dass\",\n      \"Ku\\u1e93ass\",\n      \"Samass\",\n      \"S\\u1e0disass\",\n      \"Sayass\"\n    ],\n    \"MONTH\": [\n      \"Yennayer\",\n      \"Fu\\u1e5bar\",\n      \"Me\\u0263res\",\n      \"Yebrir\",\n      \"Mayyu\",\n      \"Yunyu\",\n      \"Yulyu\",\n      \"\\u0194uct\",\n      \"Ctembe\\u1e5b\",\n      \"Tube\\u1e5b\",\n      \"Nunembe\\u1e5b\",\n      \"Du\\u01e7embe\\u1e5b\"\n    ],\n    \"SHORTDAY\": [\n      \"Yan\",\n      \"San\",\n      \"Kra\\u1e0d\",\n      \"Ku\\u1e93\",\n      \"Sam\",\n      \"S\\u1e0dis\",\n      \"Say\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yen\",\n      \"Fur\",\n      \"Me\\u0263\",\n      \"Yeb\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"\\u0194uc\",\n      \"Cte\",\n      \"Tub\",\n      \"Nun\",\n      \"Du\\u01e7\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kab\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kam-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0128yakwakya\",\n      \"\\u0128yaw\\u0129oo\"\n    ],\n    \"DAY\": [\n      \"Wa kyumwa\",\n      \"Wa kwamb\\u0129l\\u0129lya\",\n      \"Wa kel\\u0129\",\n      \"Wa katat\\u0169\",\n      \"Wa kana\",\n      \"Wa katano\",\n      \"Wa thanthat\\u0169\"\n    ],\n    \"MONTH\": [\n      \"Mwai wa mbee\",\n      \"Mwai wa kel\\u0129\",\n      \"Mwai wa katat\\u0169\",\n      \"Mwai wa kana\",\n      \"Mwai wa katano\",\n      \"Mwai wa thanthat\\u0169\",\n      \"Mwai wa muonza\",\n      \"Mwai wa nyaanya\",\n      \"Mwai wa kenda\",\n      \"Mwai wa \\u0129kumi\",\n      \"Mwai wa \\u0129kumi na \\u0129mwe\",\n      \"Mwai wa \\u0129kumi na il\\u0129\"\n    ],\n    \"SHORTDAY\": [\n      \"Wky\",\n      \"Wkw\",\n      \"Wkl\",\n      \"Wt\\u0169\",\n      \"Wkn\",\n      \"Wtn\",\n      \"Wth\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mbe\",\n      \"Kel\",\n      \"Kt\\u0169\",\n      \"Kan\",\n      \"Ktn\",\n      \"Tha\",\n      \"Moo\",\n      \"Nya\",\n      \"Knd\",\n      \"\\u0128ku\",\n      \"\\u0128km\",\n      \"\\u0128kl\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kam-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kam.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0128yakwakya\",\n      \"\\u0128yaw\\u0129oo\"\n    ],\n    \"DAY\": [\n      \"Wa kyumwa\",\n      \"Wa kwamb\\u0129l\\u0129lya\",\n      \"Wa kel\\u0129\",\n      \"Wa katat\\u0169\",\n      \"Wa kana\",\n      \"Wa katano\",\n      \"Wa thanthat\\u0169\"\n    ],\n    \"MONTH\": [\n      \"Mwai wa mbee\",\n      \"Mwai wa kel\\u0129\",\n      \"Mwai wa katat\\u0169\",\n      \"Mwai wa kana\",\n      \"Mwai wa katano\",\n      \"Mwai wa thanthat\\u0169\",\n      \"Mwai wa muonza\",\n      \"Mwai wa nyaanya\",\n      \"Mwai wa kenda\",\n      \"Mwai wa \\u0129kumi\",\n      \"Mwai wa \\u0129kumi na \\u0129mwe\",\n      \"Mwai wa \\u0129kumi na il\\u0129\"\n    ],\n    \"SHORTDAY\": [\n      \"Wky\",\n      \"Wkw\",\n      \"Wkl\",\n      \"Wt\\u0169\",\n      \"Wkn\",\n      \"Wtn\",\n      \"Wth\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mbe\",\n      \"Kel\",\n      \"Kt\\u0169\",\n      \"Kan\",\n      \"Ktn\",\n      \"Tha\",\n      \"Moo\",\n      \"Nya\",\n      \"Knd\",\n      \"\\u0128ku\",\n      \"\\u0128km\",\n      \"\\u0128kl\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kam\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kde-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Muhi\",\n      \"Chilo\"\n    ],\n    \"DAY\": [\n      \"Liduva lyapili\",\n      \"Liduva lyatatu\",\n      \"Liduva lyanchechi\",\n      \"Liduva lyannyano\",\n      \"Liduva lyannyano na linji\",\n      \"Liduva lyannyano na mavili\",\n      \"Liduva litandi\"\n    ],\n    \"MONTH\": [\n      \"Mwedi Ntandi\",\n      \"Mwedi wa Pili\",\n      \"Mwedi wa Tatu\",\n      \"Mwedi wa Nchechi\",\n      \"Mwedi wa Nnyano\",\n      \"Mwedi wa Nnyano na Umo\",\n      \"Mwedi wa Nnyano na Mivili\",\n      \"Mwedi wa Nnyano na Mitatu\",\n      \"Mwedi wa Nnyano na Nchechi\",\n      \"Mwedi wa Nnyano na Nnyano\",\n      \"Mwedi wa Nnyano na Nnyano na U\",\n      \"Mwedi wa Nnyano na Nnyano na M\"\n    ],\n    \"SHORTDAY\": [\n      \"Ll2\",\n      \"Ll3\",\n      \"Ll4\",\n      \"Ll5\",\n      \"Ll6\",\n      \"Ll7\",\n      \"Ll1\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kde-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kde.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Muhi\",\n      \"Chilo\"\n    ],\n    \"DAY\": [\n      \"Liduva lyapili\",\n      \"Liduva lyatatu\",\n      \"Liduva lyanchechi\",\n      \"Liduva lyannyano\",\n      \"Liduva lyannyano na linji\",\n      \"Liduva lyannyano na mavili\",\n      \"Liduva litandi\"\n    ],\n    \"MONTH\": [\n      \"Mwedi Ntandi\",\n      \"Mwedi wa Pili\",\n      \"Mwedi wa Tatu\",\n      \"Mwedi wa Nchechi\",\n      \"Mwedi wa Nnyano\",\n      \"Mwedi wa Nnyano na Umo\",\n      \"Mwedi wa Nnyano na Mivili\",\n      \"Mwedi wa Nnyano na Mitatu\",\n      \"Mwedi wa Nnyano na Nchechi\",\n      \"Mwedi wa Nnyano na Nnyano\",\n      \"Mwedi wa Nnyano na Nnyano na U\",\n      \"Mwedi wa Nnyano na Nnyano na M\"\n    ],\n    \"SHORTDAY\": [\n      \"Ll2\",\n      \"Ll3\",\n      \"Ll4\",\n      \"Ll5\",\n      \"Ll6\",\n      \"Ll7\",\n      \"Ll1\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kde\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kea-cv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"dumingu\",\n      \"sigunda-fera\",\n      \"tersa-fera\",\n      \"kuarta-fera\",\n      \"kinta-fera\",\n      \"sesta-fera\",\n      \"sabadu\"\n    ],\n    \"MONTH\": [\n      \"Janeru\",\n      \"Febreru\",\n      \"Marsu\",\n      \"Abril\",\n      \"Maiu\",\n      \"Junhu\",\n      \"Julhu\",\n      \"Agostu\",\n      \"Setenbru\",\n      \"Otubru\",\n      \"Nuvenbru\",\n      \"Dizenbru\"\n    ],\n    \"SHORTDAY\": [\n      \"dum\",\n      \"sig\",\n      \"ter\",\n      \"kua\",\n      \"kin\",\n      \"ses\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Set\",\n      \"Otu\",\n      \"Nuv\",\n      \"Diz\"\n    ],\n    \"fullDate\": \"EEEE, d 'di' MMMM 'di' y\",\n    \"longDate\": \"d 'di' MMMM 'di' y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CVE\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kea-cv\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kea.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"dumingu\",\n      \"sigunda-fera\",\n      \"tersa-fera\",\n      \"kuarta-fera\",\n      \"kinta-fera\",\n      \"sesta-fera\",\n      \"sabadu\"\n    ],\n    \"MONTH\": [\n      \"Janeru\",\n      \"Febreru\",\n      \"Marsu\",\n      \"Abril\",\n      \"Maiu\",\n      \"Junhu\",\n      \"Julhu\",\n      \"Agostu\",\n      \"Setenbru\",\n      \"Otubru\",\n      \"Nuvenbru\",\n      \"Dizenbru\"\n    ],\n    \"SHORTDAY\": [\n      \"dum\",\n      \"sig\",\n      \"ter\",\n      \"kua\",\n      \"kin\",\n      \"ses\",\n      \"sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Set\",\n      \"Otu\",\n      \"Nuv\",\n      \"Diz\"\n    ],\n    \"fullDate\": \"EEEE, d 'di' MMMM 'di' y\",\n    \"longDate\": \"d 'di' MMMM 'di' y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CVE\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kea\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_khq-ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Adduha\",\n      \"Aluula\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atini\",\n      \"Atalata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Aljuma\",\n      \"Assabdu\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alj\",\n      \"Ass\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"khq-ml\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_khq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Adduha\",\n      \"Aluula\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atini\",\n      \"Atalata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Aljuma\",\n      \"Assabdu\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alj\",\n      \"Ass\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"khq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ki-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Kiroko\",\n      \"Hwa\\u0129-in\\u0129\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Njumatat\\u0169\",\n      \"Njumaine\",\n      \"Njumatana\",\n      \"Aramithi\",\n      \"Njumaa\",\n      \"Njumamothi\"\n    ],\n    \"MONTH\": [\n      \"Njenuar\\u0129\",\n      \"Mwere wa ker\\u0129\",\n      \"Mwere wa gatat\\u0169\",\n      \"Mwere wa kana\",\n      \"Mwere wa gatano\",\n      \"Mwere wa gatandat\\u0169\",\n      \"Mwere wa m\\u0169gwanja\",\n      \"Mwere wa kanana\",\n      \"Mwere wa kenda\",\n      \"Mwere wa ik\\u0169mi\",\n      \"Mwere wa ik\\u0169mi na \\u0169mwe\",\n      \"Ndithemba\"\n    ],\n    \"SHORTDAY\": [\n      \"KMA\",\n      \"NTT\",\n      \"NMN\",\n      \"NMT\",\n      \"ART\",\n      \"NMA\",\n      \"NMM\"\n    ],\n    \"SHORTMONTH\": [\n      \"JEN\",\n      \"WKR\",\n      \"WGT\",\n      \"WKN\",\n      \"WTN\",\n      \"WTD\",\n      \"WMJ\",\n      \"WNN\",\n      \"WKD\",\n      \"WIK\",\n      \"WMW\",\n      \"DIT\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ki-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ki.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Kiroko\",\n      \"Hwa\\u0129-in\\u0129\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Njumatat\\u0169\",\n      \"Njumaine\",\n      \"Njumatana\",\n      \"Aramithi\",\n      \"Njumaa\",\n      \"Njumamothi\"\n    ],\n    \"MONTH\": [\n      \"Njenuar\\u0129\",\n      \"Mwere wa ker\\u0129\",\n      \"Mwere wa gatat\\u0169\",\n      \"Mwere wa kana\",\n      \"Mwere wa gatano\",\n      \"Mwere wa gatandat\\u0169\",\n      \"Mwere wa m\\u0169gwanja\",\n      \"Mwere wa kanana\",\n      \"Mwere wa kenda\",\n      \"Mwere wa ik\\u0169mi\",\n      \"Mwere wa ik\\u0169mi na \\u0169mwe\",\n      \"Ndithemba\"\n    ],\n    \"SHORTDAY\": [\n      \"KMA\",\n      \"NTT\",\n      \"NMN\",\n      \"NMT\",\n      \"ART\",\n      \"NMA\",\n      \"NMM\"\n    ],\n    \"SHORTMONTH\": [\n      \"JEN\",\n      \"WKR\",\n      \"WGT\",\n      \"WKN\",\n      \"WTN\",\n      \"WTD\",\n      \"WMJ\",\n      \"WNN\",\n      \"WKD\",\n      \"WIK\",\n      \"WMW\",\n      \"DIT\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ki\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kk-cyrl-kz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u0435\\u0440\\u0442\\u0435\\u04a3\\u0433\\u0456\",\n      \"\\u0442\\u04af\\u0441\\u0442\\u0435\\u043d \\u043a\\u0435\\u0439\\u0456\\u043d\\u0433\\u0456\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0434\\u04af\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u04d9\\u0440\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0431\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0431\\u0456\"\n    ],\n    \"MONTH\": [\n      \"\\u049b\\u0430\\u04a3\\u0442\\u0430\\u0440\",\n      \"\\u0430\\u049b\\u043f\\u0430\\u043d\",\n      \"\\u043d\\u0430\\u0443\\u0440\\u044b\\u0437\",\n      \"\\u0441\\u04d9\\u0443\\u0456\\u0440\",\n      \"\\u043c\\u0430\\u043c\\u044b\\u0440\",\n      \"\\u043c\\u0430\\u0443\\u0441\\u044b\\u043c\",\n      \"\\u0448\\u0456\\u043b\\u0434\\u0435\",\n      \"\\u0442\\u0430\\u043c\\u044b\\u0437\",\n      \"\\u049b\\u044b\\u0440\\u043a\\u04af\\u0439\\u0435\\u043a\",\n      \"\\u049b\\u0430\\u0437\\u0430\\u043d\",\n      \"\\u049b\\u0430\\u0440\\u0430\\u0448\\u0430\",\n      \"\\u0436\\u0435\\u043b\\u0442\\u043e\\u049b\\u0441\\u0430\\u043d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a\",\n      \"\\u0434\\u04af\\u0439\",\n      \"\\u0441\\u0435\\u0439\",\n      \"\\u0441\\u04d9\\u0440\",\n      \"\\u0431\\u0435\\u0439\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u049b\\u0430\\u04a3.\",\n      \"\\u0430\\u049b\\u043f.\",\n      \"\\u043d\\u0430\\u0443.\",\n      \"\\u0441\\u04d9\\u0443.\",\n      \"\\u043c\\u0430\\u043c.\",\n      \"\\u043c\\u0430\\u0443.\",\n      \"\\u0448\\u0456\\u043b.\",\n      \"\\u0442\\u0430\\u043c.\",\n      \"\\u049b\\u044b\\u0440.\",\n      \"\\u049b\\u0430\\u0437.\",\n      \"\\u049b\\u0430\\u0440.\",\n      \"\\u0436\\u0435\\u043b\\u0442.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"y, dd-MMM HH:mm:ss\",\n    \"mediumDate\": \"y, dd-MMM\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b8\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kk-cyrl-kz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kk-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u0435\\u0440\\u0442\\u0435\\u04a3\\u0433\\u0456\",\n      \"\\u0442\\u04af\\u0441\\u0442\\u0435\\u043d \\u043a\\u0435\\u0439\\u0456\\u043d\\u0433\\u0456\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0434\\u04af\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u04d9\\u0440\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0431\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0431\\u0456\"\n    ],\n    \"MONTH\": [\n      \"\\u049b\\u0430\\u04a3\\u0442\\u0430\\u0440\",\n      \"\\u0430\\u049b\\u043f\\u0430\\u043d\",\n      \"\\u043d\\u0430\\u0443\\u0440\\u044b\\u0437\",\n      \"\\u0441\\u04d9\\u0443\\u0456\\u0440\",\n      \"\\u043c\\u0430\\u043c\\u044b\\u0440\",\n      \"\\u043c\\u0430\\u0443\\u0441\\u044b\\u043c\",\n      \"\\u0448\\u0456\\u043b\\u0434\\u0435\",\n      \"\\u0442\\u0430\\u043c\\u044b\\u0437\",\n      \"\\u049b\\u044b\\u0440\\u043a\\u04af\\u0439\\u0435\\u043a\",\n      \"\\u049b\\u0430\\u0437\\u0430\\u043d\",\n      \"\\u049b\\u0430\\u0440\\u0430\\u0448\\u0430\",\n      \"\\u0436\\u0435\\u043b\\u0442\\u043e\\u049b\\u0441\\u0430\\u043d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a\",\n      \"\\u0434\\u04af\\u0439\",\n      \"\\u0441\\u0435\\u0439\",\n      \"\\u0441\\u04d9\\u0440\",\n      \"\\u0431\\u0435\\u0439\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u049b\\u0430\\u04a3.\",\n      \"\\u0430\\u049b\\u043f.\",\n      \"\\u043d\\u0430\\u0443.\",\n      \"\\u0441\\u04d9\\u0443.\",\n      \"\\u043c\\u0430\\u043c.\",\n      \"\\u043c\\u0430\\u0443.\",\n      \"\\u0448\\u0456\\u043b.\",\n      \"\\u0442\\u0430\\u043c.\",\n      \"\\u049b\\u044b\\u0440.\",\n      \"\\u049b\\u0430\\u0437.\",\n      \"\\u049b\\u0430\\u0440.\",\n      \"\\u0436\\u0435\\u043b\\u0442.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"y, dd-MMM HH:mm:ss\",\n    \"mediumDate\": \"y, dd-MMM\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kk-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u0435\\u0440\\u0442\\u0435\\u04a3\\u0433\\u0456\",\n      \"\\u0442\\u04af\\u0441\\u0442\\u0435\\u043d \\u043a\\u0435\\u0439\\u0456\\u043d\\u0433\\u0456\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0434\\u04af\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0441\\u04d9\\u0440\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0431\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0431\\u0456\"\n    ],\n    \"MONTH\": [\n      \"\\u049b\\u0430\\u04a3\\u0442\\u0430\\u0440\",\n      \"\\u0430\\u049b\\u043f\\u0430\\u043d\",\n      \"\\u043d\\u0430\\u0443\\u0440\\u044b\\u0437\",\n      \"\\u0441\\u04d9\\u0443\\u0456\\u0440\",\n      \"\\u043c\\u0430\\u043c\\u044b\\u0440\",\n      \"\\u043c\\u0430\\u0443\\u0441\\u044b\\u043c\",\n      \"\\u0448\\u0456\\u043b\\u0434\\u0435\",\n      \"\\u0442\\u0430\\u043c\\u044b\\u0437\",\n      \"\\u049b\\u044b\\u0440\\u043a\\u04af\\u0439\\u0435\\u043a\",\n      \"\\u049b\\u0430\\u0437\\u0430\\u043d\",\n      \"\\u049b\\u0430\\u0440\\u0430\\u0448\\u0430\",\n      \"\\u0436\\u0435\\u043b\\u0442\\u043e\\u049b\\u0441\\u0430\\u043d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a\",\n      \"\\u0434\\u04af\\u0439\",\n      \"\\u0441\\u0435\\u0439\",\n      \"\\u0441\\u04d9\\u0440\",\n      \"\\u0431\\u0435\\u0439\",\n      \"\\u0436\\u04b1\\u043c\\u0430\",\n      \"\\u0441\\u0435\\u043d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u049b\\u0430\\u04a3.\",\n      \"\\u0430\\u049b\\u043f.\",\n      \"\\u043d\\u0430\\u0443.\",\n      \"\\u0441\\u04d9\\u0443.\",\n      \"\\u043c\\u0430\\u043c.\",\n      \"\\u043c\\u0430\\u0443.\",\n      \"\\u0448\\u0456\\u043b.\",\n      \"\\u0442\\u0430\\u043c.\",\n      \"\\u049b\\u044b\\u0440.\",\n      \"\\u049b\\u0430\\u0437.\",\n      \"\\u049b\\u0430\\u0440.\",\n      \"\\u0436\\u0435\\u043b\\u0442.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"y, dd-MMM HH:mm:ss\",\n    \"mediumDate\": \"y, dd-MMM\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b8\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"kk\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kkj-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"s\\u0254ndi\",\n      \"lundi\",\n      \"mardi\",\n      \"m\\u025brk\\u025br\\u025bdi\",\n      \"yedi\",\n      \"va\\u014bd\\u025br\\u025bdi\",\n      \"m\\u0254n\\u0254 s\\u0254ndi\"\n    ],\n    \"MONTH\": [\n      \"pamba\",\n      \"wanja\",\n      \"mbiy\\u0254 m\\u025bndo\\u014bg\\u0254\",\n      \"Ny\\u0254l\\u0254mb\\u0254\\u014bg\\u0254\",\n      \"M\\u0254n\\u0254 \\u014bgbanja\",\n      \"Nya\\u014bgw\\u025b \\u014bgbanja\",\n      \"ku\\u014bgw\\u025b\",\n      \"f\\u025b\",\n      \"njapi\",\n      \"nyukul\",\n      \"11\",\n      \"\\u0253ul\\u0253us\\u025b\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254ndi\",\n      \"lundi\",\n      \"mardi\",\n      \"m\\u025brk\\u025br\\u025bdi\",\n      \"yedi\",\n      \"va\\u014bd\\u025br\\u025bdi\",\n      \"m\\u0254n\\u0254 s\\u0254ndi\"\n    ],\n    \"SHORTMONTH\": [\n      \"pamba\",\n      \"wanja\",\n      \"mbiy\\u0254 m\\u025bndo\\u014bg\\u0254\",\n      \"Ny\\u0254l\\u0254mb\\u0254\\u014bg\\u0254\",\n      \"M\\u0254n\\u0254 \\u014bgbanja\",\n      \"Nya\\u014bgw\\u025b \\u014bgbanja\",\n      \"ku\\u014bgw\\u025b\",\n      \"f\\u025b\",\n      \"njapi\",\n      \"nyukul\",\n      \"11\",\n      \"\\u0253ul\\u0253us\\u025b\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM y HH:mm\",\n    \"shortDate\": \"dd/MM y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kkj-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kkj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"s\\u0254ndi\",\n      \"lundi\",\n      \"mardi\",\n      \"m\\u025brk\\u025br\\u025bdi\",\n      \"yedi\",\n      \"va\\u014bd\\u025br\\u025bdi\",\n      \"m\\u0254n\\u0254 s\\u0254ndi\"\n    ],\n    \"MONTH\": [\n      \"pamba\",\n      \"wanja\",\n      \"mbiy\\u0254 m\\u025bndo\\u014bg\\u0254\",\n      \"Ny\\u0254l\\u0254mb\\u0254\\u014bg\\u0254\",\n      \"M\\u0254n\\u0254 \\u014bgbanja\",\n      \"Nya\\u014bgw\\u025b \\u014bgbanja\",\n      \"ku\\u014bgw\\u025b\",\n      \"f\\u025b\",\n      \"njapi\",\n      \"nyukul\",\n      \"11\",\n      \"\\u0253ul\\u0253us\\u025b\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254ndi\",\n      \"lundi\",\n      \"mardi\",\n      \"m\\u025brk\\u025br\\u025bdi\",\n      \"yedi\",\n      \"va\\u014bd\\u025br\\u025bdi\",\n      \"m\\u0254n\\u0254 s\\u0254ndi\"\n    ],\n    \"SHORTMONTH\": [\n      \"pamba\",\n      \"wanja\",\n      \"mbiy\\u0254 m\\u025bndo\\u014bg\\u0254\",\n      \"Ny\\u0254l\\u0254mb\\u0254\\u014bg\\u0254\",\n      \"M\\u0254n\\u0254 \\u014bgbanja\",\n      \"Nya\\u014bgw\\u025b \\u014bgbanja\",\n      \"ku\\u014bgw\\u025b\",\n      \"f\\u025b\",\n      \"njapi\",\n      \"nyukul\",\n      \"11\",\n      \"\\u0253ul\\u0253us\\u025b\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM y HH:mm\",\n    \"shortDate\": \"dd/MM y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kkj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kl-gl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ulloqeqqata-tungaa\",\n      \"ulloqeqqata-kingorna\"\n    ],\n    \"DAY\": [\n      \"sabaat\",\n      \"ataasinngorneq\",\n      \"marlunngorneq\",\n      \"pingasunngorneq\",\n      \"sisamanngorneq\",\n      \"tallimanngorneq\",\n      \"arfininngorneq\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"martsi\",\n      \"aprili\",\n      \"maji\",\n      \"juni\",\n      \"juli\",\n      \"augustusi\",\n      \"septemberi\",\n      \"oktoberi\",\n      \"novemberi\",\n      \"decemberi\"\n    ],\n    \"SHORTDAY\": [\n      \"sab\",\n      \"ata\",\n      \"mar\",\n      \"pin\",\n      \"sis\",\n      \"tal\",\n      \"arf\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"MMM dd, y h:mm:ss a\",\n    \"mediumDate\": \"MMM dd, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y-MM-dd h:mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kl-gl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ulloqeqqata-tungaa\",\n      \"ulloqeqqata-kingorna\"\n    ],\n    \"DAY\": [\n      \"sabaat\",\n      \"ataasinngorneq\",\n      \"marlunngorneq\",\n      \"pingasunngorneq\",\n      \"sisamanngorneq\",\n      \"tallimanngorneq\",\n      \"arfininngorneq\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"martsi\",\n      \"aprili\",\n      \"maji\",\n      \"juni\",\n      \"juli\",\n      \"augustusi\",\n      \"septemberi\",\n      \"oktoberi\",\n      \"novemberi\",\n      \"decemberi\"\n    ],\n    \"SHORTDAY\": [\n      \"sab\",\n      \"ata\",\n      \"mar\",\n      \"pin\",\n      \"sis\",\n      \"tal\",\n      \"arf\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"MMM dd, y h:mm:ss a\",\n    \"mediumDate\": \"MMM dd, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"y-MM-dd h:mm a\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kln-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Beet\",\n      \"Kemo\"\n    ],\n    \"DAY\": [\n      \"Betutab tisap\",\n      \"Betut netai\",\n      \"Betutab aeng\\u2019\",\n      \"Betutab somok\",\n      \"Betutab ang\\u2019wan\",\n      \"Betutab mut\",\n      \"Betutab lo\"\n    ],\n    \"MONTH\": [\n      \"Mulgul\",\n      \"Ng\\u2019atyato\",\n      \"Kiptamo\",\n      \"Iwat kut\",\n      \"Ng\\u2019eiyet\",\n      \"Waki\",\n      \"Roptui\",\n      \"Kipkogaga\",\n      \"Buret\",\n      \"Epeso\",\n      \"Kipsunde netai\",\n      \"Kipsunde nebo aeng\"\n    ],\n    \"SHORTDAY\": [\n      \"Tis\",\n      \"Tai\",\n      \"Aen\",\n      \"Som\",\n      \"Ang\",\n      \"Mut\",\n      \"Loh\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mul\",\n      \"Nga\",\n      \"Kip\",\n      \"Iwa\",\n      \"Nge\",\n      \"Wak\",\n      \"Rop\",\n      \"Kog\",\n      \"Bur\",\n      \"Epe\",\n      \"Tai\",\n      \"Aen\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kln-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kln.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Beet\",\n      \"Kemo\"\n    ],\n    \"DAY\": [\n      \"Betutab tisap\",\n      \"Betut netai\",\n      \"Betutab aeng\\u2019\",\n      \"Betutab somok\",\n      \"Betutab ang\\u2019wan\",\n      \"Betutab mut\",\n      \"Betutab lo\"\n    ],\n    \"MONTH\": [\n      \"Mulgul\",\n      \"Ng\\u2019atyato\",\n      \"Kiptamo\",\n      \"Iwat kut\",\n      \"Ng\\u2019eiyet\",\n      \"Waki\",\n      \"Roptui\",\n      \"Kipkogaga\",\n      \"Buret\",\n      \"Epeso\",\n      \"Kipsunde netai\",\n      \"Kipsunde nebo aeng\"\n    ],\n    \"SHORTDAY\": [\n      \"Tis\",\n      \"Tai\",\n      \"Aen\",\n      \"Som\",\n      \"Ang\",\n      \"Mut\",\n      \"Loh\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mul\",\n      \"Nga\",\n      \"Kip\",\n      \"Iwa\",\n      \"Nge\",\n      \"Wak\",\n      \"Rop\",\n      \"Kog\",\n      \"Bur\",\n      \"Epe\",\n      \"Tai\",\n      \"Aen\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kln\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_km-kh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1796\\u17d2\\u179a\\u17b9\\u1780\",\n      \"\\u179b\\u17d2\\u1784\\u17b6\\u1785\"\n    ],\n    \"DAY\": [\n      \"\\u17a2\\u17b6\\u1791\\u17b7\\u178f\\u17d2\\u1799\",\n      \"\\u1785\\u1793\\u17d2\\u1791\",\n      \"\\u17a2\\u1784\\u17d2\\u1782\\u17b6\\u179a\",\n      \"\\u1796\\u17bb\\u1792\",\n      \"\\u1796\\u17d2\\u179a\\u17a0\\u179f\\u17d2\\u1794\\u178f\\u17b7\\u17cd\",\n      \"\\u179f\\u17bb\\u1780\\u17d2\\u179a\",\n      \"\\u179f\\u17c5\\u179a\\u17cd\"\n    ],\n    \"MONTH\": [\n      \"\\u1798\\u1780\\u179a\\u17b6\",\n      \"\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8\",\n      \"\\u1798\\u17b8\\u1793\\u17b6\",\n      \"\\u1798\\u17c1\\u179f\\u17b6\",\n      \"\\u17a7\\u179f\\u1797\\u17b6\",\n      \"\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6\",\n      \"\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6\",\n      \"\\u179f\\u17b8\\u17a0\\u17b6\",\n      \"\\u1780\\u1789\\u17d2\\u1789\\u17b6\",\n      \"\\u178f\\u17bb\\u179b\\u17b6\",\n      \"\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6\",\n      \"\\u1792\\u17d2\\u1793\\u17bc\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u17a2\\u17b6\\u1791\\u17b7\\u178f\\u17d2\\u1799\",\n      \"\\u1785\\u1793\\u17d2\\u1791\",\n      \"\\u17a2\\u1784\\u17d2\\u1782\\u17b6\\u179a\",\n      \"\\u1796\\u17bb\\u1792\",\n      \"\\u1796\\u17d2\\u179a\\u17a0\\u179f\\u17d2\\u1794\\u178f\\u17b7\\u17cd\",\n      \"\\u179f\\u17bb\\u1780\\u17d2\\u179a\",\n      \"\\u179f\\u17c5\\u179a\\u17cd\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1798\\u1780\\u179a\\u17b6\",\n      \"\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8\",\n      \"\\u1798\\u17b8\\u1793\\u17b6\",\n      \"\\u1798\\u17c1\\u179f\\u17b6\",\n      \"\\u17a7\\u179f\\u1797\\u17b6\",\n      \"\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6\",\n      \"\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6\",\n      \"\\u179f\\u17b8\\u17a0\\u17b6\",\n      \"\\u1780\\u1789\\u17d2\\u1789\\u17b6\",\n      \"\\u178f\\u17bb\\u179b\\u17b6\",\n      \"\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6\",\n      \"\\u1792\\u17d2\\u1793\\u17bc\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Riel\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"km-kh\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_km.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1796\\u17d2\\u179a\\u17b9\\u1780\",\n      \"\\u179b\\u17d2\\u1784\\u17b6\\u1785\"\n    ],\n    \"DAY\": [\n      \"\\u17a2\\u17b6\\u1791\\u17b7\\u178f\\u17d2\\u1799\",\n      \"\\u1785\\u1793\\u17d2\\u1791\",\n      \"\\u17a2\\u1784\\u17d2\\u1782\\u17b6\\u179a\",\n      \"\\u1796\\u17bb\\u1792\",\n      \"\\u1796\\u17d2\\u179a\\u17a0\\u179f\\u17d2\\u1794\\u178f\\u17b7\\u17cd\",\n      \"\\u179f\\u17bb\\u1780\\u17d2\\u179a\",\n      \"\\u179f\\u17c5\\u179a\\u17cd\"\n    ],\n    \"MONTH\": [\n      \"\\u1798\\u1780\\u179a\\u17b6\",\n      \"\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8\",\n      \"\\u1798\\u17b8\\u1793\\u17b6\",\n      \"\\u1798\\u17c1\\u179f\\u17b6\",\n      \"\\u17a7\\u179f\\u1797\\u17b6\",\n      \"\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6\",\n      \"\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6\",\n      \"\\u179f\\u17b8\\u17a0\\u17b6\",\n      \"\\u1780\\u1789\\u17d2\\u1789\\u17b6\",\n      \"\\u178f\\u17bb\\u179b\\u17b6\",\n      \"\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6\",\n      \"\\u1792\\u17d2\\u1793\\u17bc\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u17a2\\u17b6\\u1791\\u17b7\\u178f\\u17d2\\u1799\",\n      \"\\u1785\\u1793\\u17d2\\u1791\",\n      \"\\u17a2\\u1784\\u17d2\\u1782\\u17b6\\u179a\",\n      \"\\u1796\\u17bb\\u1792\",\n      \"\\u1796\\u17d2\\u179a\\u17a0\\u179f\\u17d2\\u1794\\u178f\\u17b7\\u17cd\",\n      \"\\u179f\\u17bb\\u1780\\u17d2\\u179a\",\n      \"\\u179f\\u17c5\\u179a\\u17cd\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1798\\u1780\\u179a\\u17b6\",\n      \"\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8\",\n      \"\\u1798\\u17b8\\u1793\\u17b6\",\n      \"\\u1798\\u17c1\\u179f\\u17b6\",\n      \"\\u17a7\\u179f\\u1797\\u17b6\",\n      \"\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6\",\n      \"\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6\",\n      \"\\u179f\\u17b8\\u17a0\\u17b6\",\n      \"\\u1780\\u1789\\u17d2\\u1789\\u17b6\",\n      \"\\u178f\\u17bb\\u179b\\u17b6\",\n      \"\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6\",\n      \"\\u1792\\u17d2\\u1793\\u17bc\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Riel\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"km\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kn-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0caa\\u0cc2\\u0cb0\\u0ccd\\u0cb5\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n      \"\\u0c85\\u0caa\\u0cb0\\u0cbe\\u0cb9\\u0ccd\\u0ca8\"\n    ],\n    \"DAY\": [\n      \"\\u0cad\\u0cbe\\u0ca8\\u0cc1\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb8\\u0ccb\\u0cae\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cae\\u0c82\\u0c97\\u0cb3\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cac\\u0cc1\\u0ca7\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0c97\\u0cc1\\u0cb0\\u0cc1\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb6\\u0ca8\\u0cbf\\u0cb5\\u0cbe\\u0cb0\"\n    ],\n    \"MONTH\": [\n      \"\\u0c9c\\u0ca8\\u0cb5\\u0cb0\\u0cbf\",\n      \"\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0\\u0cb5\\u0cb0\\u0cbf\",\n      \"\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd\",\n      \"\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\\u0cb2\\u0ccd\",\n      \"\\u0cae\\u0cc7\",\n      \"\\u0c9c\\u0cc2\\u0ca8\\u0ccd\",\n      \"\\u0c9c\\u0cc1\\u0cb2\\u0cc8\",\n      \"\\u0c86\\u0c97\\u0cb8\\u0ccd\\u0c9f\\u0ccd\",\n      \"\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0ccb\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0ca8\\u0cb5\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0cad\\u0cbe\\u0ca8\\u0cc1\",\n      \"\\u0cb8\\u0ccb\\u0cae\",\n      \"\\u0cae\\u0c82\\u0c97\\u0cb3\",\n      \"\\u0cac\\u0cc1\\u0ca7\",\n      \"\\u0c97\\u0cc1\\u0cb0\\u0cc1\",\n      \"\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0\",\n      \"\\u0cb6\\u0ca8\\u0cbf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0c9c\\u0ca8\",\n      \"\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0\",\n      \"\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd\",\n      \"\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\",\n      \"\\u0cae\\u0cc7\",\n      \"\\u0c9c\\u0cc2\\u0ca8\\u0ccd\",\n      \"\\u0c9c\\u0cc1\\u0cb2\\u0cc8\",\n      \"\\u0c86\\u0c97\",\n      \"\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82\",\n      \"\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0ccb\",\n      \"\\u0ca8\\u0cb5\\u0cc6\\u0c82\",\n      \"\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y hh:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"M/d/yy hh:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kn-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0caa\\u0cc2\\u0cb0\\u0ccd\\u0cb5\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n      \"\\u0c85\\u0caa\\u0cb0\\u0cbe\\u0cb9\\u0ccd\\u0ca8\"\n    ],\n    \"DAY\": [\n      \"\\u0cad\\u0cbe\\u0ca8\\u0cc1\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb8\\u0ccb\\u0cae\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cae\\u0c82\\u0c97\\u0cb3\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cac\\u0cc1\\u0ca7\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0c97\\u0cc1\\u0cb0\\u0cc1\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0\\u0cb5\\u0cbe\\u0cb0\",\n      \"\\u0cb6\\u0ca8\\u0cbf\\u0cb5\\u0cbe\\u0cb0\"\n    ],\n    \"MONTH\": [\n      \"\\u0c9c\\u0ca8\\u0cb5\\u0cb0\\u0cbf\",\n      \"\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0\\u0cb5\\u0cb0\\u0cbf\",\n      \"\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd\",\n      \"\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\\u0cb2\\u0ccd\",\n      \"\\u0cae\\u0cc7\",\n      \"\\u0c9c\\u0cc2\\u0ca8\\u0ccd\",\n      \"\\u0c9c\\u0cc1\\u0cb2\\u0cc8\",\n      \"\\u0c86\\u0c97\\u0cb8\\u0ccd\\u0c9f\\u0ccd\",\n      \"\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0ccb\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0ca8\\u0cb5\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\",\n      \"\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0cad\\u0cbe\\u0ca8\\u0cc1\",\n      \"\\u0cb8\\u0ccb\\u0cae\",\n      \"\\u0cae\\u0c82\\u0c97\\u0cb3\",\n      \"\\u0cac\\u0cc1\\u0ca7\",\n      \"\\u0c97\\u0cc1\\u0cb0\\u0cc1\",\n      \"\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0\",\n      \"\\u0cb6\\u0ca8\\u0cbf\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0c9c\\u0ca8\",\n      \"\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0\",\n      \"\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd\",\n      \"\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\",\n      \"\\u0cae\\u0cc7\",\n      \"\\u0c9c\\u0cc2\\u0ca8\\u0ccd\",\n      \"\\u0c9c\\u0cc1\\u0cb2\\u0cc8\",\n      \"\\u0c86\\u0c97\",\n      \"\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82\",\n      \"\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0ccb\",\n      \"\\u0ca8\\u0cb5\\u0cc6\\u0c82\",\n      \"\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y hh:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"M/d/yy hh:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ko-kp.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\uc624\\uc804\",\n      \"\\uc624\\ud6c4\"\n    ],\n    \"DAY\": [\n      \"\\uc77c\\uc694\\uc77c\",\n      \"\\uc6d4\\uc694\\uc77c\",\n      \"\\ud654\\uc694\\uc77c\",\n      \"\\uc218\\uc694\\uc77c\",\n      \"\\ubaa9\\uc694\\uc77c\",\n      \"\\uae08\\uc694\\uc77c\",\n      \"\\ud1a0\\uc694\\uc77c\"\n    ],\n    \"MONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"SHORTDAY\": [\n      \"\\uc77c\",\n      \"\\uc6d4\",\n      \"\\ud654\",\n      \"\\uc218\",\n      \"\\ubaa9\",\n      \"\\uae08\",\n      \"\\ud1a0\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"fullDate\": \"y\\ub144 M\\uc6d4 d\\uc77c EEEE\",\n    \"longDate\": \"y\\ub144 M\\uc6d4 d\\uc77c\",\n    \"medium\": \"y. M. d. a h:mm:ss\",\n    \"mediumDate\": \"y. M. d.\",\n    \"mediumTime\": \"a h:mm:ss\",\n    \"short\": \"yy. M. d. a h:mm\",\n    \"shortDate\": \"yy. M. d.\",\n    \"shortTime\": \"a h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a9KP\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ko-kp\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ko-kr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\uc624\\uc804\",\n      \"\\uc624\\ud6c4\"\n    ],\n    \"DAY\": [\n      \"\\uc77c\\uc694\\uc77c\",\n      \"\\uc6d4\\uc694\\uc77c\",\n      \"\\ud654\\uc694\\uc77c\",\n      \"\\uc218\\uc694\\uc77c\",\n      \"\\ubaa9\\uc694\\uc77c\",\n      \"\\uae08\\uc694\\uc77c\",\n      \"\\ud1a0\\uc694\\uc77c\"\n    ],\n    \"MONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"SHORTDAY\": [\n      \"\\uc77c\",\n      \"\\uc6d4\",\n      \"\\ud654\",\n      \"\\uc218\",\n      \"\\ubaa9\",\n      \"\\uae08\",\n      \"\\ud1a0\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"fullDate\": \"y\\ub144 M\\uc6d4 d\\uc77c EEEE\",\n    \"longDate\": \"y\\ub144 M\\uc6d4 d\\uc77c\",\n    \"medium\": \"y. M. d. a h:mm:ss\",\n    \"mediumDate\": \"y. M. d.\",\n    \"mediumTime\": \"a h:mm:ss\",\n    \"short\": \"yy. M. d. a h:mm\",\n    \"shortDate\": \"yy. M. d.\",\n    \"shortTime\": \"a h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ko-kr\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ko.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\uc624\\uc804\",\n      \"\\uc624\\ud6c4\"\n    ],\n    \"DAY\": [\n      \"\\uc77c\\uc694\\uc77c\",\n      \"\\uc6d4\\uc694\\uc77c\",\n      \"\\ud654\\uc694\\uc77c\",\n      \"\\uc218\\uc694\\uc77c\",\n      \"\\ubaa9\\uc694\\uc77c\",\n      \"\\uae08\\uc694\\uc77c\",\n      \"\\ud1a0\\uc694\\uc77c\"\n    ],\n    \"MONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"SHORTDAY\": [\n      \"\\uc77c\",\n      \"\\uc6d4\",\n      \"\\ud654\",\n      \"\\uc218\",\n      \"\\ubaa9\",\n      \"\\uae08\",\n      \"\\ud1a0\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\uc6d4\",\n      \"2\\uc6d4\",\n      \"3\\uc6d4\",\n      \"4\\uc6d4\",\n      \"5\\uc6d4\",\n      \"6\\uc6d4\",\n      \"7\\uc6d4\",\n      \"8\\uc6d4\",\n      \"9\\uc6d4\",\n      \"10\\uc6d4\",\n      \"11\\uc6d4\",\n      \"12\\uc6d4\"\n    ],\n    \"fullDate\": \"y\\ub144 M\\uc6d4 d\\uc77c EEEE\",\n    \"longDate\": \"y\\ub144 M\\uc6d4 d\\uc77c\",\n    \"medium\": \"y. M. d. a h:mm:ss\",\n    \"mediumDate\": \"y. M. d.\",\n    \"mediumTime\": \"a h:mm:ss\",\n    \"short\": \"yy. M. d. a h:mm\",\n    \"shortDate\": \"yy. M. d.\",\n    \"shortTime\": \"a h:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ko\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kok-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092e.\\u092a\\u0942.\",\n      \"\\u092e.\\u0928\\u0902.\"\n    ],\n    \"DAY\": [\n      \"\\u0906\\u0926\\u093f\\u0924\\u094d\\u092f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0933\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0913\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0913\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0933\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0913\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0913\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd-MM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kok-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kok.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092e.\\u092a\\u0942.\",\n      \"\\u092e.\\u0928\\u0902.\"\n    ],\n    \"DAY\": [\n      \"\\u0906\\u0926\\u093f\\u0924\\u094d\\u092f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0933\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0913\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0913\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0933\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0913\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0913\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd-MM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kok\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ks-arab-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u064e\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0631\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0622\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ks-arab-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ks-arab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u064e\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0631\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0622\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ks-arab\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ks.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u064e\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0631\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0622\\u062a\\u06be\\u0648\\u0627\\u0631\",\n      \"\\u0698\\u0654\\u0646\\u065b\\u062f\\u0655\\u0631\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u065a\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0648\\u062f\\u0648\\u0627\\u0631\",\n      \"\\u0628\\u0631\\u065b\\u066e\\u06ea\\u0633\\u0648\\u0627\\u0631\",\n      \"\\u062c\\u064f\\u0645\\u06c1\",\n      \"\\u0628\\u0679\\u0648\\u0627\\u0631\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0624\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0624\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0655\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\\u0654\",\n      \"\\u062c\\u0648\\u0657\\u0646\",\n      \"\\u062c\\u0648\\u0657\\u0644\\u0627\\u06cc\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0657\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ks\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksb-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"makeo\",\n      \"nyiaghuo\"\n    ],\n    \"DAY\": [\n      \"Jumaapii\",\n      \"Jumaatatu\",\n      \"Jumaane\",\n      \"Jumaatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumaamosi\"\n    ],\n    \"MONTH\": [\n      \"Januali\",\n      \"Febluali\",\n      \"Machi\",\n      \"Aplili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jmn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksb-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"makeo\",\n      \"nyiaghuo\"\n    ],\n    \"DAY\": [\n      \"Jumaapii\",\n      \"Jumaatatu\",\n      \"Jumaane\",\n      \"Jumaatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumaamosi\"\n    ],\n    \"MONTH\": [\n      \"Januali\",\n      \"Febluali\",\n      \"Machi\",\n      \"Aplili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jmn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksf-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"s\\u00e1r\\u00faw\\u00e1\",\n      \"c\\u025b\\u025b\\u0301nko\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u01dd\",\n      \"l\\u01ddnd\\u00ed\",\n      \"maad\\u00ed\",\n      \"m\\u025bkr\\u025bd\\u00ed\",\n      \"j\\u01dd\\u01ddd\\u00ed\",\n      \"j\\u00famb\\u00e1\",\n      \"samd\\u00ed\"\n    ],\n    \"MONTH\": [\n      \"\\u014bw\\u00ed\\u00ed a nt\\u0254\\u0301nt\\u0254\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd b\\u025b\\u0301\\u025b\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd r\\u00e1\\u00e1\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nin\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1an\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1af\\u0254k\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1ab\\u025b\\u025b\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1araa\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1anin\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk di b\\u0254\\u0301k\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk di b\\u025b\\u0301\\u025b\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"l\\u01ddn\",\n      \"maa\",\n      \"m\\u025bk\",\n      \"j\\u01dd\\u01dd\",\n      \"j\\u00fam\",\n      \"sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u014b1\",\n      \"\\u014b2\",\n      \"\\u014b3\",\n      \"\\u014b4\",\n      \"\\u014b5\",\n      \"\\u014b6\",\n      \"\\u014b7\",\n      \"\\u014b8\",\n      \"\\u014b9\",\n      \"\\u014b10\",\n      \"\\u014b11\",\n      \"\\u014b12\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksf-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"s\\u00e1r\\u00faw\\u00e1\",\n      \"c\\u025b\\u025b\\u0301nko\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u01dd\",\n      \"l\\u01ddnd\\u00ed\",\n      \"maad\\u00ed\",\n      \"m\\u025bkr\\u025bd\\u00ed\",\n      \"j\\u01dd\\u01ddd\\u00ed\",\n      \"j\\u00famb\\u00e1\",\n      \"samd\\u00ed\"\n    ],\n    \"MONTH\": [\n      \"\\u014bw\\u00ed\\u00ed a nt\\u0254\\u0301nt\\u0254\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd b\\u025b\\u0301\\u025b\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd r\\u00e1\\u00e1\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nin\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1an\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1af\\u0254k\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1ab\\u025b\\u025b\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1araa\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd t\\u00e1anin\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk di b\\u0254\\u0301k\",\n      \"\\u014bw\\u00ed\\u00ed ak\\u01dd nt\\u025bk di b\\u025b\\u0301\\u025b\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"l\\u01ddn\",\n      \"maa\",\n      \"m\\u025bk\",\n      \"j\\u01dd\\u01dd\",\n      \"j\\u00fam\",\n      \"sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u014b1\",\n      \"\\u014b2\",\n      \"\\u014b3\",\n      \"\\u014b4\",\n      \"\\u014b5\",\n      \"\\u014b6\",\n      \"\\u014b7\",\n      \"\\u014b8\",\n      \"\\u014b9\",\n      \"\\u014b10\",\n      \"\\u014b11\",\n      \"\\u014b12\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksh-de.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Uhr v\\u00f6rmiddaachs\",\n      \"Uhr nommendaachs\"\n    ],\n    \"DAY\": [\n      \"Sunndaach\",\n      \"Moondaach\",\n      \"Dinnsdaach\",\n      \"Metwoch\",\n      \"Dunnersdaach\",\n      \"Friidaach\",\n      \"Samsdaach\"\n    ],\n    \"MONTH\": [\n      \"Jannewa\",\n      \"F\\u00e4browa\",\n      \"M\\u00e4\\u00e4z\",\n      \"Aprell\",\n      \"M\\u00e4i\",\n      \"Juuni\",\n      \"Juuli\",\n      \"Oujo\\u00df\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Me.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"F\\u00e4b\",\n      \"M\\u00e4z\",\n      \"Apr\",\n      \"M\\u00e4i\",\n      \"Jun\",\n      \"Jul\",\n      \"Ouj\",\n      \"S\\u00e4p\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, 'd\\u00e4' d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM. y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM. y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d. M. y HH:mm\",\n    \"shortDate\": \"d. M. y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksh-de\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ksh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Uhr v\\u00f6rmiddaachs\",\n      \"Uhr nommendaachs\"\n    ],\n    \"DAY\": [\n      \"Sunndaach\",\n      \"Moondaach\",\n      \"Dinnsdaach\",\n      \"Metwoch\",\n      \"Dunnersdaach\",\n      \"Friidaach\",\n      \"Samsdaach\"\n    ],\n    \"MONTH\": [\n      \"Jannewa\",\n      \"F\\u00e4browa\",\n      \"M\\u00e4\\u00e4z\",\n      \"Aprell\",\n      \"M\\u00e4i\",\n      \"Juuni\",\n      \"Juuli\",\n      \"Oujo\\u00df\",\n      \"Sept\\u00e4mber\",\n      \"Oktoober\",\n      \"Nov\\u00e4mber\",\n      \"Dez\\u00e4mber\"\n    ],\n    \"SHORTDAY\": [\n      \"Su.\",\n      \"Mo.\",\n      \"Di.\",\n      \"Me.\",\n      \"Du.\",\n      \"Fr.\",\n      \"Sa.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"F\\u00e4b\",\n      \"M\\u00e4z\",\n      \"Apr\",\n      \"M\\u00e4i\",\n      \"Jun\",\n      \"Jul\",\n      \"Ouj\",\n      \"S\\u00e4p\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"fullDate\": \"EEEE, 'd\\u00e4' d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM. y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM. y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d. M. y HH:mm\",\n    \"shortDate\": \"d. M. y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ksh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kw-gb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"De Sul\",\n      \"De Lun\",\n      \"De Merth\",\n      \"De Merher\",\n      \"De Yow\",\n      \"De Gwener\",\n      \"De Sadorn\"\n    ],\n    \"MONTH\": [\n      \"Mys Genver\",\n      \"Mys Whevrel\",\n      \"Mys Merth\",\n      \"Mys Ebrel\",\n      \"Mys Me\",\n      \"Mys Efan\",\n      \"Mys Gortheren\",\n      \"Mye Est\",\n      \"Mys Gwyngala\",\n      \"Mys Hedra\",\n      \"Mys Du\",\n      \"Mys Kevardhu\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Mth\",\n      \"Mhr\",\n      \"Yow\",\n      \"Gwe\",\n      \"Sad\"\n    ],\n    \"SHORTMONTH\": [\n      \"Gen\",\n      \"Whe\",\n      \"Mer\",\n      \"Ebr\",\n      \"Me\",\n      \"Efn\",\n      \"Gor\",\n      \"Est\",\n      \"Gwn\",\n      \"Hed\",\n      \"Du\",\n      \"Kev\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kw-gb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_kw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"De Sul\",\n      \"De Lun\",\n      \"De Merth\",\n      \"De Merher\",\n      \"De Yow\",\n      \"De Gwener\",\n      \"De Sadorn\"\n    ],\n    \"MONTH\": [\n      \"Mys Genver\",\n      \"Mys Whevrel\",\n      \"Mys Merth\",\n      \"Mys Ebrel\",\n      \"Mys Me\",\n      \"Mys Efan\",\n      \"Mys Gortheren\",\n      \"Mye Est\",\n      \"Mys Gwyngala\",\n      \"Mys Hedra\",\n      \"Mys Du\",\n      \"Mys Kevardhu\"\n    ],\n    \"SHORTDAY\": [\n      \"Sul\",\n      \"Lun\",\n      \"Mth\",\n      \"Mhr\",\n      \"Yow\",\n      \"Gwe\",\n      \"Sad\"\n    ],\n    \"SHORTMONTH\": [\n      \"Gen\",\n      \"Whe\",\n      \"Mer\",\n      \"Ebr\",\n      \"Me\",\n      \"Efn\",\n      \"Gor\",\n      \"Est\",\n      \"Gwn\",\n      \"Hed\",\n      \"Du\",\n      \"Kev\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a3\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"kw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ky-cyrl-kg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u043a\\u044b\",\n      \"\\u0442\\u04af\\u0448\\u0442\\u04e9\\u043d \\u043a\\u0438\\u0439\\u0438\\u043d\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0434\\u04af\\u0439\\u0448\\u04e9\\u043c\\u0431\\u04af\",\n      \"\\u0448\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0448\\u0430\\u0440\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0431\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u0435\\u043c\\u0431\\u0438\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044c\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d\\u044c\",\n      \"\\u0438\\u044e\\u043b\\u044c\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a.\",\n      \"\\u0434\\u04af\\u0439.\",\n      \"\\u0448\\u0435\\u0439\\u0448.\",\n      \"\\u0448\\u0430\\u0440\\u0448.\",\n      \"\\u0431\\u0435\\u0439\\u0448.\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u043c.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d.\",\n      \"\\u0438\\u044e\\u043b.\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d-MMMM, y-'\\u0436'.\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KGS\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ky-cyrl-kg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ky-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u043a\\u044b\",\n      \"\\u0442\\u04af\\u0448\\u0442\\u04e9\\u043d \\u043a\\u0438\\u0439\\u0438\\u043d\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0434\\u04af\\u0439\\u0448\\u04e9\\u043c\\u0431\\u04af\",\n      \"\\u0448\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0448\\u0430\\u0440\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0431\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u0435\\u043c\\u0431\\u0438\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044c\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d\\u044c\",\n      \"\\u0438\\u044e\\u043b\\u044c\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a.\",\n      \"\\u0434\\u04af\\u0439.\",\n      \"\\u0448\\u0435\\u0439\\u0448.\",\n      \"\\u0448\\u0430\\u0440\\u0448.\",\n      \"\\u0431\\u0435\\u0439\\u0448.\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u043c.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d.\",\n      \"\\u0438\\u044e\\u043b.\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d-MMMM, y-'\\u0436'.\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ky-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ky.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0442\\u0430\\u04a3\\u043a\\u044b\",\n      \"\\u0442\\u04af\\u0448\\u0442\\u04e9\\u043d \\u043a\\u0438\\u0439\\u0438\\u043d\"\n    ],\n    \"DAY\": [\n      \"\\u0436\\u0435\\u043a\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0434\\u04af\\u0439\\u0448\\u04e9\\u043c\\u0431\\u04af\",\n      \"\\u0448\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0448\\u0430\\u0440\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0431\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u0435\\u043c\\u0431\\u0438\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044c\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044c\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d\\u044c\",\n      \"\\u0438\\u044e\\u043b\\u044c\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044c\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0436\\u0435\\u043a.\",\n      \"\\u0434\\u04af\\u0439.\",\n      \"\\u0448\\u0435\\u0439\\u0448.\",\n      \"\\u0448\\u0430\\u0440\\u0448.\",\n      \"\\u0431\\u0435\\u0439\\u0448.\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0438\\u0448\\u043c.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0439\",\n      \"\\u0438\\u044e\\u043d.\",\n      \"\\u0438\\u044e\\u043b.\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d-MMMM, y-'\\u0436'.\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KGS\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ky\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lag-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"TOO\",\n      \"MUU\"\n    ],\n    \"DAY\": [\n      \"Jumap\\u00ediri\",\n      \"Jumat\\u00e1tu\",\n      \"Juma\\u00edne\",\n      \"Jumat\\u00e1ano\",\n      \"Alam\\u00edisi\",\n      \"Ijum\\u00e1a\",\n      \"Jumam\\u00f3osi\"\n    ],\n    \"MONTH\": [\n      \"K\\u0289f\\u00fangat\\u0268\",\n      \"K\\u0289naan\\u0268\",\n      \"K\\u0289keenda\",\n      \"Kwiikumi\",\n      \"Kwiinyamb\\u00e1la\",\n      \"Kwiidwaata\",\n      \"K\\u0289m\\u0289\\u0289nch\\u0268\",\n      \"K\\u0289v\\u0268\\u0268r\\u0268\",\n      \"K\\u0289saat\\u0289\",\n      \"Kwiinyi\",\n      \"K\\u0289saano\",\n      \"K\\u0289sasat\\u0289\"\n    ],\n    \"SHORTDAY\": [\n      \"P\\u00edili\",\n      \"T\\u00e1atu\",\n      \"\\u00cdne\",\n      \"T\\u00e1ano\",\n      \"Alh\",\n      \"Ijm\",\n      \"M\\u00f3osi\"\n    ],\n    \"SHORTMONTH\": [\n      \"F\\u00fangat\\u0268\",\n      \"Naan\\u0268\",\n      \"Keenda\",\n      \"Ik\\u00fami\",\n      \"Inyambala\",\n      \"Idwaata\",\n      \"M\\u0289\\u0289nch\\u0268\",\n      \"V\\u0268\\u0268r\\u0268\",\n      \"Saat\\u0289\",\n      \"Inyi\",\n      \"Saano\",\n      \"Sasat\\u0289\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lag-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lag.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"TOO\",\n      \"MUU\"\n    ],\n    \"DAY\": [\n      \"Jumap\\u00ediri\",\n      \"Jumat\\u00e1tu\",\n      \"Juma\\u00edne\",\n      \"Jumat\\u00e1ano\",\n      \"Alam\\u00edisi\",\n      \"Ijum\\u00e1a\",\n      \"Jumam\\u00f3osi\"\n    ],\n    \"MONTH\": [\n      \"K\\u0289f\\u00fangat\\u0268\",\n      \"K\\u0289naan\\u0268\",\n      \"K\\u0289keenda\",\n      \"Kwiikumi\",\n      \"Kwiinyamb\\u00e1la\",\n      \"Kwiidwaata\",\n      \"K\\u0289m\\u0289\\u0289nch\\u0268\",\n      \"K\\u0289v\\u0268\\u0268r\\u0268\",\n      \"K\\u0289saat\\u0289\",\n      \"Kwiinyi\",\n      \"K\\u0289saano\",\n      \"K\\u0289sasat\\u0289\"\n    ],\n    \"SHORTDAY\": [\n      \"P\\u00edili\",\n      \"T\\u00e1atu\",\n      \"\\u00cdne\",\n      \"T\\u00e1ano\",\n      \"Alh\",\n      \"Ijm\",\n      \"M\\u00f3osi\"\n    ],\n    \"SHORTMONTH\": [\n      \"F\\u00fangat\\u0268\",\n      \"Naan\\u0268\",\n      \"Keenda\",\n      \"Ik\\u00fami\",\n      \"Inyambala\",\n      \"Idwaata\",\n      \"M\\u0289\\u0289nch\\u0268\",\n      \"V\\u0268\\u0268r\\u0268\",\n      \"Saat\\u0289\",\n      \"Inyi\",\n      \"Saano\",\n      \"Sasat\\u0289\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lag\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lb-lu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"moies\",\n      \"nom\\u00ebttes\"\n    ],\n    \"DAY\": [\n      \"Sonndeg\",\n      \"M\\u00e9indeg\",\n      \"D\\u00ebnschdeg\",\n      \"M\\u00ebttwoch\",\n      \"Donneschdeg\",\n      \"Freideg\",\n      \"Samschdeg\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4erz\",\n      \"Abr\\u00ebll\",\n      \"Mee\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"Son.\",\n      \"M\\u00e9i.\",\n      \"D\\u00ebn.\",\n      \"M\\u00ebt.\",\n      \"Don.\",\n      \"Fre.\",\n      \"Sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4e.\",\n      \"Abr.\",\n      \"Mee\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lb-lu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"moies\",\n      \"nom\\u00ebttes\"\n    ],\n    \"DAY\": [\n      \"Sonndeg\",\n      \"M\\u00e9indeg\",\n      \"D\\u00ebnschdeg\",\n      \"M\\u00ebttwoch\",\n      \"Donneschdeg\",\n      \"Freideg\",\n      \"Samschdeg\"\n    ],\n    \"MONTH\": [\n      \"Januar\",\n      \"Februar\",\n      \"M\\u00e4erz\",\n      \"Abr\\u00ebll\",\n      \"Mee\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"SHORTDAY\": [\n      \"Son.\",\n      \"M\\u00e9i.\",\n      \"D\\u00ebn.\",\n      \"M\\u00ebt.\",\n      \"Don.\",\n      \"Fre.\",\n      \"Sam.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan.\",\n      \"Feb.\",\n      \"M\\u00e4e.\",\n      \"Abr.\",\n      \"Mee\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug.\",\n      \"Sep.\",\n      \"Okt.\",\n      \"Nov.\",\n      \"Dez.\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lb\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lg-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sabbiiti\",\n      \"Balaza\",\n      \"Lwakubiri\",\n      \"Lwakusatu\",\n      \"Lwakuna\",\n      \"Lwakutaano\",\n      \"Lwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Janwaliyo\",\n      \"Febwaliyo\",\n      \"Marisi\",\n      \"Apuli\",\n      \"Maayi\",\n      \"Juuni\",\n      \"Julaayi\",\n      \"Agusito\",\n      \"Sebuttemba\",\n      \"Okitobba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Sab\",\n      \"Bal\",\n      \"Lw2\",\n      \"Lw3\",\n      \"Lw4\",\n      \"Lw5\",\n      \"Lw6\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apu\",\n      \"Maa\",\n      \"Juu\",\n      \"Jul\",\n      \"Agu\",\n      \"Seb\",\n      \"Oki\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lg-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sabbiiti\",\n      \"Balaza\",\n      \"Lwakubiri\",\n      \"Lwakusatu\",\n      \"Lwakuna\",\n      \"Lwakutaano\",\n      \"Lwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Janwaliyo\",\n      \"Febwaliyo\",\n      \"Marisi\",\n      \"Apuli\",\n      \"Maayi\",\n      \"Juuni\",\n      \"Julaayi\",\n      \"Agusito\",\n      \"Sebuttemba\",\n      \"Okitobba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Sab\",\n      \"Bal\",\n      \"Lw2\",\n      \"Lw3\",\n      \"Lw4\",\n      \"Lw5\",\n      \"Lw6\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apu\",\n      \"Maa\",\n      \"Juu\",\n      \"Jul\",\n      \"Agu\",\n      \"Seb\",\n      \"Oki\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lkt-us.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"A\\u014bp\\u00e9tuwak\\u021fa\\u014b\",\n      \"A\\u014bp\\u00e9tuwa\\u014b\\u017ei\",\n      \"A\\u014bp\\u00e9tunu\\u014bpa\",\n      \"A\\u014bp\\u00e9tuyamni\",\n      \"A\\u014bp\\u00e9tutopa\",\n      \"A\\u014bp\\u00e9tuzapta\\u014b\",\n      \"Ow\\u00e1\\u014bgyu\\u017ea\\u017eapi\"\n    ],\n    \"MONTH\": [\n      \"Wi\\u00f3the\\u021fika W\\u00ed\",\n      \"Thiy\\u00f3\\u021feyu\\u014bka W\\u00ed\",\n      \"I\\u0161t\\u00e1wi\\u010dhayaza\\u014b W\\u00ed\",\n      \"P\\u021fe\\u017e\\u00edt\\u021fo W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pet\\u021fo W\\u00ed\",\n      \"W\\u00edpazuk\\u021fa-wa\\u0161t\\u00e9 W\\u00ed\",\n      \"\\u010cha\\u014bp\\u021f\\u00e1sapa W\\u00ed\",\n      \"Was\\u00fat\\u021fu\\u014b W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe\\u01e7i W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe-kasn\\u00e1 W\\u00ed\",\n      \"Wan\\u00edyetu W\\u00ed\",\n      \"T\\u021fah\\u00e9kap\\u0161u\\u014b W\\u00ed\"\n    ],\n    \"SHORTDAY\": [\n      \"A\\u014bp\\u00e9tuwak\\u021fa\\u014b\",\n      \"A\\u014bp\\u00e9tuwa\\u014b\\u017ei\",\n      \"A\\u014bp\\u00e9tunu\\u014bpa\",\n      \"A\\u014bp\\u00e9tuyamni\",\n      \"A\\u014bp\\u00e9tutopa\",\n      \"A\\u014bp\\u00e9tuzapta\\u014b\",\n      \"Ow\\u00e1\\u014bgyu\\u017ea\\u017eapi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Wi\\u00f3the\\u021fika W\\u00ed\",\n      \"Thiy\\u00f3\\u021feyu\\u014bka W\\u00ed\",\n      \"I\\u0161t\\u00e1wi\\u010dhayaza\\u014b W\\u00ed\",\n      \"P\\u021fe\\u017e\\u00edt\\u021fo W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pet\\u021fo W\\u00ed\",\n      \"W\\u00edpazuk\\u021fa-wa\\u0161t\\u00e9 W\\u00ed\",\n      \"\\u010cha\\u014bp\\u021f\\u00e1sapa W\\u00ed\",\n      \"Was\\u00fat\\u021fu\\u014b W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe\\u01e7i W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe-kasn\\u00e1 W\\u00ed\",\n      \"Wan\\u00edyetu W\\u00ed\",\n      \"T\\u021fah\\u00e9kap\\u0161u\\u014b W\\u00ed\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lkt-us\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lkt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"A\\u014bp\\u00e9tuwak\\u021fa\\u014b\",\n      \"A\\u014bp\\u00e9tuwa\\u014b\\u017ei\",\n      \"A\\u014bp\\u00e9tunu\\u014bpa\",\n      \"A\\u014bp\\u00e9tuyamni\",\n      \"A\\u014bp\\u00e9tutopa\",\n      \"A\\u014bp\\u00e9tuzapta\\u014b\",\n      \"Ow\\u00e1\\u014bgyu\\u017ea\\u017eapi\"\n    ],\n    \"MONTH\": [\n      \"Wi\\u00f3the\\u021fika W\\u00ed\",\n      \"Thiy\\u00f3\\u021feyu\\u014bka W\\u00ed\",\n      \"I\\u0161t\\u00e1wi\\u010dhayaza\\u014b W\\u00ed\",\n      \"P\\u021fe\\u017e\\u00edt\\u021fo W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pet\\u021fo W\\u00ed\",\n      \"W\\u00edpazuk\\u021fa-wa\\u0161t\\u00e9 W\\u00ed\",\n      \"\\u010cha\\u014bp\\u021f\\u00e1sapa W\\u00ed\",\n      \"Was\\u00fat\\u021fu\\u014b W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe\\u01e7i W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe-kasn\\u00e1 W\\u00ed\",\n      \"Wan\\u00edyetu W\\u00ed\",\n      \"T\\u021fah\\u00e9kap\\u0161u\\u014b W\\u00ed\"\n    ],\n    \"SHORTDAY\": [\n      \"A\\u014bp\\u00e9tuwak\\u021fa\\u014b\",\n      \"A\\u014bp\\u00e9tuwa\\u014b\\u017ei\",\n      \"A\\u014bp\\u00e9tunu\\u014bpa\",\n      \"A\\u014bp\\u00e9tuyamni\",\n      \"A\\u014bp\\u00e9tutopa\",\n      \"A\\u014bp\\u00e9tuzapta\\u014b\",\n      \"Ow\\u00e1\\u014bgyu\\u017ea\\u017eapi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Wi\\u00f3the\\u021fika W\\u00ed\",\n      \"Thiy\\u00f3\\u021feyu\\u014bka W\\u00ed\",\n      \"I\\u0161t\\u00e1wi\\u010dhayaza\\u014b W\\u00ed\",\n      \"P\\u021fe\\u017e\\u00edt\\u021fo W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pet\\u021fo W\\u00ed\",\n      \"W\\u00edpazuk\\u021fa-wa\\u0161t\\u00e9 W\\u00ed\",\n      \"\\u010cha\\u014bp\\u021f\\u00e1sapa W\\u00ed\",\n      \"Was\\u00fat\\u021fu\\u014b W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe\\u01e7i W\\u00ed\",\n      \"\\u010cha\\u014bw\\u00e1pe-kasn\\u00e1 W\\u00ed\",\n      \"Wan\\u00edyetu W\\u00ed\",\n      \"T\\u021fah\\u00e9kap\\u0161u\\u014b W\\u00ed\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lkt\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ln-ao.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n      \"mp\\u00f3kwa\"\n    ],\n    \"DAY\": [\n      \"eyenga\",\n      \"mok\\u0254l\\u0254 mwa yambo\",\n      \"mok\\u0254l\\u0254 mwa m\\u00edbal\\u00e9\",\n      \"mok\\u0254l\\u0254 mwa m\\u00eds\\u00e1to\",\n      \"mok\\u0254l\\u0254 ya m\\u00edn\\u00e9i\",\n      \"mok\\u0254l\\u0254 ya m\\u00edt\\u00e1no\",\n      \"mp\\u0254\\u0301s\\u0254\"\n    ],\n    \"MONTH\": [\n      \"s\\u00e1nz\\u00e1 ya yambo\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edbal\\u00e9\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00eds\\u00e1to\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00ednei\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edt\\u00e1no\",\n      \"s\\u00e1nz\\u00e1 ya mot\\u00f3b\\u00e1\",\n      \"s\\u00e1nz\\u00e1 ya nsambo\",\n      \"s\\u00e1nz\\u00e1 ya mwambe\",\n      \"s\\u00e1nz\\u00e1 ya libwa\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u0254\\u030ck\\u0254\\u0301\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u00edbal\\u00e9\"\n    ],\n    \"SHORTDAY\": [\n      \"eye\",\n      \"ybo\",\n      \"mbl\",\n      \"mst\",\n      \"min\",\n      \"mtn\",\n      \"mps\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fbl\",\n      \"msi\",\n      \"apl\",\n      \"mai\",\n      \"yun\",\n      \"yul\",\n      \"agt\",\n      \"stb\",\n      \"\\u0254tb\",\n      \"nvb\",\n      \"dsb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Kz\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ln-ao\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ln-cd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n      \"mp\\u00f3kwa\"\n    ],\n    \"DAY\": [\n      \"eyenga\",\n      \"mok\\u0254l\\u0254 mwa yambo\",\n      \"mok\\u0254l\\u0254 mwa m\\u00edbal\\u00e9\",\n      \"mok\\u0254l\\u0254 mwa m\\u00eds\\u00e1to\",\n      \"mok\\u0254l\\u0254 ya m\\u00edn\\u00e9i\",\n      \"mok\\u0254l\\u0254 ya m\\u00edt\\u00e1no\",\n      \"mp\\u0254\\u0301s\\u0254\"\n    ],\n    \"MONTH\": [\n      \"s\\u00e1nz\\u00e1 ya yambo\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edbal\\u00e9\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00eds\\u00e1to\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00ednei\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edt\\u00e1no\",\n      \"s\\u00e1nz\\u00e1 ya mot\\u00f3b\\u00e1\",\n      \"s\\u00e1nz\\u00e1 ya nsambo\",\n      \"s\\u00e1nz\\u00e1 ya mwambe\",\n      \"s\\u00e1nz\\u00e1 ya libwa\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u0254\\u030ck\\u0254\\u0301\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u00edbal\\u00e9\"\n    ],\n    \"SHORTDAY\": [\n      \"eye\",\n      \"ybo\",\n      \"mbl\",\n      \"mst\",\n      \"min\",\n      \"mtn\",\n      \"mps\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fbl\",\n      \"msi\",\n      \"apl\",\n      \"mai\",\n      \"yun\",\n      \"yul\",\n      \"agt\",\n      \"stb\",\n      \"\\u0254tb\",\n      \"nvb\",\n      \"dsb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ln-cd\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ln-cf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n      \"mp\\u00f3kwa\"\n    ],\n    \"DAY\": [\n      \"eyenga\",\n      \"mok\\u0254l\\u0254 mwa yambo\",\n      \"mok\\u0254l\\u0254 mwa m\\u00edbal\\u00e9\",\n      \"mok\\u0254l\\u0254 mwa m\\u00eds\\u00e1to\",\n      \"mok\\u0254l\\u0254 ya m\\u00edn\\u00e9i\",\n      \"mok\\u0254l\\u0254 ya m\\u00edt\\u00e1no\",\n      \"mp\\u0254\\u0301s\\u0254\"\n    ],\n    \"MONTH\": [\n      \"s\\u00e1nz\\u00e1 ya yambo\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edbal\\u00e9\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00eds\\u00e1to\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00ednei\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edt\\u00e1no\",\n      \"s\\u00e1nz\\u00e1 ya mot\\u00f3b\\u00e1\",\n      \"s\\u00e1nz\\u00e1 ya nsambo\",\n      \"s\\u00e1nz\\u00e1 ya mwambe\",\n      \"s\\u00e1nz\\u00e1 ya libwa\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u0254\\u030ck\\u0254\\u0301\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u00edbal\\u00e9\"\n    ],\n    \"SHORTDAY\": [\n      \"eye\",\n      \"ybo\",\n      \"mbl\",\n      \"mst\",\n      \"min\",\n      \"mtn\",\n      \"mps\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fbl\",\n      \"msi\",\n      \"apl\",\n      \"mai\",\n      \"yun\",\n      \"yul\",\n      \"agt\",\n      \"stb\",\n      \"\\u0254tb\",\n      \"nvb\",\n      \"dsb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ln-cf\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ln-cg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n      \"mp\\u00f3kwa\"\n    ],\n    \"DAY\": [\n      \"eyenga\",\n      \"mok\\u0254l\\u0254 mwa yambo\",\n      \"mok\\u0254l\\u0254 mwa m\\u00edbal\\u00e9\",\n      \"mok\\u0254l\\u0254 mwa m\\u00eds\\u00e1to\",\n      \"mok\\u0254l\\u0254 ya m\\u00edn\\u00e9i\",\n      \"mok\\u0254l\\u0254 ya m\\u00edt\\u00e1no\",\n      \"mp\\u0254\\u0301s\\u0254\"\n    ],\n    \"MONTH\": [\n      \"s\\u00e1nz\\u00e1 ya yambo\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edbal\\u00e9\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00eds\\u00e1to\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00ednei\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edt\\u00e1no\",\n      \"s\\u00e1nz\\u00e1 ya mot\\u00f3b\\u00e1\",\n      \"s\\u00e1nz\\u00e1 ya nsambo\",\n      \"s\\u00e1nz\\u00e1 ya mwambe\",\n      \"s\\u00e1nz\\u00e1 ya libwa\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u0254\\u030ck\\u0254\\u0301\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u00edbal\\u00e9\"\n    ],\n    \"SHORTDAY\": [\n      \"eye\",\n      \"ybo\",\n      \"mbl\",\n      \"mst\",\n      \"min\",\n      \"mtn\",\n      \"mps\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fbl\",\n      \"msi\",\n      \"apl\",\n      \"mai\",\n      \"yun\",\n      \"yul\",\n      \"agt\",\n      \"stb\",\n      \"\\u0254tb\",\n      \"nvb\",\n      \"dsb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ln-cg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ln.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n      \"mp\\u00f3kwa\"\n    ],\n    \"DAY\": [\n      \"eyenga\",\n      \"mok\\u0254l\\u0254 mwa yambo\",\n      \"mok\\u0254l\\u0254 mwa m\\u00edbal\\u00e9\",\n      \"mok\\u0254l\\u0254 mwa m\\u00eds\\u00e1to\",\n      \"mok\\u0254l\\u0254 ya m\\u00edn\\u00e9i\",\n      \"mok\\u0254l\\u0254 ya m\\u00edt\\u00e1no\",\n      \"mp\\u0254\\u0301s\\u0254\"\n    ],\n    \"MONTH\": [\n      \"s\\u00e1nz\\u00e1 ya yambo\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edbal\\u00e9\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00eds\\u00e1to\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00ednei\",\n      \"s\\u00e1nz\\u00e1 ya m\\u00edt\\u00e1no\",\n      \"s\\u00e1nz\\u00e1 ya mot\\u00f3b\\u00e1\",\n      \"s\\u00e1nz\\u00e1 ya nsambo\",\n      \"s\\u00e1nz\\u00e1 ya mwambe\",\n      \"s\\u00e1nz\\u00e1 ya libwa\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u0254\\u030ck\\u0254\\u0301\",\n      \"s\\u00e1nz\\u00e1 ya z\\u00f3mi na m\\u00edbal\\u00e9\"\n    ],\n    \"SHORTDAY\": [\n      \"eye\",\n      \"ybo\",\n      \"mbl\",\n      \"mst\",\n      \"min\",\n      \"mtn\",\n      \"mps\"\n    ],\n    \"SHORTMONTH\": [\n      \"yan\",\n      \"fbl\",\n      \"msi\",\n      \"apl\",\n      \"mai\",\n      \"yun\",\n      \"yul\",\n      \"agt\",\n      \"stb\",\n      \"\\u0254tb\",\n      \"nvb\",\n      \"dsb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ln\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lo-la.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0e81\\u0ec8\\u0ead\\u0e99\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n      \"\\u0eab\\u0ebc\\u0eb1\\u0e87\\u0e97\\u0ec8\\u0ebd\\u0e87\"\n    ],\n    \"DAY\": [\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb2\\u0e97\\u0eb4\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e88\\u0eb1\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb8\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0eaa\\u0eb8\\u0e81\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ec0\\u0eaa\\u0ebb\\u0eb2\"\n    ],\n    \"MONTH\": [\n      \"\\u0ea1\\u0eb1\\u0e87\\u0e81\\u0ead\\u0e99\",\n      \"\\u0e81\\u0eb8\\u0ea1\\u0e9e\\u0eb2\",\n      \"\\u0ea1\\u0eb5\\u0e99\\u0eb2\",\n      \"\\u0ec0\\u0ea1\\u0eaa\\u0eb2\",\n      \"\\u0e9e\\u0eb6\\u0e94\\u0eaa\\u0eb0\\u0e9e\\u0eb2\",\n      \"\\u0ea1\\u0eb4\\u0e96\\u0eb8\\u0e99\\u0eb2\",\n      \"\\u0e81\\u0ecd\\u0ea5\\u0eb0\\u0e81\\u0ebb\\u0e94\",\n      \"\\u0eaa\\u0eb4\\u0e87\\u0eab\\u0eb2\",\n      \"\\u0e81\\u0eb1\\u0e99\\u0e8d\\u0eb2\",\n      \"\\u0e95\\u0eb8\\u0ea5\\u0eb2\",\n      \"\\u0e9e\\u0eb0\\u0e88\\u0eb4\\u0e81\",\n      \"\\u0e97\\u0eb1\\u0e99\\u0ea7\\u0eb2\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb2\\u0e97\\u0eb4\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e88\\u0eb1\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb8\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0eaa\\u0eb8\\u0e81\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ec0\\u0eaa\\u0ebb\\u0eb2\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0ea1.\\u0e81.\",\n      \"\\u0e81.\\u0e9e.\",\n      \"\\u0ea1.\\u0e99.\",\n      \"\\u0ea1.\\u0eaa.\",\n      \"\\u0e9e.\\u0e9e.\",\n      \"\\u0ea1\\u0eb4.\\u0e96.\",\n      \"\\u0e81.\\u0ea5.\",\n      \"\\u0eaa.\\u0eab.\",\n      \"\\u0e81.\\u0e8d.\",\n      \"\\u0e95.\\u0ea5.\",\n      \"\\u0e9e.\\u0e88.\",\n      \"\\u0e97.\\u0ea7.\"\n    ],\n    \"fullDate\": \"EEEE \\u0e97\\u0eb5 d MMMM G y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/y H:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ad\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lo-la\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0e81\\u0ec8\\u0ead\\u0e99\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n      \"\\u0eab\\u0ebc\\u0eb1\\u0e87\\u0e97\\u0ec8\\u0ebd\\u0e87\"\n    ],\n    \"DAY\": [\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb2\\u0e97\\u0eb4\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e88\\u0eb1\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb8\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0eaa\\u0eb8\\u0e81\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ec0\\u0eaa\\u0ebb\\u0eb2\"\n    ],\n    \"MONTH\": [\n      \"\\u0ea1\\u0eb1\\u0e87\\u0e81\\u0ead\\u0e99\",\n      \"\\u0e81\\u0eb8\\u0ea1\\u0e9e\\u0eb2\",\n      \"\\u0ea1\\u0eb5\\u0e99\\u0eb2\",\n      \"\\u0ec0\\u0ea1\\u0eaa\\u0eb2\",\n      \"\\u0e9e\\u0eb6\\u0e94\\u0eaa\\u0eb0\\u0e9e\\u0eb2\",\n      \"\\u0ea1\\u0eb4\\u0e96\\u0eb8\\u0e99\\u0eb2\",\n      \"\\u0e81\\u0ecd\\u0ea5\\u0eb0\\u0e81\\u0ebb\\u0e94\",\n      \"\\u0eaa\\u0eb4\\u0e87\\u0eab\\u0eb2\",\n      \"\\u0e81\\u0eb1\\u0e99\\u0e8d\\u0eb2\",\n      \"\\u0e95\\u0eb8\\u0ea5\\u0eb2\",\n      \"\\u0e9e\\u0eb0\\u0e88\\u0eb4\\u0e81\",\n      \"\\u0e97\\u0eb1\\u0e99\\u0ea7\\u0eb2\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb2\\u0e97\\u0eb4\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e88\\u0eb1\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb8\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0eaa\\u0eb8\\u0e81\",\n      \"\\u0ea7\\u0eb1\\u0e99\\u0ec0\\u0eaa\\u0ebb\\u0eb2\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0ea1.\\u0e81.\",\n      \"\\u0e81.\\u0e9e.\",\n      \"\\u0ea1.\\u0e99.\",\n      \"\\u0ea1.\\u0eaa.\",\n      \"\\u0e9e.\\u0e9e.\",\n      \"\\u0ea1\\u0eb4.\\u0e96.\",\n      \"\\u0e81.\\u0ea5.\",\n      \"\\u0eaa.\\u0eab.\",\n      \"\\u0e81.\\u0e8d.\",\n      \"\\u0e95.\\u0ea5.\",\n      \"\\u0e9e.\\u0e88.\",\n      \"\\u0e97.\\u0ea7.\"\n    ],\n    \"fullDate\": \"EEEE \\u0e97\\u0eb5 d MMMM G y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"d/M/y H:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ad\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lo\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lt-lt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"prie\\u0161piet\",\n      \"popiet\"\n    ],\n    \"DAY\": [\n      \"sekmadienis\",\n      \"pirmadienis\",\n      \"antradienis\",\n      \"tre\\u010diadienis\",\n      \"ketvirtadienis\",\n      \"penktadienis\",\n      \"\\u0161e\\u0161tadienis\"\n    ],\n    \"MONTH\": [\n      \"sausio\",\n      \"vasario\",\n      \"kovo\",\n      \"baland\\u017eio\",\n      \"gegu\\u017e\\u0117s\",\n      \"bir\\u017eelio\",\n      \"liepos\",\n      \"rugpj\\u016b\\u010dio\",\n      \"rugs\\u0117jo\",\n      \"spalio\",\n      \"lapkri\\u010dio\",\n      \"gruod\\u017eio\"\n    ],\n    \"SHORTDAY\": [\n      \"sk\",\n      \"pr\",\n      \"an\",\n      \"tr\",\n      \"kt\",\n      \"pn\",\n      \"\\u0161t\"\n    ],\n    \"SHORTMONTH\": [\n      \"saus.\",\n      \"vas.\",\n      \"kov.\",\n      \"bal.\",\n      \"geg.\",\n      \"bir\\u017e.\",\n      \"liep.\",\n      \"rugp.\",\n      \"rugs.\",\n      \"spal.\",\n      \"lapkr.\",\n      \"gruod.\"\n    ],\n    \"fullDate\": \"y 'm'. MMMM d 'd'., EEEE\",\n    \"longDate\": \"y 'm'. MMMM d 'd'.\",\n    \"medium\": \"y-MM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Lt\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lt-lt\",\n  \"pluralCat\": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.f != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"prie\\u0161piet\",\n      \"popiet\"\n    ],\n    \"DAY\": [\n      \"sekmadienis\",\n      \"pirmadienis\",\n      \"antradienis\",\n      \"tre\\u010diadienis\",\n      \"ketvirtadienis\",\n      \"penktadienis\",\n      \"\\u0161e\\u0161tadienis\"\n    ],\n    \"MONTH\": [\n      \"sausio\",\n      \"vasario\",\n      \"kovo\",\n      \"baland\\u017eio\",\n      \"gegu\\u017e\\u0117s\",\n      \"bir\\u017eelio\",\n      \"liepos\",\n      \"rugpj\\u016b\\u010dio\",\n      \"rugs\\u0117jo\",\n      \"spalio\",\n      \"lapkri\\u010dio\",\n      \"gruod\\u017eio\"\n    ],\n    \"SHORTDAY\": [\n      \"sk\",\n      \"pr\",\n      \"an\",\n      \"tr\",\n      \"kt\",\n      \"pn\",\n      \"\\u0161t\"\n    ],\n    \"SHORTMONTH\": [\n      \"saus.\",\n      \"vas.\",\n      \"kov.\",\n      \"bal.\",\n      \"geg.\",\n      \"bir\\u017e.\",\n      \"liep.\",\n      \"rugp.\",\n      \"rugs.\",\n      \"spal.\",\n      \"lapkr.\",\n      \"gruod.\"\n    ],\n    \"fullDate\": \"y 'm'. MMMM d 'd'., EEEE\",\n    \"longDate\": \"y 'm'. MMMM d 'd'.\",\n    \"medium\": \"y-MM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Lt\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lt\",\n  \"pluralCat\": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.f != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lu-cd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Dinda\",\n      \"Dilolo\"\n    ],\n    \"DAY\": [\n      \"Lumingu\",\n      \"Nkodya\",\n      \"Nd\\u00e0ay\\u00e0\",\n      \"Ndang\\u00f9\",\n      \"Nj\\u00f2wa\",\n      \"Ng\\u00f2vya\",\n      \"Lubingu\"\n    ],\n    \"MONTH\": [\n      \"Ciongo\",\n      \"L\\u00f9ishi\",\n      \"Lus\\u00f2lo\",\n      \"M\\u00f9uy\\u00e0\",\n      \"Lum\\u00f9ng\\u00f9l\\u00f9\",\n      \"Lufuimi\",\n      \"Kab\\u00e0l\\u00e0sh\\u00ecp\\u00f9\",\n      \"L\\u00f9sh\\u00eck\\u00e0\",\n      \"Lutongolo\",\n      \"Lung\\u00f9di\",\n      \"Kasw\\u00e8k\\u00e8s\\u00e8\",\n      \"Cisw\\u00e0\"\n    ],\n    \"SHORTDAY\": [\n      \"Lum\",\n      \"Nko\",\n      \"Ndy\",\n      \"Ndg\",\n      \"Njw\",\n      \"Ngv\",\n      \"Lub\"\n    ],\n    \"SHORTMONTH\": [\n      \"Cio\",\n      \"Lui\",\n      \"Lus\",\n      \"Muu\",\n      \"Lum\",\n      \"Luf\",\n      \"Kab\",\n      \"Lush\",\n      \"Lut\",\n      \"Lun\",\n      \"Kas\",\n      \"Cis\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lu-cd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Dinda\",\n      \"Dilolo\"\n    ],\n    \"DAY\": [\n      \"Lumingu\",\n      \"Nkodya\",\n      \"Nd\\u00e0ay\\u00e0\",\n      \"Ndang\\u00f9\",\n      \"Nj\\u00f2wa\",\n      \"Ng\\u00f2vya\",\n      \"Lubingu\"\n    ],\n    \"MONTH\": [\n      \"Ciongo\",\n      \"L\\u00f9ishi\",\n      \"Lus\\u00f2lo\",\n      \"M\\u00f9uy\\u00e0\",\n      \"Lum\\u00f9ng\\u00f9l\\u00f9\",\n      \"Lufuimi\",\n      \"Kab\\u00e0l\\u00e0sh\\u00ecp\\u00f9\",\n      \"L\\u00f9sh\\u00eck\\u00e0\",\n      \"Lutongolo\",\n      \"Lung\\u00f9di\",\n      \"Kasw\\u00e8k\\u00e8s\\u00e8\",\n      \"Cisw\\u00e0\"\n    ],\n    \"SHORTDAY\": [\n      \"Lum\",\n      \"Nko\",\n      \"Ndy\",\n      \"Ndg\",\n      \"Njw\",\n      \"Ngv\",\n      \"Lub\"\n    ],\n    \"SHORTMONTH\": [\n      \"Cio\",\n      \"Lui\",\n      \"Lus\",\n      \"Muu\",\n      \"Lum\",\n      \"Luf\",\n      \"Kab\",\n      \"Lush\",\n      \"Lut\",\n      \"Lun\",\n      \"Kas\",\n      \"Cis\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"lu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_luo-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"OD\",\n      \"OT\"\n    ],\n    \"DAY\": [\n      \"Jumapil\",\n      \"Wuok Tich\",\n      \"Tich Ariyo\",\n      \"Tich Adek\",\n      \"Tich Ang\\u2019wen\",\n      \"Tich Abich\",\n      \"Ngeso\"\n    ],\n    \"MONTH\": [\n      \"Dwe mar Achiel\",\n      \"Dwe mar Ariyo\",\n      \"Dwe mar Adek\",\n      \"Dwe mar Ang\\u2019wen\",\n      \"Dwe mar Abich\",\n      \"Dwe mar Auchiel\",\n      \"Dwe mar Abiriyo\",\n      \"Dwe mar Aboro\",\n      \"Dwe mar Ochiko\",\n      \"Dwe mar Apar\",\n      \"Dwe mar gi achiel\",\n      \"Dwe mar Apar gi ariyo\"\n    ],\n    \"SHORTDAY\": [\n      \"JMP\",\n      \"WUT\",\n      \"TAR\",\n      \"TAD\",\n      \"TAN\",\n      \"TAB\",\n      \"NGS\"\n    ],\n    \"SHORTMONTH\": [\n      \"DAC\",\n      \"DAR\",\n      \"DAD\",\n      \"DAN\",\n      \"DAH\",\n      \"DAU\",\n      \"DAO\",\n      \"DAB\",\n      \"DOC\",\n      \"DAP\",\n      \"DGI\",\n      \"DAG\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"luo-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_luo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"OD\",\n      \"OT\"\n    ],\n    \"DAY\": [\n      \"Jumapil\",\n      \"Wuok Tich\",\n      \"Tich Ariyo\",\n      \"Tich Adek\",\n      \"Tich Ang\\u2019wen\",\n      \"Tich Abich\",\n      \"Ngeso\"\n    ],\n    \"MONTH\": [\n      \"Dwe mar Achiel\",\n      \"Dwe mar Ariyo\",\n      \"Dwe mar Adek\",\n      \"Dwe mar Ang\\u2019wen\",\n      \"Dwe mar Abich\",\n      \"Dwe mar Auchiel\",\n      \"Dwe mar Abiriyo\",\n      \"Dwe mar Aboro\",\n      \"Dwe mar Ochiko\",\n      \"Dwe mar Apar\",\n      \"Dwe mar gi achiel\",\n      \"Dwe mar Apar gi ariyo\"\n    ],\n    \"SHORTDAY\": [\n      \"JMP\",\n      \"WUT\",\n      \"TAR\",\n      \"TAD\",\n      \"TAN\",\n      \"TAB\",\n      \"NGS\"\n    ],\n    \"SHORTMONTH\": [\n      \"DAC\",\n      \"DAR\",\n      \"DAD\",\n      \"DAN\",\n      \"DAH\",\n      \"DAU\",\n      \"DAO\",\n      \"DAB\",\n      \"DOC\",\n      \"DAP\",\n      \"DGI\",\n      \"DAG\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"luo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_luy-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Jumapiri\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Murwa wa Kanne\",\n      \"Murwa wa Katano\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"J2\",\n      \"J3\",\n      \"J4\",\n      \"J5\",\n      \"Al\",\n      \"Ij\",\n      \"J1\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\\u00a0\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"luy-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_luy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Jumapiri\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Murwa wa Kanne\",\n      \"Murwa wa Katano\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"J2\",\n      \"J3\",\n      \"J4\",\n      \"J5\",\n      \"Al\",\n      \"Ij\",\n      \"J1\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\\u00a0\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"luy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lv-lv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"priek\\u0161pusdien\\u0101\",\n      \"p\\u0113cpusdien\\u0101\"\n    ],\n    \"DAY\": [\n      \"sv\\u0113tdiena\",\n      \"pirmdiena\",\n      \"otrdiena\",\n      \"tre\\u0161diena\",\n      \"ceturtdiena\",\n      \"piektdiena\",\n      \"sestdiena\"\n    ],\n    \"MONTH\": [\n      \"janv\\u0101ris\",\n      \"febru\\u0101ris\",\n      \"marts\",\n      \"apr\\u012blis\",\n      \"maijs\",\n      \"j\\u016bnijs\",\n      \"j\\u016blijs\",\n      \"augusts\",\n      \"septembris\",\n      \"oktobris\",\n      \"novembris\",\n      \"decembris\"\n    ],\n    \"SHORTDAY\": [\n      \"Sv\",\n      \"Pr\",\n      \"Ot\",\n      \"Tr\",\n      \"Ce\",\n      \"Pk\",\n      \"Se\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"febr.\",\n      \"marts\",\n      \"apr.\",\n      \"maijs\",\n      \"j\\u016bn.\",\n      \"j\\u016bl.\",\n      \"aug.\",\n      \"sept.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, y. 'gada' d. MMMM\",\n    \"longDate\": \"y. 'gada' d. MMMM\",\n    \"medium\": \"y. 'gada' d. MMM HH:mm:ss\",\n    \"mediumDate\": \"y. 'gada' d. MMM\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lv-lv\",\n  \"pluralCat\": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) {    return PLURAL_CATEGORY.ZERO;  }  if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_lv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"priek\\u0161pusdien\\u0101\",\n      \"p\\u0113cpusdien\\u0101\"\n    ],\n    \"DAY\": [\n      \"sv\\u0113tdiena\",\n      \"pirmdiena\",\n      \"otrdiena\",\n      \"tre\\u0161diena\",\n      \"ceturtdiena\",\n      \"piektdiena\",\n      \"sestdiena\"\n    ],\n    \"MONTH\": [\n      \"janv\\u0101ris\",\n      \"febru\\u0101ris\",\n      \"marts\",\n      \"apr\\u012blis\",\n      \"maijs\",\n      \"j\\u016bnijs\",\n      \"j\\u016blijs\",\n      \"augusts\",\n      \"septembris\",\n      \"oktobris\",\n      \"novembris\",\n      \"decembris\"\n    ],\n    \"SHORTDAY\": [\n      \"Sv\",\n      \"Pr\",\n      \"Ot\",\n      \"Tr\",\n      \"Ce\",\n      \"Pk\",\n      \"Se\"\n    ],\n    \"SHORTMONTH\": [\n      \"janv.\",\n      \"febr.\",\n      \"marts\",\n      \"apr.\",\n      \"maijs\",\n      \"j\\u016bn.\",\n      \"j\\u016bl.\",\n      \"aug.\",\n      \"sept.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, y. 'gada' d. MMMM\",\n    \"longDate\": \"y. 'gada' d. MMMM\",\n    \"medium\": \"y. 'gada' d. MMM HH:mm:ss\",\n    \"mediumDate\": \"y. 'gada' d. MMM\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 0,\n        \"lgSize\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"lv\",\n  \"pluralCat\": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) {    return PLURAL_CATEGORY.ZERO;  }  if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mas-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0190nkak\\u025bny\\u00e1\",\n      \"\\u0190nd\\u00e1m\\u00e2\"\n    ],\n    \"DAY\": [\n      \"Jumap\\u00edl\\u00ed\",\n      \"Jumat\\u00e1tu\",\n      \"Jumane\",\n      \"Jumat\\u00e1n\\u0254\",\n      \"Ala\\u00e1misi\",\n      \"Jum\\u00e1a\",\n      \"Jumam\\u00f3si\"\n    ],\n    \"MONTH\": [\n      \"Oladal\\u0289\\u0301\",\n      \"Ar\\u00e1t\",\n      \"\\u0186\\u025bn\\u0268\\u0301\\u0254\\u0268\\u014b\\u0254k\",\n      \"Olodoy\\u00ed\\u00f3r\\u00ed\\u00ea ink\\u00f3k\\u00fa\\u00e2\",\n      \"Oloil\\u00e9p\\u016bny\\u012b\\u0113 ink\\u00f3k\\u00fa\\u00e2\",\n      \"K\\u00faj\\u00fa\\u0254r\\u0254k\",\n      \"M\\u00f3rus\\u00e1sin\",\n      \"\\u0186l\\u0254\\u0301\\u0268\\u0301b\\u0254\\u0301r\\u00e1r\\u025b\",\n      \"K\\u00fash\\u00een\",\n      \"Olg\\u00edsan\",\n      \"P\\u0289sh\\u0289\\u0301ka\",\n      \"Nt\\u0289\\u0301\\u014b\\u0289\\u0301s\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Dal\",\n      \"Ar\\u00e1\",\n      \"\\u0186\\u025bn\",\n      \"Doy\",\n      \"L\\u00e9p\",\n      \"Rok\",\n      \"S\\u00e1s\",\n      \"B\\u0254\\u0301r\",\n      \"K\\u00fas\",\n      \"G\\u00eds\",\n      \"Sh\\u0289\\u0301\",\n      \"Nt\\u0289\\u0301\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mas-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mas-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0190nkak\\u025bny\\u00e1\",\n      \"\\u0190nd\\u00e1m\\u00e2\"\n    ],\n    \"DAY\": [\n      \"Jumap\\u00edl\\u00ed\",\n      \"Jumat\\u00e1tu\",\n      \"Jumane\",\n      \"Jumat\\u00e1n\\u0254\",\n      \"Ala\\u00e1misi\",\n      \"Jum\\u00e1a\",\n      \"Jumam\\u00f3si\"\n    ],\n    \"MONTH\": [\n      \"Oladal\\u0289\\u0301\",\n      \"Ar\\u00e1t\",\n      \"\\u0186\\u025bn\\u0268\\u0301\\u0254\\u0268\\u014b\\u0254k\",\n      \"Olodoy\\u00ed\\u00f3r\\u00ed\\u00ea ink\\u00f3k\\u00fa\\u00e2\",\n      \"Oloil\\u00e9p\\u016bny\\u012b\\u0113 ink\\u00f3k\\u00fa\\u00e2\",\n      \"K\\u00faj\\u00fa\\u0254r\\u0254k\",\n      \"M\\u00f3rus\\u00e1sin\",\n      \"\\u0186l\\u0254\\u0301\\u0268\\u0301b\\u0254\\u0301r\\u00e1r\\u025b\",\n      \"K\\u00fash\\u00een\",\n      \"Olg\\u00edsan\",\n      \"P\\u0289sh\\u0289\\u0301ka\",\n      \"Nt\\u0289\\u0301\\u014b\\u0289\\u0301s\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Dal\",\n      \"Ar\\u00e1\",\n      \"\\u0186\\u025bn\",\n      \"Doy\",\n      \"L\\u00e9p\",\n      \"Rok\",\n      \"S\\u00e1s\",\n      \"B\\u0254\\u0301r\",\n      \"K\\u00fas\",\n      \"G\\u00eds\",\n      \"Sh\\u0289\\u0301\",\n      \"Nt\\u0289\\u0301\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mas-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mas.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0190nkak\\u025bny\\u00e1\",\n      \"\\u0190nd\\u00e1m\\u00e2\"\n    ],\n    \"DAY\": [\n      \"Jumap\\u00edl\\u00ed\",\n      \"Jumat\\u00e1tu\",\n      \"Jumane\",\n      \"Jumat\\u00e1n\\u0254\",\n      \"Ala\\u00e1misi\",\n      \"Jum\\u00e1a\",\n      \"Jumam\\u00f3si\"\n    ],\n    \"MONTH\": [\n      \"Oladal\\u0289\\u0301\",\n      \"Ar\\u00e1t\",\n      \"\\u0186\\u025bn\\u0268\\u0301\\u0254\\u0268\\u014b\\u0254k\",\n      \"Olodoy\\u00ed\\u00f3r\\u00ed\\u00ea ink\\u00f3k\\u00fa\\u00e2\",\n      \"Oloil\\u00e9p\\u016bny\\u012b\\u0113 ink\\u00f3k\\u00fa\\u00e2\",\n      \"K\\u00faj\\u00fa\\u0254r\\u0254k\",\n      \"M\\u00f3rus\\u00e1sin\",\n      \"\\u0186l\\u0254\\u0301\\u0268\\u0301b\\u0254\\u0301r\\u00e1r\\u025b\",\n      \"K\\u00fash\\u00een\",\n      \"Olg\\u00edsan\",\n      \"P\\u0289sh\\u0289\\u0301ka\",\n      \"Nt\\u0289\\u0301\\u014b\\u0289\\u0301s\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Dal\",\n      \"Ar\\u00e1\",\n      \"\\u0186\\u025bn\",\n      \"Doy\",\n      \"L\\u00e9p\",\n      \"Rok\",\n      \"S\\u00e1s\",\n      \"B\\u0254\\u0301r\",\n      \"K\\u00fas\",\n      \"G\\u00eds\",\n      \"Sh\\u0289\\u0301\",\n      \"Nt\\u0289\\u0301\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mas\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mer-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"R\\u0168\",\n      \"\\u0168G\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Muramuko\",\n      \"Wairi\",\n      \"Wethatu\",\n      \"Wena\",\n      \"Wetano\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januar\\u0129\",\n      \"Feburuar\\u0129\",\n      \"Machi\",\n      \"\\u0128pur\\u0169\",\n      \"M\\u0129\\u0129\",\n      \"Njuni\",\n      \"Njura\\u0129\",\n      \"Agasti\",\n      \"Septemba\",\n      \"Okt\\u0169ba\",\n      \"Novemba\",\n      \"Dicemba\"\n    ],\n    \"SHORTDAY\": [\n      \"KIU\",\n      \"MRA\",\n      \"WAI\",\n      \"WET\",\n      \"WEN\",\n      \"WTN\",\n      \"JUM\"\n    ],\n    \"SHORTMONTH\": [\n      \"JAN\",\n      \"FEB\",\n      \"MAC\",\n      \"\\u0128PU\",\n      \"M\\u0128\\u0128\",\n      \"NJU\",\n      \"NJR\",\n      \"AGA\",\n      \"SPT\",\n      \"OKT\",\n      \"NOV\",\n      \"DEC\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mer-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mer.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"R\\u0168\",\n      \"\\u0168G\"\n    ],\n    \"DAY\": [\n      \"Kiumia\",\n      \"Muramuko\",\n      \"Wairi\",\n      \"Wethatu\",\n      \"Wena\",\n      \"Wetano\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januar\\u0129\",\n      \"Feburuar\\u0129\",\n      \"Machi\",\n      \"\\u0128pur\\u0169\",\n      \"M\\u0129\\u0129\",\n      \"Njuni\",\n      \"Njura\\u0129\",\n      \"Agasti\",\n      \"Septemba\",\n      \"Okt\\u0169ba\",\n      \"Novemba\",\n      \"Dicemba\"\n    ],\n    \"SHORTDAY\": [\n      \"KIU\",\n      \"MRA\",\n      \"WAI\",\n      \"WET\",\n      \"WEN\",\n      \"WTN\",\n      \"JUM\"\n    ],\n    \"SHORTMONTH\": [\n      \"JAN\",\n      \"FEB\",\n      \"MAC\",\n      \"\\u0128PU\",\n      \"M\\u0128\\u0128\",\n      \"NJU\",\n      \"NJR\",\n      \"AGA\",\n      \"SPT\",\n      \"OKT\",\n      \"NOV\",\n      \"DEC\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mer\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mfe-mu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimans\",\n      \"lindi\",\n      \"mardi\",\n      \"merkredi\",\n      \"zedi\",\n      \"vandredi\",\n      \"samdi\"\n    ],\n    \"MONTH\": [\n      \"zanvie\",\n      \"fevriye\",\n      \"mars\",\n      \"avril\",\n      \"me\",\n      \"zin\",\n      \"zilye\",\n      \"out\",\n      \"septam\",\n      \"oktob\",\n      \"novam\",\n      \"desam\"\n    ],\n    \"SHORTDAY\": [\n      \"dim\",\n      \"lin\",\n      \"mar\",\n      \"mer\",\n      \"ze\",\n      \"van\",\n      \"sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"fev\",\n      \"mar\",\n      \"avr\",\n      \"me\",\n      \"zin\",\n      \"zil\",\n      \"out\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MURs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mfe-mu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mfe.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"dimans\",\n      \"lindi\",\n      \"mardi\",\n      \"merkredi\",\n      \"zedi\",\n      \"vandredi\",\n      \"samdi\"\n    ],\n    \"MONTH\": [\n      \"zanvie\",\n      \"fevriye\",\n      \"mars\",\n      \"avril\",\n      \"me\",\n      \"zin\",\n      \"zilye\",\n      \"out\",\n      \"septam\",\n      \"oktob\",\n      \"novam\",\n      \"desam\"\n    ],\n    \"SHORTDAY\": [\n      \"dim\",\n      \"lin\",\n      \"mar\",\n      \"mer\",\n      \"ze\",\n      \"van\",\n      \"sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"zan\",\n      \"fev\",\n      \"mar\",\n      \"avr\",\n      \"me\",\n      \"zin\",\n      \"zil\",\n      \"out\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MURs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mfe\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mg-mg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Alahady\",\n      \"Alatsinainy\",\n      \"Talata\",\n      \"Alarobia\",\n      \"Alakamisy\",\n      \"Zoma\",\n      \"Asabotsy\"\n    ],\n    \"MONTH\": [\n      \"Janoary\",\n      \"Febroary\",\n      \"Martsa\",\n      \"Aprily\",\n      \"Mey\",\n      \"Jona\",\n      \"Jolay\",\n      \"Aogositra\",\n      \"Septambra\",\n      \"Oktobra\",\n      \"Novambra\",\n      \"Desambra\"\n    ],\n    \"SHORTDAY\": [\n      \"Alah\",\n      \"Alats\",\n      \"Tal\",\n      \"Alar\",\n      \"Alak\",\n      \"Zom\",\n      \"Asab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mey\",\n      \"Jon\",\n      \"Jol\",\n      \"Aog\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ar\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mg-mg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Alahady\",\n      \"Alatsinainy\",\n      \"Talata\",\n      \"Alarobia\",\n      \"Alakamisy\",\n      \"Zoma\",\n      \"Asabotsy\"\n    ],\n    \"MONTH\": [\n      \"Janoary\",\n      \"Febroary\",\n      \"Martsa\",\n      \"Aprily\",\n      \"Mey\",\n      \"Jona\",\n      \"Jolay\",\n      \"Aogositra\",\n      \"Septambra\",\n      \"Oktobra\",\n      \"Novambra\",\n      \"Desambra\"\n    ],\n    \"SHORTDAY\": [\n      \"Alah\",\n      \"Alats\",\n      \"Tal\",\n      \"Alar\",\n      \"Alak\",\n      \"Zom\",\n      \"Asab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mey\",\n      \"Jon\",\n      \"Jol\",\n      \"Aog\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ar\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mgh-mz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"wichishu\",\n      \"mchochil\\u2019l\"\n    ],\n    \"DAY\": [\n      \"Sabato\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Arahamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mweri wo kwanza\",\n      \"Mweri wo unayeli\",\n      \"Mweri wo uneraru\",\n      \"Mweri wo unecheshe\",\n      \"Mweri wo unethanu\",\n      \"Mweri wo thanu na mocha\",\n      \"Mweri wo saba\",\n      \"Mweri wo nane\",\n      \"Mweri wo tisa\",\n      \"Mweri wo kumi\",\n      \"Mweri wo kumi na moja\",\n      \"Mweri wo kumi na yel\\u2019li\"\n    ],\n    \"SHORTDAY\": [\n      \"Sab\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Ara\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kwa\",\n      \"Una\",\n      \"Rar\",\n      \"Che\",\n      \"Tha\",\n      \"Moc\",\n      \"Sab\",\n      \"Nan\",\n      \"Tis\",\n      \"Kum\",\n      \"Moj\",\n      \"Yel\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MTn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mgh-mz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mgh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"wichishu\",\n      \"mchochil\\u2019l\"\n    ],\n    \"DAY\": [\n      \"Sabato\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Arahamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mweri wo kwanza\",\n      \"Mweri wo unayeli\",\n      \"Mweri wo uneraru\",\n      \"Mweri wo unecheshe\",\n      \"Mweri wo unethanu\",\n      \"Mweri wo thanu na mocha\",\n      \"Mweri wo saba\",\n      \"Mweri wo nane\",\n      \"Mweri wo tisa\",\n      \"Mweri wo kumi\",\n      \"Mweri wo kumi na moja\",\n      \"Mweri wo kumi na yel\\u2019li\"\n    ],\n    \"SHORTDAY\": [\n      \"Sab\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Ara\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kwa\",\n      \"Una\",\n      \"Rar\",\n      \"Che\",\n      \"Tha\",\n      \"Moc\",\n      \"Sab\",\n      \"Nan\",\n      \"Tis\",\n      \"Kum\",\n      \"Moj\",\n      \"Yel\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MTn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mgh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mgo-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Aneg 1\",\n      \"Aneg 2\",\n      \"Aneg 3\",\n      \"Aneg 4\",\n      \"Aneg 5\",\n      \"Aneg 6\",\n      \"Aneg 7\"\n    ],\n    \"MONTH\": [\n      \"im\\u0259g mbegtug\",\n      \"imeg \\u00e0b\\u00f9b\\u00ec\",\n      \"imeg mb\\u0259\\u014bchubi\",\n      \"im\\u0259g ngw\\u0259\\u0300t\",\n      \"im\\u0259g fog\",\n      \"im\\u0259g ichiib\\u0254d\",\n      \"im\\u0259g \\u00e0d\\u00f9mb\\u0259\\u0300\\u014b\",\n      \"im\\u0259g ichika\",\n      \"im\\u0259g kud\",\n      \"im\\u0259g t\\u00e8si\\u02bce\",\n      \"im\\u0259g z\\u00f2\",\n      \"im\\u0259g krizmed\"\n    ],\n    \"SHORTDAY\": [\n      \"Aneg 1\",\n      \"Aneg 2\",\n      \"Aneg 3\",\n      \"Aneg 4\",\n      \"Aneg 5\",\n      \"Aneg 6\",\n      \"Aneg 7\"\n    ],\n    \"SHORTMONTH\": [\n      \"mbegtug\",\n      \"imeg \\u00e0b\\u00f9b\\u00ec\",\n      \"imeg mb\\u0259\\u014bchubi\",\n      \"im\\u0259g ngw\\u0259\\u0300t\",\n      \"im\\u0259g fog\",\n      \"im\\u0259g ichiib\\u0254d\",\n      \"im\\u0259g \\u00e0d\\u00f9mb\\u0259\\u0300\\u014b\",\n      \"im\\u0259g ichika\",\n      \"im\\u0259g kud\",\n      \"im\\u0259g t\\u00e8si\\u02bce\",\n      \"im\\u0259g z\\u00f2\",\n      \"im\\u0259g krizmed\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mgo-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mgo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Aneg 1\",\n      \"Aneg 2\",\n      \"Aneg 3\",\n      \"Aneg 4\",\n      \"Aneg 5\",\n      \"Aneg 6\",\n      \"Aneg 7\"\n    ],\n    \"MONTH\": [\n      \"im\\u0259g mbegtug\",\n      \"imeg \\u00e0b\\u00f9b\\u00ec\",\n      \"imeg mb\\u0259\\u014bchubi\",\n      \"im\\u0259g ngw\\u0259\\u0300t\",\n      \"im\\u0259g fog\",\n      \"im\\u0259g ichiib\\u0254d\",\n      \"im\\u0259g \\u00e0d\\u00f9mb\\u0259\\u0300\\u014b\",\n      \"im\\u0259g ichika\",\n      \"im\\u0259g kud\",\n      \"im\\u0259g t\\u00e8si\\u02bce\",\n      \"im\\u0259g z\\u00f2\",\n      \"im\\u0259g krizmed\"\n    ],\n    \"SHORTDAY\": [\n      \"Aneg 1\",\n      \"Aneg 2\",\n      \"Aneg 3\",\n      \"Aneg 4\",\n      \"Aneg 5\",\n      \"Aneg 6\",\n      \"Aneg 7\"\n    ],\n    \"SHORTMONTH\": [\n      \"mbegtug\",\n      \"imeg \\u00e0b\\u00f9b\\u00ec\",\n      \"imeg mb\\u0259\\u014bchubi\",\n      \"im\\u0259g ngw\\u0259\\u0300t\",\n      \"im\\u0259g fog\",\n      \"im\\u0259g ichiib\\u0254d\",\n      \"im\\u0259g \\u00e0d\\u00f9mb\\u0259\\u0300\\u014b\",\n      \"im\\u0259g ichika\",\n      \"im\\u0259g kud\",\n      \"im\\u0259g t\\u00e8si\\u02bce\",\n      \"im\\u0259g z\\u00f2\",\n      \"im\\u0259g krizmed\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mgo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mk-mk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435\\u0442\\u043f\\u043b\\u0430\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e\\u043f\\u043b\\u0430\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u043b\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u043e\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u043e\\u043a\",\n      \"\\u0441\\u0430\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\\u0438\",\n      \"\\u0458\\u0443\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434.\",\n      \"\\u043f\\u043e\\u043d.\",\n      \"\\u0432\\u0442.\",\n      \"\\u0441\\u0440\\u0435.\",\n      \"\\u0447\\u0435\\u0442.\",\n      \"\\u043f\\u0435\\u0442.\",\n      \"\\u0441\\u0430\\u0431.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d.\",\n      \"\\u0458\\u0443\\u043b.\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043f\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u0435\\u043c.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd.M.y HH:mm:ss\",\n    \"mediumDate\": \"dd.M.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.M.yy HH:mm\",\n    \"shortDate\": \"dd.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mk-mk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435\\u0442\\u043f\\u043b\\u0430\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e\\u043f\\u043b\\u0430\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u043b\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u043e\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u043e\\u043a\",\n      \"\\u0441\\u0430\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\\u0438\",\n      \"\\u0458\\u0443\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438\",\n      \"\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434.\",\n      \"\\u043f\\u043e\\u043d.\",\n      \"\\u0432\\u0442.\",\n      \"\\u0441\\u0440\\u0435.\",\n      \"\\u0447\\u0435\\u0442.\",\n      \"\\u043f\\u0435\\u0442.\",\n      \"\\u0441\\u0430\\u0431.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d.\",\n      \"\\u0458\\u0443\\u043b.\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043f\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u0435\\u043c.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd.M.y HH:mm:ss\",\n    \"mediumDate\": \"dd.M.y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.M.yy HH:mm\",\n    \"shortDate\": \"dd.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ml-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0d1e\\u0d3e\\u0d2f\\u0d31\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d33\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35\\u0d3e\\u0d34\\u0d4d\\u0d1a\",\n      \"\\u0d2c\\u0d41\\u0d27\\u0d28\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d36\\u0d28\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\"\n    ],\n    \"MONTH\": [\n      \"\\u0d1c\\u0d28\\u0d41\\u0d35\\u0d30\\u0d3f\",\n      \"\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41\\u0d35\\u0d30\\u0d3f\",\n      \"\\u0d2e\\u0d3e\\u0d7c\\u0d1a\\u0d4d\\u0d1a\\u0d4d\",\n      \"\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f\\u0d7d\",\n      \"\\u0d2e\\u0d47\\u0d2f\\u0d4d\",\n      \"\\u0d1c\\u0d42\\u0d7a\",\n      \"\\u0d1c\\u0d42\\u0d32\\u0d48\",\n      \"\\u0d06\\u0d17\\u0d38\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d4d\",\n      \"\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d02\\u0d2c\\u0d7c\",\n      \"\\u0d12\\u0d15\\u0d4d\\u200c\\u0d1f\\u0d4b\\u0d2c\\u0d7c\",\n      \"\\u0d28\\u0d35\\u0d02\\u0d2c\\u0d7c\",\n      \"\\u0d21\\u0d3f\\u0d38\\u0d02\\u0d2c\\u0d7c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0d1e\\u0d3e\\u0d2f\\u0d7c\",\n      \"\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d7e\",\n      \"\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35\",\n      \"\\u0d2c\\u0d41\\u0d27\\u0d7b\",\n      \"\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d02\",\n      \"\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f\",\n      \"\\u0d36\\u0d28\\u0d3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0d1c\\u0d28\\u0d41\",\n      \"\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41\",\n      \"\\u0d2e\\u0d3e\\u0d7c\",\n      \"\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f\",\n      \"\\u0d2e\\u0d47\\u0d2f\\u0d4d\",\n      \"\\u0d1c\\u0d42\\u0d7a\",\n      \"\\u0d1c\\u0d42\\u0d32\\u0d48\",\n      \"\\u0d13\\u0d17\",\n      \"\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d02\",\n      \"\\u0d12\\u0d15\\u0d4d\\u0d1f\\u0d4b\",\n      \"\\u0d28\\u0d35\\u0d02\",\n      \"\\u0d21\\u0d3f\\u0d38\\u0d02\"\n    ],\n    \"fullDate\": \"y, MMMM d, EEEE\",\n    \"longDate\": \"y, MMMM d\",\n    \"medium\": \"y, MMM d h:mm:ss a\",\n    \"mediumDate\": \"y, MMM d\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ml-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0d1e\\u0d3e\\u0d2f\\u0d31\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d33\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35\\u0d3e\\u0d34\\u0d4d\\u0d1a\",\n      \"\\u0d2c\\u0d41\\u0d27\\u0d28\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\",\n      \"\\u0d36\\u0d28\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u200c\\u0d1a\"\n    ],\n    \"MONTH\": [\n      \"\\u0d1c\\u0d28\\u0d41\\u0d35\\u0d30\\u0d3f\",\n      \"\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41\\u0d35\\u0d30\\u0d3f\",\n      \"\\u0d2e\\u0d3e\\u0d7c\\u0d1a\\u0d4d\\u0d1a\\u0d4d\",\n      \"\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f\\u0d7d\",\n      \"\\u0d2e\\u0d47\\u0d2f\\u0d4d\",\n      \"\\u0d1c\\u0d42\\u0d7a\",\n      \"\\u0d1c\\u0d42\\u0d32\\u0d48\",\n      \"\\u0d06\\u0d17\\u0d38\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d4d\",\n      \"\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d02\\u0d2c\\u0d7c\",\n      \"\\u0d12\\u0d15\\u0d4d\\u200c\\u0d1f\\u0d4b\\u0d2c\\u0d7c\",\n      \"\\u0d28\\u0d35\\u0d02\\u0d2c\\u0d7c\",\n      \"\\u0d21\\u0d3f\\u0d38\\u0d02\\u0d2c\\u0d7c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0d1e\\u0d3e\\u0d2f\\u0d7c\",\n      \"\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d7e\",\n      \"\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35\",\n      \"\\u0d2c\\u0d41\\u0d27\\u0d7b\",\n      \"\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d02\",\n      \"\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f\",\n      \"\\u0d36\\u0d28\\u0d3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0d1c\\u0d28\\u0d41\",\n      \"\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41\",\n      \"\\u0d2e\\u0d3e\\u0d7c\",\n      \"\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f\",\n      \"\\u0d2e\\u0d47\\u0d2f\\u0d4d\",\n      \"\\u0d1c\\u0d42\\u0d7a\",\n      \"\\u0d1c\\u0d42\\u0d32\\u0d48\",\n      \"\\u0d13\\u0d17\",\n      \"\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d02\",\n      \"\\u0d12\\u0d15\\u0d4d\\u0d1f\\u0d4b\",\n      \"\\u0d28\\u0d35\\u0d02\",\n      \"\\u0d21\\u0d3f\\u0d38\\u0d02\"\n    ],\n    \"fullDate\": \"y, MMMM d, EEEE\",\n    \"longDate\": \"y, MMMM d\",\n    \"medium\": \"y, MMM d h:mm:ss a\",\n    \"mediumDate\": \"y, MMM d\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ml\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mn-cyrl-mn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04ae\\u04e8\",\n      \"\\u04ae\\u0425\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u044f\\u043c\",\n      \"\\u0434\\u0430\\u0432\\u0430\\u0430\",\n      \"\\u043c\\u044f\\u0433\\u043c\\u0430\\u0440\",\n      \"\\u043b\\u0445\\u0430\\u0433\\u0432\\u0430\",\n      \"\\u043f\\u04af\\u0440\\u044d\\u0432\",\n      \"\\u0431\\u0430\\u0430\\u0441\\u0430\\u043d\",\n      \"\\u0431\\u044f\\u043c\\u0431\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u041d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0425\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0413\\u0443\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u04e9\\u0440\\u04e9\\u0432\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0422\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0417\\u0443\\u0440\\u0433\\u0430\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u043e\\u043b\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u041d\\u0430\\u0439\\u043c\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0415\\u0441\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u043d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u0445\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u041d\\u044f\",\n      \"\\u0414\\u0430\",\n      \"\\u041c\\u044f\",\n      \"\\u041b\\u0445\",\n      \"\\u041f\\u04af\",\n      \"\\u0411\\u0430\",\n      \"\\u0411\\u044f\"\n    ],\n    \"SHORTMONTH\": [\n      \"1-\\u0440 \\u0441\\u0430\\u0440\",\n      \"2-\\u0440 \\u0441\\u0430\\u0440\",\n      \"3-\\u0440 \\u0441\\u0430\\u0440\",\n      \"4-\\u0440 \\u0441\\u0430\\u0440\",\n      \"5-\\u0440 \\u0441\\u0430\\u0440\",\n      \"6-\\u0440 \\u0441\\u0430\\u0440\",\n      \"7-\\u0440 \\u0441\\u0430\\u0440\",\n      \"8-\\u0440 \\u0441\\u0430\\u0440\",\n      \"9-\\u0440 \\u0441\\u0430\\u0440\",\n      \"10-\\u0440 \\u0441\\u0430\\u0440\",\n      \"11-\\u0440 \\u0441\\u0430\\u0440\",\n      \"12-\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"fullDate\": \"EEEE, y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"longDate\": \"y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ae\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mn-cyrl-mn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mn-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04ae\\u04e8\",\n      \"\\u04ae\\u0425\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u044f\\u043c\",\n      \"\\u0434\\u0430\\u0432\\u0430\\u0430\",\n      \"\\u043c\\u044f\\u0433\\u043c\\u0430\\u0440\",\n      \"\\u043b\\u0445\\u0430\\u0433\\u0432\\u0430\",\n      \"\\u043f\\u04af\\u0440\\u044d\\u0432\",\n      \"\\u0431\\u0430\\u0430\\u0441\\u0430\\u043d\",\n      \"\\u0431\\u044f\\u043c\\u0431\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u041d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0425\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0413\\u0443\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u04e9\\u0440\\u04e9\\u0432\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0422\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0417\\u0443\\u0440\\u0433\\u0430\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u043e\\u043b\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u041d\\u0430\\u0439\\u043c\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0415\\u0441\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u043d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u0445\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u041d\\u044f\",\n      \"\\u0414\\u0430\",\n      \"\\u041c\\u044f\",\n      \"\\u041b\\u0445\",\n      \"\\u041f\\u04af\",\n      \"\\u0411\\u0430\",\n      \"\\u0411\\u044f\"\n    ],\n    \"SHORTMONTH\": [\n      \"1-\\u0440 \\u0441\\u0430\\u0440\",\n      \"2-\\u0440 \\u0441\\u0430\\u0440\",\n      \"3-\\u0440 \\u0441\\u0430\\u0440\",\n      \"4-\\u0440 \\u0441\\u0430\\u0440\",\n      \"5-\\u0440 \\u0441\\u0430\\u0440\",\n      \"6-\\u0440 \\u0441\\u0430\\u0440\",\n      \"7-\\u0440 \\u0441\\u0430\\u0440\",\n      \"8-\\u0440 \\u0441\\u0430\\u0440\",\n      \"9-\\u0440 \\u0441\\u0430\\u0440\",\n      \"10-\\u0440 \\u0441\\u0430\\u0440\",\n      \"11-\\u0440 \\u0441\\u0430\\u0440\",\n      \"12-\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"fullDate\": \"EEEE, y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"longDate\": \"y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mn-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04ae\\u04e8\",\n      \"\\u04ae\\u0425\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u044f\\u043c\",\n      \"\\u0434\\u0430\\u0432\\u0430\\u0430\",\n      \"\\u043c\\u044f\\u0433\\u043c\\u0430\\u0440\",\n      \"\\u043b\\u0445\\u0430\\u0433\\u0432\\u0430\",\n      \"\\u043f\\u04af\\u0440\\u044d\\u0432\",\n      \"\\u0431\\u0430\\u0430\\u0441\\u0430\\u043d\",\n      \"\\u0431\\u044f\\u043c\\u0431\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u041d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0425\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0413\\u0443\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u04e9\\u0440\\u04e9\\u0432\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0422\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0417\\u0443\\u0440\\u0433\\u0430\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0414\\u043e\\u043b\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u041d\\u0430\\u0439\\u043c\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0415\\u0441\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u043d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440\",\n      \"\\u0410\\u0440\\u0432\\u0430\\u043d \\u0445\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u041d\\u044f\",\n      \"\\u0414\\u0430\",\n      \"\\u041c\\u044f\",\n      \"\\u041b\\u0445\",\n      \"\\u041f\\u04af\",\n      \"\\u0411\\u0430\",\n      \"\\u0411\\u044f\"\n    ],\n    \"SHORTMONTH\": [\n      \"1-\\u0440 \\u0441\\u0430\\u0440\",\n      \"2-\\u0440 \\u0441\\u0430\\u0440\",\n      \"3-\\u0440 \\u0441\\u0430\\u0440\",\n      \"4-\\u0440 \\u0441\\u0430\\u0440\",\n      \"5-\\u0440 \\u0441\\u0430\\u0440\",\n      \"6-\\u0440 \\u0441\\u0430\\u0440\",\n      \"7-\\u0440 \\u0441\\u0430\\u0440\",\n      \"8-\\u0440 \\u0441\\u0430\\u0440\",\n      \"9-\\u0440 \\u0441\\u0430\\u0440\",\n      \"10-\\u0440 \\u0441\\u0430\\u0440\",\n      \"11-\\u0440 \\u0441\\u0430\\u0440\",\n      \"12-\\u0440 \\u0441\\u0430\\u0440\"\n    ],\n    \"fullDate\": \"EEEE, y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"longDate\": \"y '\\u043e\\u043d\\u044b' MM '\\u0441\\u0430\\u0440\\u044b\\u043d' d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ae\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mr-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092e.\\u092a\\u0942.\",\n      \"\\u092e.\\u0909.\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0933\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0911\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0911\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0933\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0911\\u0917\",\n      \"\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\",\n      \"\\u0911\\u0915\\u094d\\u091f\\u094b\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mr-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092e.\\u092a\\u0942.\",\n      \"\\u092e.\\u0909.\"\n    ],\n    \"DAY\": [\n      \"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0902\\u0917\\u0933\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u0917\\u0941\\u0930\\u0941\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0911\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0911\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0930\\u0935\\u093f\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0902\\u0917\\u0933\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u0917\\u0941\\u0930\\u0941\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u093e\\u0928\\u0947\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u090f\\u092a\\u094d\\u0930\\u093f\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0942\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u0948\",\n      \"\\u0911\\u0917\",\n      \"\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\",\n      \"\\u0911\\u0915\\u094d\\u091f\\u094b\",\n      \"\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u0902\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-bn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogos\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd/MM/yyyy h:mm:ss a\",\n    \"mediumDate\": \"dd/MM/yyyy\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"(\\u00a4\",\n        \"negSuf\": \")\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-bn\",\n  \"pluralCat\": function (n) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-latn-bn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogo\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-latn-bn\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-latn-my.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogo\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-latn-my\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-latn-sg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogo\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-latn-sg\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogo\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-latn\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms-my.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogos\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"dd/MM/yyyy h:mm:ss a\",\n    \"mediumDate\": \"dd/MM/yyyy\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"macFrac\": 0,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"(\\u00a4\",\n        \"negSuf\": \")\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms-my\",\n  \"pluralCat\": function (n) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ms.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"PG\",\n      \"PTG\"\n    ],\n    \"DAY\": [\n      \"Ahad\",\n      \"Isnin\",\n      \"Selasa\",\n      \"Rabu\",\n      \"Khamis\",\n      \"Jumaat\",\n      \"Sabtu\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mac\",\n      \"April\",\n      \"Mei\",\n      \"Jun\",\n      \"Julai\",\n      \"Ogos\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Disember\"\n    ],\n    \"SHORTDAY\": [\n      \"Ahd\",\n      \"Isn\",\n      \"Sel\",\n      \"Rab\",\n      \"Kha\",\n      \"Jum\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ogo\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/yy h:mm a\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ms\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mt-mt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Il-\\u0126add\",\n      \"It-Tnejn\",\n      \"It-Tlieta\",\n      \"L-Erbg\\u0127a\",\n      \"Il-\\u0126amis\",\n      \"Il-\\u0120img\\u0127a\",\n      \"Is-Sibt\"\n    ],\n    \"MONTH\": [\n      \"Jannar\",\n      \"Frar\",\n      \"Marzu\",\n      \"April\",\n      \"Mejju\",\n      \"\\u0120unju\",\n      \"Lulju\",\n      \"Awwissu\",\n      \"Settembru\",\n      \"Ottubru\",\n      \"Novembru\",\n      \"Di\\u010bembru\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0126ad\",\n      \"Tne\",\n      \"Tli\",\n      \"Erb\",\n      \"\\u0126am\",\n      \"\\u0120im\",\n      \"Sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fra\",\n      \"Mar\",\n      \"Apr\",\n      \"Mej\",\n      \"\\u0120un\",\n      \"Lul\",\n      \"Aww\",\n      \"Set\",\n      \"Ott\",\n      \"Nov\",\n      \"Di\\u010b\"\n    ],\n    \"fullDate\": \"EEEE, d 'ta'\\u2019 MMMM y\",\n    \"longDate\": \"d 'ta'\\u2019 MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mt-mt\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 0 || n % 100 >= 2 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 19) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Il-\\u0126add\",\n      \"It-Tnejn\",\n      \"It-Tlieta\",\n      \"L-Erbg\\u0127a\",\n      \"Il-\\u0126amis\",\n      \"Il-\\u0120img\\u0127a\",\n      \"Is-Sibt\"\n    ],\n    \"MONTH\": [\n      \"Jannar\",\n      \"Frar\",\n      \"Marzu\",\n      \"April\",\n      \"Mejju\",\n      \"\\u0120unju\",\n      \"Lulju\",\n      \"Awwissu\",\n      \"Settembru\",\n      \"Ottubru\",\n      \"Novembru\",\n      \"Di\\u010bembru\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0126ad\",\n      \"Tne\",\n      \"Tli\",\n      \"Erb\",\n      \"\\u0126am\",\n      \"\\u0120im\",\n      \"Sib\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fra\",\n      \"Mar\",\n      \"Apr\",\n      \"Mej\",\n      \"\\u0120un\",\n      \"Lul\",\n      \"Aww\",\n      \"Set\",\n      \"Ott\",\n      \"Nov\",\n      \"Di\\u010b\"\n    ],\n    \"fullDate\": \"EEEE, d 'ta'\\u2019 MMMM y\",\n    \"longDate\": \"d 'ta'\\u2019 MMMM y\",\n    \"medium\": \"dd MMM y HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mt\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 0 || n % 100 >= 2 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 19) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mua-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"comme\",\n      \"lilli\"\n    ],\n    \"DAY\": [\n      \"Com\\u2019yakke\",\n      \"Comlaa\\u0257ii\",\n      \"Comzyii\\u0257ii\",\n      \"Comkolle\",\n      \"Comkald\\u01dd\\u0253lii\",\n      \"Comgaisuu\",\n      \"Comzye\\u0253suu\"\n    ],\n    \"MONTH\": [\n      \"F\\u0129i Loo\",\n      \"Cokcwakla\\u014bne\",\n      \"Cokcwaklii\",\n      \"F\\u0129i Marfoo\",\n      \"Mad\\u01dd\\u01dduut\\u01ddbija\\u014b\",\n      \"Mam\\u01dd\\u014bgw\\u00e3afahbii\",\n      \"Mam\\u01dd\\u014bgw\\u00e3alii\",\n      \"Mad\\u01ddmbii\",\n      \"F\\u0129i D\\u01dd\\u0253lii\",\n      \"F\\u0129i Munda\\u014b\",\n      \"F\\u0129i Gwahlle\",\n      \"F\\u0129i Yuru\"\n    ],\n    \"SHORTDAY\": [\n      \"Cya\",\n      \"Cla\",\n      \"Czi\",\n      \"Cko\",\n      \"Cka\",\n      \"Cga\",\n      \"Cze\"\n    ],\n    \"SHORTMONTH\": [\n      \"FLO\",\n      \"CLA\",\n      \"CKI\",\n      \"FMF\",\n      \"MAD\",\n      \"MBI\",\n      \"MLI\",\n      \"MAM\",\n      \"FDE\",\n      \"FMU\",\n      \"FGW\",\n      \"FYU\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mua-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_mua.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"comme\",\n      \"lilli\"\n    ],\n    \"DAY\": [\n      \"Com\\u2019yakke\",\n      \"Comlaa\\u0257ii\",\n      \"Comzyii\\u0257ii\",\n      \"Comkolle\",\n      \"Comkald\\u01dd\\u0253lii\",\n      \"Comgaisuu\",\n      \"Comzye\\u0253suu\"\n    ],\n    \"MONTH\": [\n      \"F\\u0129i Loo\",\n      \"Cokcwakla\\u014bne\",\n      \"Cokcwaklii\",\n      \"F\\u0129i Marfoo\",\n      \"Mad\\u01dd\\u01dduut\\u01ddbija\\u014b\",\n      \"Mam\\u01dd\\u014bgw\\u00e3afahbii\",\n      \"Mam\\u01dd\\u014bgw\\u00e3alii\",\n      \"Mad\\u01ddmbii\",\n      \"F\\u0129i D\\u01dd\\u0253lii\",\n      \"F\\u0129i Munda\\u014b\",\n      \"F\\u0129i Gwahlle\",\n      \"F\\u0129i Yuru\"\n    ],\n    \"SHORTDAY\": [\n      \"Cya\",\n      \"Cla\",\n      \"Czi\",\n      \"Cko\",\n      \"Cka\",\n      \"Cga\",\n      \"Cze\"\n    ],\n    \"SHORTMONTH\": [\n      \"FLO\",\n      \"CLA\",\n      \"CKI\",\n      \"FMF\",\n      \"MAD\",\n      \"MBI\",\n      \"MLI\",\n      \"MAM\",\n      \"FDE\",\n      \"FMU\",\n      \"FGW\",\n      \"FYU\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"mua\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_my-mm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1014\\u1036\\u1014\\u1000\\u103a\",\n      \"\\u100a\\u1014\\u1031\"\n    ],\n    \"DAY\": [\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u1002\\u1014\\u103d\\u1031\",\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u101c\\u102c\",\n      \"\\u1021\\u1004\\u103a\\u1039\\u1002\\u102b\",\n      \"\\u1017\\u102f\\u1012\\u1039\\u1013\\u101f\\u1030\\u1038\",\n      \"\\u1000\\u103c\\u102c\\u101e\\u1015\\u1010\\u1031\\u1038\",\n      \"\\u101e\\u1031\\u102c\\u1000\\u103c\\u102c\",\n      \"\\u1005\\u1014\\u1031\"\n    ],\n    \"MONTH\": [\n      \"\\u1007\\u1014\\u103a\\u1014\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1016\\u1031\\u1016\\u1031\\u102c\\u103a\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1019\\u1010\\u103a\",\n      \"\\u1027\\u1015\\u103c\\u102e\",\n      \"\\u1019\\u1031\",\n      \"\\u1007\\u103d\\u1014\\u103a\",\n      \"\\u1007\\u1030\\u101c\\u102d\\u102f\\u1004\\u103a\",\n      \"\\u1029\\u1002\\u102f\\u1010\\u103a\",\n      \"\\u1005\\u1000\\u103a\\u1010\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1021\\u1031\\u102c\\u1000\\u103a\\u1010\\u102d\\u102f\\u1018\\u102c\",\n      \"\\u1014\\u102d\\u102f\\u101d\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1012\\u102e\\u1007\\u1004\\u103a\\u1018\\u102c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u1002\\u1014\\u103d\\u1031\",\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u101c\\u102c\",\n      \"\\u1021\\u1004\\u103a\\u1039\\u1002\\u102b\",\n      \"\\u1017\\u102f\\u1012\\u1039\\u1013\\u101f\\u1030\\u1038\",\n      \"\\u1000\\u103c\\u102c\\u101e\\u1015\\u1010\\u1031\\u1038\",\n      \"\\u101e\\u1031\\u102c\\u1000\\u103c\\u102c\",\n      \"\\u1005\\u1014\\u1031\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1007\\u1014\\u103a\\u1014\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1016\\u1031\\u1016\\u1031\\u102c\\u103a\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1019\\u1010\\u103a\",\n      \"\\u1027\\u1015\\u103c\\u102e\",\n      \"\\u1019\\u1031\",\n      \"\\u1007\\u103d\\u1014\\u103a\",\n      \"\\u1007\\u1030\\u101c\\u102d\\u102f\\u1004\\u103a\",\n      \"\\u1029\\u1002\\u102f\\u1010\\u103a\",\n      \"\\u1005\\u1000\\u103a\\u1010\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1021\\u1031\\u102c\\u1000\\u103a\\u1010\\u102d\\u102f\\u1018\\u102c\",\n      \"\\u1014\\u102d\\u102f\\u101d\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1012\\u102e\\u1007\\u1004\\u103a\\u1018\\u102c\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"K\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"my-mm\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_my.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1014\\u1036\\u1014\\u1000\\u103a\",\n      \"\\u100a\\u1014\\u1031\"\n    ],\n    \"DAY\": [\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u1002\\u1014\\u103d\\u1031\",\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u101c\\u102c\",\n      \"\\u1021\\u1004\\u103a\\u1039\\u1002\\u102b\",\n      \"\\u1017\\u102f\\u1012\\u1039\\u1013\\u101f\\u1030\\u1038\",\n      \"\\u1000\\u103c\\u102c\\u101e\\u1015\\u1010\\u1031\\u1038\",\n      \"\\u101e\\u1031\\u102c\\u1000\\u103c\\u102c\",\n      \"\\u1005\\u1014\\u1031\"\n    ],\n    \"MONTH\": [\n      \"\\u1007\\u1014\\u103a\\u1014\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1016\\u1031\\u1016\\u1031\\u102c\\u103a\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1019\\u1010\\u103a\",\n      \"\\u1027\\u1015\\u103c\\u102e\",\n      \"\\u1019\\u1031\",\n      \"\\u1007\\u103d\\u1014\\u103a\",\n      \"\\u1007\\u1030\\u101c\\u102d\\u102f\\u1004\\u103a\",\n      \"\\u1029\\u1002\\u102f\\u1010\\u103a\",\n      \"\\u1005\\u1000\\u103a\\u1010\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1021\\u1031\\u102c\\u1000\\u103a\\u1010\\u102d\\u102f\\u1018\\u102c\",\n      \"\\u1014\\u102d\\u102f\\u101d\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1012\\u102e\\u1007\\u1004\\u103a\\u1018\\u102c\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u1002\\u1014\\u103d\\u1031\",\n      \"\\u1010\\u1014\\u1004\\u103a\\u1039\\u101c\\u102c\",\n      \"\\u1021\\u1004\\u103a\\u1039\\u1002\\u102b\",\n      \"\\u1017\\u102f\\u1012\\u1039\\u1013\\u101f\\u1030\\u1038\",\n      \"\\u1000\\u103c\\u102c\\u101e\\u1015\\u1010\\u1031\\u1038\",\n      \"\\u101e\\u1031\\u102c\\u1000\\u103c\\u102c\",\n      \"\\u1005\\u1014\\u1031\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1007\\u1014\\u103a\\u1014\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1016\\u1031\\u1016\\u1031\\u102c\\u103a\\u101d\\u102b\\u101b\\u102e\",\n      \"\\u1019\\u1010\\u103a\",\n      \"\\u1027\\u1015\\u103c\\u102e\",\n      \"\\u1019\\u1031\",\n      \"\\u1007\\u103d\\u1014\\u103a\",\n      \"\\u1007\\u1030\\u101c\\u102d\\u102f\\u1004\\u103a\",\n      \"\\u1029\\u1002\\u102f\\u1010\\u103a\",\n      \"\\u1005\\u1000\\u103a\\u1010\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1021\\u1031\\u102c\\u1000\\u103a\\u1010\\u102d\\u102f\\u1018\\u102c\",\n      \"\\u1014\\u102d\\u102f\\u101d\\u1004\\u103a\\u1018\\u102c\",\n      \"\\u1012\\u102e\\u1007\\u1004\\u103a\\u1018\\u102c\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"K\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"my\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_naq-na.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u01c1goagas\",\n      \"\\u01c3uias\"\n    ],\n    \"DAY\": [\n      \"Sontaxtsees\",\n      \"Mantaxtsees\",\n      \"Denstaxtsees\",\n      \"Wunstaxtsees\",\n      \"Dondertaxtsees\",\n      \"Fraitaxtsees\",\n      \"Satertaxtsees\"\n    ],\n    \"MONTH\": [\n      \"\\u01c3Khanni\",\n      \"\\u01c3Khan\\u01c0g\\u00f4ab\",\n      \"\\u01c0Khuu\\u01c1kh\\u00e2b\",\n      \"\\u01c3H\\u00f4a\\u01c2khaib\",\n      \"\\u01c3Khaits\\u00e2b\",\n      \"Gama\\u01c0aeb\",\n      \"\\u01c2Khoesaob\",\n      \"Ao\\u01c1khuum\\u00fb\\u01c1kh\\u00e2b\",\n      \"Tara\\u01c0khuum\\u00fb\\u01c1kh\\u00e2b\",\n      \"\\u01c2N\\u00fb\\u01c1n\\u00e2iseb\",\n      \"\\u01c0Hoo\\u01c2gaeb\",\n      \"H\\u00f4asore\\u01c1kh\\u00e2b\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Ma\",\n      \"De\",\n      \"Wu\",\n      \"Do\",\n      \"Fr\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"naq-na\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_naq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u01c1goagas\",\n      \"\\u01c3uias\"\n    ],\n    \"DAY\": [\n      \"Sontaxtsees\",\n      \"Mantaxtsees\",\n      \"Denstaxtsees\",\n      \"Wunstaxtsees\",\n      \"Dondertaxtsees\",\n      \"Fraitaxtsees\",\n      \"Satertaxtsees\"\n    ],\n    \"MONTH\": [\n      \"\\u01c3Khanni\",\n      \"\\u01c3Khan\\u01c0g\\u00f4ab\",\n      \"\\u01c0Khuu\\u01c1kh\\u00e2b\",\n      \"\\u01c3H\\u00f4a\\u01c2khaib\",\n      \"\\u01c3Khaits\\u00e2b\",\n      \"Gama\\u01c0aeb\",\n      \"\\u01c2Khoesaob\",\n      \"Ao\\u01c1khuum\\u00fb\\u01c1kh\\u00e2b\",\n      \"Tara\\u01c0khuum\\u00fb\\u01c1kh\\u00e2b\",\n      \"\\u01c2N\\u00fb\\u01c1n\\u00e2iseb\",\n      \"\\u01c0Hoo\\u01c2gaeb\",\n      \"H\\u00f4asore\\u01c1kh\\u00e2b\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Ma\",\n      \"De\",\n      \"Wu\",\n      \"Do\",\n      \"Fr\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"naq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nb-no.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd.MM.y HH.mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nb-no\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nb-sj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd.MM.y HH.mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nb-sj\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nb.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd.MM.y HH.mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nb\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nd-zw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Mvulo\",\n      \"Sibili\",\n      \"Sithathu\",\n      \"Sine\",\n      \"Sihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Zibandlela\",\n      \"Nhlolanja\",\n      \"Mbimbitho\",\n      \"Mabasa\",\n      \"Nkwenkwezi\",\n      \"Nhlangula\",\n      \"Ntulikazi\",\n      \"Ncwabakazi\",\n      \"Mpandula\",\n      \"Mfumfu\",\n      \"Lwezi\",\n      \"Mpalakazi\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mvu\",\n      \"Sib\",\n      \"Sit\",\n      \"Sin\",\n      \"Sih\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Zib\",\n      \"Nhlo\",\n      \"Mbi\",\n      \"Mab\",\n      \"Nkw\",\n      \"Nhla\",\n      \"Ntu\",\n      \"Ncw\",\n      \"Mpan\",\n      \"Mfu\",\n      \"Lwe\",\n      \"Mpal\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nd-zw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Mvulo\",\n      \"Sibili\",\n      \"Sithathu\",\n      \"Sine\",\n      \"Sihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Zibandlela\",\n      \"Nhlolanja\",\n      \"Mbimbitho\",\n      \"Mabasa\",\n      \"Nkwenkwezi\",\n      \"Nhlangula\",\n      \"Ntulikazi\",\n      \"Ncwabakazi\",\n      \"Mpandula\",\n      \"Mfumfu\",\n      \"Lwezi\",\n      \"Mpalakazi\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mvu\",\n      \"Sib\",\n      \"Sit\",\n      \"Sin\",\n      \"Sih\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Zib\",\n      \"Nhlo\",\n      \"Mbi\",\n      \"Mab\",\n      \"Nkw\",\n      \"Nhla\",\n      \"Ntu\",\n      \"Ncw\",\n      \"Mpan\",\n      \"Mfu\",\n      \"Lwe\",\n      \"Mpal\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ne-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092a\\u0942\\u0930\\u094d\\u0935\\u093e\\u0939\\u094d\\u0928\",\n      \"\\u0905\\u092a\\u0930\\u093e\\u0939\\u094d\\u0928\"\n    ],\n    \"DAY\": [\n      \"\\u0906\\u0907\\u0924\\u0935\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930\",\n      \"\\u092c\\u093f\\u0939\\u0940\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0930\\u0935\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u0947\\u0932\",\n      \"\\u092e\\u0908\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u0924\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0926\\u093f\\u0938\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0906\\u0907\\u0924\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u092c\\u093f\\u0939\\u0940\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0905\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ne-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ne-np.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092a\\u0942\\u0930\\u094d\\u0935 \\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u094d\\u0939\",\n      \"\\u0909\\u0924\\u094d\\u0924\\u0930 \\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u094d\\u0939\"\n    ],\n    \"DAY\": [\n      \"\\u0906\\u0907\\u0924\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u092c\\u093e\\u0930\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u093f\\u0939\\u0940\\u092c\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u092c\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u092c\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0905\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0906\\u0907\\u0924\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u092c\\u093f\\u0939\\u0940\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0905\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ne-np\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ne.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u092a\\u0942\\u0930\\u094d\\u0935 \\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u094d\\u0939\",\n      \"\\u0909\\u0924\\u094d\\u0924\\u0930 \\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u094d\\u0939\"\n    ],\n    \"DAY\": [\n      \"\\u0906\\u0907\\u0924\\u092c\\u093e\\u0930\",\n      \"\\u0938\\u094b\\u092e\\u092c\\u093e\\u0930\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u0941\\u0927\\u092c\\u093e\\u0930\",\n      \"\\u092c\\u093f\\u0939\\u0940\\u092c\\u093e\\u0930\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\\u092c\\u093e\\u0930\",\n      \"\\u0936\\u0928\\u093f\\u092c\\u093e\\u0930\"\n    ],\n    \"MONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0905\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0906\\u0907\\u0924\",\n      \"\\u0938\\u094b\\u092e\",\n      \"\\u092e\\u0919\\u094d\\u0917\\u0932\",\n      \"\\u092c\\u0941\\u0927\",\n      \"\\u092c\\u093f\\u0939\\u0940\",\n      \"\\u0936\\u0941\\u0915\\u094d\\u0930\",\n      \"\\u0936\\u0928\\u093f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u091c\\u0928\\u0935\\u0930\\u0940\",\n      \"\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0905\\u0930\\u0940\",\n      \"\\u092e\\u093e\\u0930\\u094d\\u091a\",\n      \"\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932\",\n      \"\\u092e\\u0947\",\n      \"\\u091c\\u0941\\u0928\",\n      \"\\u091c\\u0941\\u0932\\u093e\\u0908\",\n      \"\\u0905\\u0917\\u0938\\u094d\\u091f\",\n      \"\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\",\n      \"\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930\",\n      \"\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ne\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-aw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Afl.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-aw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-be.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d-MMM-y HH:mm:ss\",\n    \"mediumDate\": \"d-MMM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/MM/yy HH:mm\",\n    \"shortDate\": \"d/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"nl-be\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-bq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-bq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-cw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ANG\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-cw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-nl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-nl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-sr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-sr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl-sx.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"ANG\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl-sx\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"zondag\",\n      \"maandag\",\n      \"dinsdag\",\n      \"woensdag\",\n      \"donderdag\",\n      \"vrijdag\",\n      \"zaterdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"maart\",\n      \"april\",\n      \"mei\",\n      \"juni\",\n      \"juli\",\n      \"augustus\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"zo\",\n      \"ma\",\n      \"di\",\n      \"wo\",\n      \"do\",\n      \"vr\",\n      \"za\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mrt.\",\n      \"apr.\",\n      \"mei\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0\",\n        \"negSuf\": \"-\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nmg-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"man\\u00e1\",\n      \"kug\\u00fa\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u0254\",\n      \"m\\u0254\\u0301nd\\u0254\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1ba\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1lal\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1na\",\n      \"mab\\u00e1g\\u00e1 m\\u00e1 sukul\",\n      \"s\\u00e1sadi\"\n    ],\n    \"MONTH\": [\n      \"ngw\\u025bn mat\\u00e1hra\",\n      \"ngw\\u025bn \\u0144mba\",\n      \"ngw\\u025bn \\u0144lal\",\n      \"ngw\\u025bn \\u0144na\",\n      \"ngw\\u025bn \\u0144tan\",\n      \"ngw\\u025bn \\u0144tu\\u00f3\",\n      \"ngw\\u025bn h\\u025bmbu\\u025br\\u00ed\",\n      \"ngw\\u025bn l\\u0254mbi\",\n      \"ngw\\u025bn r\\u025bbvu\\u00e2\",\n      \"ngw\\u025bn wum\",\n      \"ngw\\u025bn wum nav\\u01d4r\",\n      \"kr\\u00edsimin\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"m\\u0254\\u0301n\",\n      \"smb\",\n      \"sml\",\n      \"smn\",\n      \"mbs\",\n      \"sas\"\n    ],\n    \"SHORTMONTH\": [\n      \"ng1\",\n      \"ng2\",\n      \"ng3\",\n      \"ng4\",\n      \"ng5\",\n      \"ng6\",\n      \"ng7\",\n      \"ng8\",\n      \"ng9\",\n      \"ng10\",\n      \"ng11\",\n      \"kris\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"nmg-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nmg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"man\\u00e1\",\n      \"kug\\u00fa\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301nd\\u0254\",\n      \"m\\u0254\\u0301nd\\u0254\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1ba\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1lal\",\n      \"s\\u0254\\u0301nd\\u0254 maf\\u00fa m\\u00e1na\",\n      \"mab\\u00e1g\\u00e1 m\\u00e1 sukul\",\n      \"s\\u00e1sadi\"\n    ],\n    \"MONTH\": [\n      \"ngw\\u025bn mat\\u00e1hra\",\n      \"ngw\\u025bn \\u0144mba\",\n      \"ngw\\u025bn \\u0144lal\",\n      \"ngw\\u025bn \\u0144na\",\n      \"ngw\\u025bn \\u0144tan\",\n      \"ngw\\u025bn \\u0144tu\\u00f3\",\n      \"ngw\\u025bn h\\u025bmbu\\u025br\\u00ed\",\n      \"ngw\\u025bn l\\u0254mbi\",\n      \"ngw\\u025bn r\\u025bbvu\\u00e2\",\n      \"ngw\\u025bn wum\",\n      \"ngw\\u025bn wum nav\\u01d4r\",\n      \"kr\\u00edsimin\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u0254\\u0301n\",\n      \"m\\u0254\\u0301n\",\n      \"smb\",\n      \"sml\",\n      \"smn\",\n      \"mbs\",\n      \"sas\"\n    ],\n    \"SHORTMONTH\": [\n      \"ng1\",\n      \"ng2\",\n      \"ng3\",\n      \"ng4\",\n      \"ng5\",\n      \"ng6\",\n      \"ng7\",\n      \"ng8\",\n      \"ng9\",\n      \"ng10\",\n      \"ng11\",\n      \"kris\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"nmg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nn-no.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"formiddag\",\n      \"ettermiddag\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"m\\u00e5ndag\",\n      \"tysdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"laurdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8.\",\n      \"m\\u00e5.\",\n      \"ty.\",\n      \"on.\",\n      \"to.\",\n      \"fr.\",\n      \"la.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"nn-no\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"formiddag\",\n      \"ettermiddag\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"m\\u00e5ndag\",\n      \"tysdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"laurdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8.\",\n      \"m\\u00e5.\",\n      \"ty.\",\n      \"on.\",\n      \"to.\",\n      \"fr.\",\n      \"la.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"nn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nnh-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"mba\\u02bc\\u00e1mba\\u02bc\",\n      \"ncw\\u00f2nz\\u00e9m\"\n    ],\n    \"DAY\": [\n      \"ly\\u025b\\u02bc\\u025b\\u0301 s\\u1e85\\u00ed\\u014bt\\u00e8\",\n      \"mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"ts\\u00e8ts\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 tsets\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mvf\\u00f2 m\\u00e0ga ly\\u025b\\u030c\\u02bc\",\n      \"m\\u00e0ga ly\\u025b\\u030c\\u02bc\"\n    ],\n    \"MONTH\": [\n      \"sa\\u014b tsets\\u025b\\u0300\\u025b l\\u00f9m\",\n      \"sa\\u014b k\\u00e0g ngw\\u00f3\\u014b\",\n      \"sa\\u014b lepy\\u00e8 sh\\u00fam\",\n      \"sa\\u014b c\\u00ff\\u00f3\",\n      \"sa\\u014b ts\\u025b\\u0300\\u025b c\\u00ff\\u00f3\",\n      \"sa\\u014b nj\\u00ffol\\u00e1\\u02bc\",\n      \"sa\\u014b ty\\u025b\\u0300b ty\\u025b\\u0300b mb\\u0289\\u0300\",\n      \"sa\\u014b mb\\u0289\\u0300\\u014b\",\n      \"sa\\u014b ngw\\u0254\\u0300\\u02bc mb\\u00ff\\u025b\",\n      \"sa\\u014b t\\u00e0\\u014ba tsets\\u00e1\\u02bc\",\n      \"sa\\u014b mejwo\\u014b\\u00f3\",\n      \"sa\\u014b l\\u00f9m\"\n    ],\n    \"SHORTDAY\": [\n      \"ly\\u025b\\u02bc\\u025b\\u0301 s\\u1e85\\u00ed\\u014bt\\u00e8\",\n      \"mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"ts\\u00e8ts\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 tsets\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mvf\\u00f2 m\\u00e0ga ly\\u025b\\u030c\\u02bc\",\n      \"m\\u00e0ga ly\\u025b\\u030c\\u02bc\"\n    ],\n    \"SHORTMONTH\": [\n      \"sa\\u014b tsets\\u025b\\u0300\\u025b l\\u00f9m\",\n      \"sa\\u014b k\\u00e0g ngw\\u00f3\\u014b\",\n      \"sa\\u014b lepy\\u00e8 sh\\u00fam\",\n      \"sa\\u014b c\\u00ff\\u00f3\",\n      \"sa\\u014b ts\\u025b\\u0300\\u025b c\\u00ff\\u00f3\",\n      \"sa\\u014b nj\\u00ffol\\u00e1\\u02bc\",\n      \"sa\\u014b ty\\u025b\\u0300b ty\\u025b\\u0300b mb\\u0289\\u0300\",\n      \"sa\\u014b mb\\u0289\\u0300\\u014b\",\n      \"sa\\u014b ngw\\u0254\\u0300\\u02bc mb\\u00ff\\u025b\",\n      \"sa\\u014b t\\u00e0\\u014ba tsets\\u00e1\\u02bc\",\n      \"sa\\u014b mejwo\\u014b\\u00f3\",\n      \"sa\\u014b l\\u00f9m\"\n    ],\n    \"fullDate\": \"EEEE , 'ly\\u025b'\\u030c\\u02bc d 'na' MMMM, y\",\n    \"longDate\": \"'ly\\u025b'\\u030c\\u02bc d 'na' MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nnh-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nnh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"mba\\u02bc\\u00e1mba\\u02bc\",\n      \"ncw\\u00f2nz\\u00e9m\"\n    ],\n    \"DAY\": [\n      \"ly\\u025b\\u02bc\\u025b\\u0301 s\\u1e85\\u00ed\\u014bt\\u00e8\",\n      \"mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"ts\\u00e8ts\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 tsets\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mvf\\u00f2 m\\u00e0ga ly\\u025b\\u030c\\u02bc\",\n      \"m\\u00e0ga ly\\u025b\\u030c\\u02bc\"\n    ],\n    \"MONTH\": [\n      \"sa\\u014b tsets\\u025b\\u0300\\u025b l\\u00f9m\",\n      \"sa\\u014b k\\u00e0g ngw\\u00f3\\u014b\",\n      \"sa\\u014b lepy\\u00e8 sh\\u00fam\",\n      \"sa\\u014b c\\u00ff\\u00f3\",\n      \"sa\\u014b ts\\u025b\\u0300\\u025b c\\u00ff\\u00f3\",\n      \"sa\\u014b nj\\u00ffol\\u00e1\\u02bc\",\n      \"sa\\u014b ty\\u025b\\u0300b ty\\u025b\\u0300b mb\\u0289\\u0300\",\n      \"sa\\u014b mb\\u0289\\u0300\\u014b\",\n      \"sa\\u014b ngw\\u0254\\u0300\\u02bc mb\\u00ff\\u025b\",\n      \"sa\\u014b t\\u00e0\\u014ba tsets\\u00e1\\u02bc\",\n      \"sa\\u014b mejwo\\u014b\\u00f3\",\n      \"sa\\u014b l\\u00f9m\"\n    ],\n    \"SHORTDAY\": [\n      \"ly\\u025b\\u02bc\\u025b\\u0301 s\\u1e85\\u00ed\\u014bt\\u00e8\",\n      \"mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 mvf\\u00f2 ly\\u025b\\u030c\\u02bc\",\n      \"ts\\u00e8ts\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mb\\u0254\\u0301\\u0254nt\\u00e8 tsets\\u025b\\u0300\\u025b ly\\u025b\\u030c\\u02bc\",\n      \"mvf\\u00f2 m\\u00e0ga ly\\u025b\\u030c\\u02bc\",\n      \"m\\u00e0ga ly\\u025b\\u030c\\u02bc\"\n    ],\n    \"SHORTMONTH\": [\n      \"sa\\u014b tsets\\u025b\\u0300\\u025b l\\u00f9m\",\n      \"sa\\u014b k\\u00e0g ngw\\u00f3\\u014b\",\n      \"sa\\u014b lepy\\u00e8 sh\\u00fam\",\n      \"sa\\u014b c\\u00ff\\u00f3\",\n      \"sa\\u014b ts\\u025b\\u0300\\u025b c\\u00ff\\u00f3\",\n      \"sa\\u014b nj\\u00ffol\\u00e1\\u02bc\",\n      \"sa\\u014b ty\\u025b\\u0300b ty\\u025b\\u0300b mb\\u0289\\u0300\",\n      \"sa\\u014b mb\\u0289\\u0300\\u014b\",\n      \"sa\\u014b ngw\\u0254\\u0300\\u02bc mb\\u00ff\\u025b\",\n      \"sa\\u014b t\\u00e0\\u014ba tsets\\u00e1\\u02bc\",\n      \"sa\\u014b mejwo\\u014b\\u00f3\",\n      \"sa\\u014b l\\u00f9m\"\n    ],\n    \"fullDate\": \"EEEE , 'ly\\u025b'\\u030c\\u02bc d 'na' MMMM, y\",\n    \"longDate\": \"'ly\\u025b'\\u030c\\u02bc d 'na' MMMM, y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nnh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_no-no.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd.MM.y HH.mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"no-no\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_no.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"s\\u00f8ndag\",\n      \"mandag\",\n      \"tirsdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f8rdag\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mars\",\n      \"april\",\n      \"mai\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"desember\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f8n.\",\n      \"man.\",\n      \"tir.\",\n      \"ons.\",\n      \"tor.\",\n      \"fre.\",\n      \"l\\u00f8r.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"jun.\",\n      \"jul.\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"des.\"\n    ],\n    \"fullDate\": \"EEEE d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"dd.MM.y HH.mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"no\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nr-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"uSonto\",\n      \"uMvulo\",\n      \"uLesibili\",\n      \"Lesithathu\",\n      \"uLesine\",\n      \"ngoLesihlanu\",\n      \"umGqibelo\"\n    ],\n    \"MONTH\": [\n      \"Janabari\",\n      \"uFeberbari\",\n      \"uMatjhi\",\n      \"u-Apreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Arhostosi\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Usinyikhaba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mvu\",\n      \"Bil\",\n      \"Tha\",\n      \"Ne\",\n      \"Hla\",\n      \"Gqi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Apr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Arh\",\n      \"Sep\",\n      \"Okt\",\n      \"Usi\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nr-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"uSonto\",\n      \"uMvulo\",\n      \"uLesibili\",\n      \"Lesithathu\",\n      \"uLesine\",\n      \"ngoLesihlanu\",\n      \"umGqibelo\"\n    ],\n    \"MONTH\": [\n      \"Janabari\",\n      \"uFeberbari\",\n      \"uMatjhi\",\n      \"u-Apreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Arhostosi\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Usinyikhaba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mvu\",\n      \"Bil\",\n      \"Tha\",\n      \"Ne\",\n      \"Hla\",\n      \"Gqi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Apr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Arh\",\n      \"Sep\",\n      \"Okt\",\n      \"Usi\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nso-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sontaga\",\n      \"Mosupalogo\",\n      \"Labobedi\",\n      \"Laboraro\",\n      \"Labone\",\n      \"Labohlano\",\n      \"Mokibelo\"\n    ],\n    \"MONTH\": [\n      \"Janaware\",\n      \"Feberware\",\n      \"Mat\\u0161he\",\n      \"Aporele\",\n      \"Mei\",\n      \"June\",\n      \"Julae\",\n      \"Agostose\",\n      \"Setemere\",\n      \"Oktobore\",\n      \"Nofemere\",\n      \"Disemere\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mos\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Hla\",\n      \"Mok\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Apo\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Set\",\n      \"Okt\",\n      \"Nof\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nso-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nso.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sontaga\",\n      \"Mosupalogo\",\n      \"Labobedi\",\n      \"Laboraro\",\n      \"Labone\",\n      \"Labohlano\",\n      \"Mokibelo\"\n    ],\n    \"MONTH\": [\n      \"Janaware\",\n      \"Feberware\",\n      \"Mat\\u0161he\",\n      \"Aporele\",\n      \"Mei\",\n      \"June\",\n      \"Julae\",\n      \"Agostose\",\n      \"Setemere\",\n      \"Oktobore\",\n      \"Nofemere\",\n      \"Disemere\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mos\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Hla\",\n      \"Mok\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Apo\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Set\",\n      \"Okt\",\n      \"Nof\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nso\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nus-sd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"RW\",\n      \"T\\u014a\"\n    ],\n    \"DAY\": [\n      \"C\\u00e4\\u014b ku\\u0254th\",\n      \"Jiec la\\u0331t\",\n      \"R\\u025bw l\\u00e4tni\",\n      \"Di\\u0254\\u0331k l\\u00e4tni\",\n      \"\\u014auaan l\\u00e4tni\",\n      \"Dhieec l\\u00e4tni\",\n      \"B\\u00e4k\\u025bl l\\u00e4tni\"\n    ],\n    \"MONTH\": [\n      \"Tiop thar p\\u025bt\",\n      \"P\\u025bt\",\n      \"Du\\u0254\\u0331\\u0254\\u0331\\u014b\",\n      \"Guak\",\n      \"Du\\u00e4t\",\n      \"Kornyoot\",\n      \"Pay yie\\u0331tni\",\n      \"Tho\\u0331o\\u0331r\",\n      \"T\\u025b\\u025br\",\n      \"Laath\",\n      \"Kur\",\n      \"Tio\\u0331p in di\\u0331i\\u0331t\"\n    ],\n    \"SHORTDAY\": [\n      \"C\\u00e4\\u014b\",\n      \"Jiec\",\n      \"R\\u025bw\",\n      \"Di\\u0254\\u0331k\",\n      \"\\u014auaan\",\n      \"Dhieec\",\n      \"B\\u00e4k\\u025bl\"\n    ],\n    \"SHORTMONTH\": [\n      \"Tiop\",\n      \"P\\u025bt\",\n      \"Du\\u0254\\u0331\\u0254\\u0331\",\n      \"Guak\",\n      \"Du\\u00e4\",\n      \"Kor\",\n      \"Pay\",\n      \"Thoo\",\n      \"T\\u025b\\u025b\",\n      \"Laa\",\n      \"Kur\",\n      \"Tid\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/y h:mm a\",\n    \"shortDate\": \"d/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SDG\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nus-sd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nus.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"RW\",\n      \"T\\u014a\"\n    ],\n    \"DAY\": [\n      \"C\\u00e4\\u014b ku\\u0254th\",\n      \"Jiec la\\u0331t\",\n      \"R\\u025bw l\\u00e4tni\",\n      \"Di\\u0254\\u0331k l\\u00e4tni\",\n      \"\\u014auaan l\\u00e4tni\",\n      \"Dhieec l\\u00e4tni\",\n      \"B\\u00e4k\\u025bl l\\u00e4tni\"\n    ],\n    \"MONTH\": [\n      \"Tiop thar p\\u025bt\",\n      \"P\\u025bt\",\n      \"Du\\u0254\\u0331\\u0254\\u0331\\u014b\",\n      \"Guak\",\n      \"Du\\u00e4t\",\n      \"Kornyoot\",\n      \"Pay yie\\u0331tni\",\n      \"Tho\\u0331o\\u0331r\",\n      \"T\\u025b\\u025br\",\n      \"Laath\",\n      \"Kur\",\n      \"Tio\\u0331p in di\\u0331i\\u0331t\"\n    ],\n    \"SHORTDAY\": [\n      \"C\\u00e4\\u014b\",\n      \"Jiec\",\n      \"R\\u025bw\",\n      \"Di\\u0254\\u0331k\",\n      \"\\u014auaan\",\n      \"Dhieec\",\n      \"B\\u00e4k\\u025bl\"\n    ],\n    \"SHORTMONTH\": [\n      \"Tiop\",\n      \"P\\u025bt\",\n      \"Du\\u0254\\u0331\\u0254\\u0331\",\n      \"Guak\",\n      \"Du\\u00e4\",\n      \"Kor\",\n      \"Pay\",\n      \"Thoo\",\n      \"T\\u025b\\u025b\",\n      \"Laa\",\n      \"Kur\",\n      \"Tid\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/MM/y h:mm a\",\n    \"shortDate\": \"d/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SDG\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nus\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nyn-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sande\",\n      \"Orwokubanza\",\n      \"Orwakabiri\",\n      \"Orwakashatu\",\n      \"Orwakana\",\n      \"Orwakataano\",\n      \"Orwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Okwokubanza\",\n      \"Okwakabiri\",\n      \"Okwakashatu\",\n      \"Okwakana\",\n      \"Okwakataana\",\n      \"Okwamukaaga\",\n      \"Okwamushanju\",\n      \"Okwamunaana\",\n      \"Okwamwenda\",\n      \"Okwaikumi\",\n      \"Okwaikumi na kumwe\",\n      \"Okwaikumi na ibiri\"\n    ],\n    \"SHORTDAY\": [\n      \"SAN\",\n      \"ORK\",\n      \"OKB\",\n      \"OKS\",\n      \"OKN\",\n      \"OKT\",\n      \"OMK\"\n    ],\n    \"SHORTMONTH\": [\n      \"KBZ\",\n      \"KBR\",\n      \"KST\",\n      \"KKN\",\n      \"KTN\",\n      \"KMK\",\n      \"KMS\",\n      \"KMN\",\n      \"KMW\",\n      \"KKM\",\n      \"KNK\",\n      \"KNB\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nyn-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_nyn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sande\",\n      \"Orwokubanza\",\n      \"Orwakabiri\",\n      \"Orwakashatu\",\n      \"Orwakana\",\n      \"Orwakataano\",\n      \"Orwamukaaga\"\n    ],\n    \"MONTH\": [\n      \"Okwokubanza\",\n      \"Okwakabiri\",\n      \"Okwakashatu\",\n      \"Okwakana\",\n      \"Okwakataana\",\n      \"Okwamukaaga\",\n      \"Okwamushanju\",\n      \"Okwamunaana\",\n      \"Okwamwenda\",\n      \"Okwaikumi\",\n      \"Okwaikumi na kumwe\",\n      \"Okwaikumi na ibiri\"\n    ],\n    \"SHORTDAY\": [\n      \"SAN\",\n      \"ORK\",\n      \"OKB\",\n      \"OKS\",\n      \"OKN\",\n      \"OKT\",\n      \"OMK\"\n    ],\n    \"SHORTMONTH\": [\n      \"KBZ\",\n      \"KBR\",\n      \"KST\",\n      \"KKN\",\n      \"KTN\",\n      \"KMK\",\n      \"KMS\",\n      \"KMN\",\n      \"KMW\",\n      \"KKM\",\n      \"KNK\",\n      \"KNB\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"nyn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_om-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"WD\",\n      \"WB\"\n    ],\n    \"DAY\": [\n      \"Dilbata\",\n      \"Wiixata\",\n      \"Qibxata\",\n      \"Roobii\",\n      \"Kamiisa\",\n      \"Jimaata\",\n      \"Sanbata\"\n    ],\n    \"MONTH\": [\n      \"Amajjii\",\n      \"Guraandhala\",\n      \"Bitooteessa\",\n      \"Elba\",\n      \"Caamsa\",\n      \"Waxabajjii\",\n      \"Adooleessa\",\n      \"Hagayya\",\n      \"Fuulbana\",\n      \"Onkololeessa\",\n      \"Sadaasa\",\n      \"Muddee\"\n    ],\n    \"SHORTDAY\": [\n      \"Dil\",\n      \"Wix\",\n      \"Qib\",\n      \"Rob\",\n      \"Kam\",\n      \"Jim\",\n      \"San\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ama\",\n      \"Gur\",\n      \"Bit\",\n      \"Elb\",\n      \"Cam\",\n      \"Wax\",\n      \"Ado\",\n      \"Hag\",\n      \"Ful\",\n      \"Onk\",\n      \"Sad\",\n      \"Mud\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"om-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_om-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"WD\",\n      \"WB\"\n    ],\n    \"DAY\": [\n      \"Dilbata\",\n      \"Wiixata\",\n      \"Qibxata\",\n      \"Roobii\",\n      \"Kamiisa\",\n      \"Jimaata\",\n      \"Sanbata\"\n    ],\n    \"MONTH\": [\n      \"Amajjii\",\n      \"Guraandhala\",\n      \"Bitooteessa\",\n      \"Elba\",\n      \"Caamsa\",\n      \"Waxabajjii\",\n      \"Adooleessa\",\n      \"Hagayya\",\n      \"Fuulbana\",\n      \"Onkololeessa\",\n      \"Sadaasa\",\n      \"Muddee\"\n    ],\n    \"SHORTDAY\": [\n      \"Dil\",\n      \"Wix\",\n      \"Qib\",\n      \"Rob\",\n      \"Kam\",\n      \"Jim\",\n      \"San\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ama\",\n      \"Gur\",\n      \"Bit\",\n      \"Elb\",\n      \"Cam\",\n      \"Wax\",\n      \"Ado\",\n      \"Hag\",\n      \"Ful\",\n      \"Onk\",\n      \"Sad\",\n      \"Mud\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"om-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_om.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"WD\",\n      \"WB\"\n    ],\n    \"DAY\": [\n      \"Dilbata\",\n      \"Wiixata\",\n      \"Qibxata\",\n      \"Roobii\",\n      \"Kamiisa\",\n      \"Jimaata\",\n      \"Sanbata\"\n    ],\n    \"MONTH\": [\n      \"Amajjii\",\n      \"Guraandhala\",\n      \"Bitooteessa\",\n      \"Elba\",\n      \"Caamsa\",\n      \"Waxabajjii\",\n      \"Adooleessa\",\n      \"Hagayya\",\n      \"Fuulbana\",\n      \"Onkololeessa\",\n      \"Sadaasa\",\n      \"Muddee\"\n    ],\n    \"SHORTDAY\": [\n      \"Dil\",\n      \"Wix\",\n      \"Qib\",\n      \"Rob\",\n      \"Kam\",\n      \"Jim\",\n      \"San\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ama\",\n      \"Gur\",\n      \"Bit\",\n      \"Elb\",\n      \"Cam\",\n      \"Wax\",\n      \"Ado\",\n      \"Hag\",\n      \"Ful\",\n      \"Onk\",\n      \"Sad\",\n      \"Mud\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"om\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_or-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u0b30\\u0b2c\\u0b3f\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b38\\u0b4b\\u0b2e\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b2e\\u0b19\\u0b4d\\u0b17\\u0b33\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b2c\\u0b41\\u0b27\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b17\\u0b41\\u0b30\\u0b41\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b36\\u0b41\\u0b15\\u0b4d\\u0b30\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b36\\u0b28\\u0b3f\\u0b2c\\u0b3e\\u0b30\"\n    ],\n    \"MONTH\": [\n      \"\\u0b1c\\u0b3e\\u0b28\\u0b41\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2b\\u0b47\\u0b2c\\u0b43\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2e\\u0b3e\\u0b30\\u0b4d\\u0b1a\\u0b4d\\u0b1a\",\n      \"\\u0b05\\u0b2a\\u0b4d\\u0b30\\u0b47\\u0b32\",\n      \"\\u0b2e\\u0b07\",\n      \"\\u0b1c\\u0b41\\u0b28\",\n      \"\\u0b1c\\u0b41\\u0b32\\u0b3e\\u0b07\",\n      \"\\u0b05\\u0b17\\u0b37\\u0b4d\\u0b1f\",\n      \"\\u0b38\\u0b47\\u0b2a\\u0b4d\\u0b1f\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b05\\u0b15\\u0b4d\\u0b1f\\u0b4b\\u0b2c\\u0b30\",\n      \"\\u0b28\\u0b2d\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b21\\u0b3f\\u0b38\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b30\\u0b2c\\u0b3f\",\n      \"\\u0b38\\u0b4b\\u0b2e\",\n      \"\\u0b2e\\u0b19\\u0b4d\\u0b17\\u0b33\",\n      \"\\u0b2c\\u0b41\\u0b27\",\n      \"\\u0b17\\u0b41\\u0b30\\u0b41\",\n      \"\\u0b36\\u0b41\\u0b15\\u0b4d\\u0b30\",\n      \"\\u0b36\\u0b28\\u0b3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b1c\\u0b3e\\u0b28\\u0b41\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2b\\u0b47\\u0b2c\\u0b43\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2e\\u0b3e\\u0b30\\u0b4d\\u0b1a\\u0b4d\\u0b1a\",\n      \"\\u0b05\\u0b2a\\u0b4d\\u0b30\\u0b47\\u0b32\",\n      \"\\u0b2e\\u0b07\",\n      \"\\u0b1c\\u0b41\\u0b28\",\n      \"\\u0b1c\\u0b41\\u0b32\\u0b3e\\u0b07\",\n      \"\\u0b05\\u0b17\\u0b37\\u0b4d\\u0b1f\",\n      \"\\u0b38\\u0b47\\u0b2a\\u0b4d\\u0b1f\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b05\\u0b15\\u0b4d\\u0b1f\\u0b4b\\u0b2c\\u0b30\",\n      \"\\u0b28\\u0b2d\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b21\\u0b3f\\u0b38\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"or-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_or.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"pm\"\n    ],\n    \"DAY\": [\n      \"\\u0b30\\u0b2c\\u0b3f\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b38\\u0b4b\\u0b2e\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b2e\\u0b19\\u0b4d\\u0b17\\u0b33\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b2c\\u0b41\\u0b27\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b17\\u0b41\\u0b30\\u0b41\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b36\\u0b41\\u0b15\\u0b4d\\u0b30\\u0b2c\\u0b3e\\u0b30\",\n      \"\\u0b36\\u0b28\\u0b3f\\u0b2c\\u0b3e\\u0b30\"\n    ],\n    \"MONTH\": [\n      \"\\u0b1c\\u0b3e\\u0b28\\u0b41\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2b\\u0b47\\u0b2c\\u0b43\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2e\\u0b3e\\u0b30\\u0b4d\\u0b1a\\u0b4d\\u0b1a\",\n      \"\\u0b05\\u0b2a\\u0b4d\\u0b30\\u0b47\\u0b32\",\n      \"\\u0b2e\\u0b07\",\n      \"\\u0b1c\\u0b41\\u0b28\",\n      \"\\u0b1c\\u0b41\\u0b32\\u0b3e\\u0b07\",\n      \"\\u0b05\\u0b17\\u0b37\\u0b4d\\u0b1f\",\n      \"\\u0b38\\u0b47\\u0b2a\\u0b4d\\u0b1f\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b05\\u0b15\\u0b4d\\u0b1f\\u0b4b\\u0b2c\\u0b30\",\n      \"\\u0b28\\u0b2d\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b21\\u0b3f\\u0b38\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b30\\u0b2c\\u0b3f\",\n      \"\\u0b38\\u0b4b\\u0b2e\",\n      \"\\u0b2e\\u0b19\\u0b4d\\u0b17\\u0b33\",\n      \"\\u0b2c\\u0b41\\u0b27\",\n      \"\\u0b17\\u0b41\\u0b30\\u0b41\",\n      \"\\u0b36\\u0b41\\u0b15\\u0b4d\\u0b30\",\n      \"\\u0b36\\u0b28\\u0b3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b1c\\u0b3e\\u0b28\\u0b41\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2b\\u0b47\\u0b2c\\u0b43\\u0b06\\u0b30\\u0b40\",\n      \"\\u0b2e\\u0b3e\\u0b30\\u0b4d\\u0b1a\\u0b4d\\u0b1a\",\n      \"\\u0b05\\u0b2a\\u0b4d\\u0b30\\u0b47\\u0b32\",\n      \"\\u0b2e\\u0b07\",\n      \"\\u0b1c\\u0b41\\u0b28\",\n      \"\\u0b1c\\u0b41\\u0b32\\u0b3e\\u0b07\",\n      \"\\u0b05\\u0b17\\u0b37\\u0b4d\\u0b1f\",\n      \"\\u0b38\\u0b47\\u0b2a\\u0b4d\\u0b1f\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b05\\u0b15\\u0b4d\\u0b1f\\u0b4b\\u0b2c\\u0b30\",\n      \"\\u0b28\\u0b2d\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\",\n      \"\\u0b21\\u0b3f\\u0b38\\u0b47\\u0b2e\\u0b4d\\u0b2c\\u0b30\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"or\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_os-ge.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0440\\u0430\\u0437\\u043c\\u04d5\",\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0444\\u04d5\\u0441\\u0442\\u04d5\"\n    ],\n    \"DAY\": [\n      \"\\u0445\\u0443\\u044b\\u0446\\u0430\\u0443\\u0431\\u043e\\u043d\",\n      \"\\u043a\\u044a\\u0443\\u044b\\u0440\\u0438\\u0441\\u04d5\\u0440\",\n      \"\\u0434\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u04d5\\u0440\\u0442\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u0446\\u044b\\u043f\\u043f\\u04d5\\u0440\\u04d5\\u043c\",\n      \"\\u043c\\u0430\\u0439\\u0440\\u04d5\\u043c\\u0431\\u043e\\u043d\",\n      \"\\u0441\\u0430\\u0431\\u0430\\u0442\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044b\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u044a\\u0438\\u0439\\u044b\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0439\\u044b\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u044b\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0445\\u0446\\u0431\",\n      \"\\u043a\\u0440\\u0441\",\n      \"\\u0434\\u0446\\u0433\",\n      \"\\u04d5\\u0440\\u0442\",\n      \"\\u0446\\u043f\\u0440\",\n      \"\\u043c\\u0440\\u0431\",\n      \"\\u0441\\u0431\\u0442\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y '\\u0430\\u0437'\",\n    \"longDate\": \"d MMMM, y '\\u0430\\u0437'\",\n    \"medium\": \"dd MMM y '\\u0430\\u0437' HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y '\\u0430\\u0437'\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GEL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"os-ge\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_os-ru.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0440\\u0430\\u0437\\u043c\\u04d5\",\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0444\\u04d5\\u0441\\u0442\\u04d5\"\n    ],\n    \"DAY\": [\n      \"\\u0445\\u0443\\u044b\\u0446\\u0430\\u0443\\u0431\\u043e\\u043d\",\n      \"\\u043a\\u044a\\u0443\\u044b\\u0440\\u0438\\u0441\\u04d5\\u0440\",\n      \"\\u0434\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u04d5\\u0440\\u0442\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u0446\\u044b\\u043f\\u043f\\u04d5\\u0440\\u04d5\\u043c\",\n      \"\\u043c\\u0430\\u0439\\u0440\\u04d5\\u043c\\u0431\\u043e\\u043d\",\n      \"\\u0441\\u0430\\u0431\\u0430\\u0442\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044b\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u044a\\u0438\\u0439\\u044b\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0439\\u044b\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u044b\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0445\\u0446\\u0431\",\n      \"\\u043a\\u0440\\u0441\",\n      \"\\u0434\\u0446\\u0433\",\n      \"\\u04d5\\u0440\\u0442\",\n      \"\\u0446\\u043f\\u0440\",\n      \"\\u043c\\u0440\\u0431\",\n      \"\\u0441\\u0431\\u0442\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y '\\u0430\\u0437'\",\n    \"longDate\": \"d MMMM, y '\\u0430\\u0437'\",\n    \"medium\": \"dd MMM y '\\u0430\\u0437' HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y '\\u0430\\u0437'\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0440\\u0443\\u0431.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"os-ru\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_os.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0440\\u0430\\u0437\\u043c\\u04d5\",\n      \"\\u04d5\\u043c\\u0431\\u0438\\u0441\\u0431\\u043e\\u043d\\u044b \\u0444\\u04d5\\u0441\\u0442\\u04d5\"\n    ],\n    \"DAY\": [\n      \"\\u0445\\u0443\\u044b\\u0446\\u0430\\u0443\\u0431\\u043e\\u043d\",\n      \"\\u043a\\u044a\\u0443\\u044b\\u0440\\u0438\\u0441\\u04d5\\u0440\",\n      \"\\u0434\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u04d5\\u0440\\u0442\\u044b\\u0446\\u0446\\u04d5\\u0433\",\n      \"\\u0446\\u044b\\u043f\\u043f\\u04d5\\u0440\\u04d5\\u043c\",\n      \"\\u043c\\u0430\\u0439\\u0440\\u04d5\\u043c\\u0431\\u043e\\u043d\",\n      \"\\u0441\\u0430\\u0431\\u0430\\u0442\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044b\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u044a\\u0438\\u0439\\u044b\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044b\",\n      \"\\u043c\\u0430\\u0439\\u044b\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u044b\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044b\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0445\\u0446\\u0431\",\n      \"\\u043a\\u0440\\u0441\",\n      \"\\u0434\\u0446\\u0433\",\n      \"\\u04d5\\u0440\\u0442\",\n      \"\\u0446\\u043f\\u0440\",\n      \"\\u043c\\u0440\\u0431\",\n      \"\\u0441\\u0431\\u0442\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432.\",\n      \"\\u043c\\u0430\\u0440.\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044b\",\n      \"\\u0438\\u044e\\u043b\\u044b\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y '\\u0430\\u0437'\",\n    \"longDate\": \"d MMMM, y '\\u0430\\u0437'\",\n    \"medium\": \"dd MMM y '\\u0430\\u0437' HH:mm:ss\",\n    \"mediumDate\": \"dd MMM y '\\u0430\\u0437'\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"GEL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"os\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pa-arab-pk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u064f\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u064f\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pa-arab-pk\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pa-arab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u064f\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u064f\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE, dd MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pa-arab\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pa-guru-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0a2a\\u0a42.\\u0a26\\u0a41.\",\n      \"\\u0a2c\\u0a3e.\\u0a26\\u0a41.\"\n    ],\n    \"DAY\": [\n      \"\\u0a10\\u0a24\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a4b\\u0a2e\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a35\\u0a40\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\\u0a35\\u0a3e\\u0a30\"\n    ],\n    \"MONTH\": [\n      \"\\u0a1c\\u0a28\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2b\\u0a3c\\u0a30\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\\u0a32\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\\u0a08\",\n      \"\\u0a05\\u0a17\\u0a38\\u0a24\",\n      \"\\u0a38\\u0a24\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\\u0a2c\\u0a30\",\n      \"\\u0a28\\u0a35\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a26\\u0a38\\u0a70\\u0a2c\\u0a30\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0a10\\u0a24\",\n      \"\\u0a38\\u0a4b\\u0a2e\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\",\n      \"\\u0a35\\u0a40\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0a1c\\u0a28\",\n      \"\\u0a2b\\u0a3c\\u0a30\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\",\n      \"\\u0a05\\u0a17\",\n      \"\\u0a38\\u0a24\\u0a70\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\",\n      \"\\u0a28\\u0a35\\u0a70\",\n      \"\\u0a26\\u0a38\\u0a70\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pa-guru-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pa-guru.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0a2a\\u0a42.\\u0a26\\u0a41.\",\n      \"\\u0a2c\\u0a3e.\\u0a26\\u0a41.\"\n    ],\n    \"DAY\": [\n      \"\\u0a10\\u0a24\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a4b\\u0a2e\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a35\\u0a40\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\\u0a35\\u0a3e\\u0a30\"\n    ],\n    \"MONTH\": [\n      \"\\u0a1c\\u0a28\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2b\\u0a3c\\u0a30\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\\u0a32\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\\u0a08\",\n      \"\\u0a05\\u0a17\\u0a38\\u0a24\",\n      \"\\u0a38\\u0a24\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\\u0a2c\\u0a30\",\n      \"\\u0a28\\u0a35\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a26\\u0a38\\u0a70\\u0a2c\\u0a30\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0a10\\u0a24\",\n      \"\\u0a38\\u0a4b\\u0a2e\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\",\n      \"\\u0a35\\u0a40\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0a1c\\u0a28\",\n      \"\\u0a2b\\u0a3c\\u0a30\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\",\n      \"\\u0a05\\u0a17\",\n      \"\\u0a38\\u0a24\\u0a70\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\",\n      \"\\u0a28\\u0a35\\u0a70\",\n      \"\\u0a26\\u0a38\\u0a70\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pa-guru\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pa.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0a2a\\u0a42.\\u0a26\\u0a41.\",\n      \"\\u0a2c\\u0a3e.\\u0a26\\u0a41.\"\n    ],\n    \"DAY\": [\n      \"\\u0a10\\u0a24\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a4b\\u0a2e\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a35\\u0a40\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\\u0a35\\u0a3e\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\\u0a35\\u0a3e\\u0a30\"\n    ],\n    \"MONTH\": [\n      \"\\u0a1c\\u0a28\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2b\\u0a3c\\u0a30\\u0a35\\u0a30\\u0a40\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\\u0a32\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\\u0a08\",\n      \"\\u0a05\\u0a17\\u0a38\\u0a24\",\n      \"\\u0a38\\u0a24\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\\u0a2c\\u0a30\",\n      \"\\u0a28\\u0a35\\u0a70\\u0a2c\\u0a30\",\n      \"\\u0a26\\u0a38\\u0a70\\u0a2c\\u0a30\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0a10\\u0a24\",\n      \"\\u0a38\\u0a4b\\u0a2e\",\n      \"\\u0a2e\\u0a70\\u0a17\\u0a32\",\n      \"\\u0a2c\\u0a41\\u0a71\\u0a27\",\n      \"\\u0a35\\u0a40\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\",\n      \"\\u0a38\\u0a3c\\u0a28\\u0a3f\\u0a71\\u0a1a\\u0a30\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0a1c\\u0a28\",\n      \"\\u0a2b\\u0a3c\\u0a30\",\n      \"\\u0a2e\\u0a3e\\u0a30\\u0a1a\",\n      \"\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\",\n      \"\\u0a2e\\u0a08\",\n      \"\\u0a1c\\u0a42\\u0a28\",\n      \"\\u0a1c\\u0a41\\u0a32\\u0a3e\",\n      \"\\u0a05\\u0a17\",\n      \"\\u0a38\\u0a24\\u0a70\",\n      \"\\u0a05\\u0a15\\u0a24\\u0a42\",\n      \"\\u0a28\\u0a35\\u0a70\",\n      \"\\u0a26\\u0a38\\u0a70\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pa\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pl-pl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"niedziela\",\n      \"poniedzia\\u0142ek\",\n      \"wtorek\",\n      \"\\u015broda\",\n      \"czwartek\",\n      \"pi\\u0105tek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"stycznia\",\n      \"lutego\",\n      \"marca\",\n      \"kwietnia\",\n      \"maja\",\n      \"czerwca\",\n      \"lipca\",\n      \"sierpnia\",\n      \"wrze\\u015bnia\",\n      \"pa\\u017adziernika\",\n      \"listopada\",\n      \"grudnia\"\n    ],\n    \"SHORTDAY\": [\n      \"niedz.\",\n      \"pon.\",\n      \"wt.\",\n      \"\\u015br.\",\n      \"czw.\",\n      \"pt.\",\n      \"sob.\"\n    ],\n    \"SHORTMONTH\": [\n      \"sty\",\n      \"lut\",\n      \"mar\",\n      \"kwi\",\n      \"maj\",\n      \"cze\",\n      \"lip\",\n      \"sie\",\n      \"wrz\",\n      \"pa\\u017a\",\n      \"lis\",\n      \"gru\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"z\\u0142\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pl-pl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"niedziela\",\n      \"poniedzia\\u0142ek\",\n      \"wtorek\",\n      \"\\u015broda\",\n      \"czwartek\",\n      \"pi\\u0105tek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"stycznia\",\n      \"lutego\",\n      \"marca\",\n      \"kwietnia\",\n      \"maja\",\n      \"czerwca\",\n      \"lipca\",\n      \"sierpnia\",\n      \"wrze\\u015bnia\",\n      \"pa\\u017adziernika\",\n      \"listopada\",\n      \"grudnia\"\n    ],\n    \"SHORTDAY\": [\n      \"niedz.\",\n      \"pon.\",\n      \"wt.\",\n      \"\\u015br.\",\n      \"czw.\",\n      \"pt.\",\n      \"sob.\"\n    ],\n    \"SHORTMONTH\": [\n      \"sty\",\n      \"lut\",\n      \"mar\",\n      \"kwi\",\n      \"maj\",\n      \"cze\",\n      \"lip\",\n      \"sie\",\n      \"wrz\",\n      \"pa\\u017a\",\n      \"lis\",\n      \"gru\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"z\\u0142\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ps-af.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u063a.\\u0645.\",\n      \"\\u063a.\\u0648.\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u064a\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06ab\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u064a\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06ab\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE \\u062f y \\u062f MMMM d\",\n    \"longDate\": \"\\u062f y \\u062f MMMM d\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Af.\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ps-af\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ps.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u063a.\\u0645.\",\n      \"\\u063a.\\u0648.\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u064a\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06ab\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u064a\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u064a\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06ab\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE \\u062f y \\u062f MMMM d\",\n    \"longDate\": \"\\u062f y \\u062f MMMM d\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Af.\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ps\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-ao.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Kz\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-ao\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-br.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y HH:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pt-br\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-cv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CVE\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-cv\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-gw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-gw\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-mo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MOP\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-mo\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-mz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MTn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-mz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-pt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-pt\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-st.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Db\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-st\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt-tl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"da manh\\u00e3\",\n      \"da tarde\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"dd/MM/y HH:mm:ss\",\n    \"mediumDate\": \"dd/MM/y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"pt-tl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_pt.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"domingo\",\n      \"segunda-feira\",\n      \"ter\\u00e7a-feira\",\n      \"quarta-feira\",\n      \"quinta-feira\",\n      \"sexta-feira\",\n      \"s\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"janeiro\",\n      \"fevereiro\",\n      \"mar\\u00e7o\",\n      \"abril\",\n      \"maio\",\n      \"junho\",\n      \"julho\",\n      \"agosto\",\n      \"setembro\",\n      \"outubro\",\n      \"novembro\",\n      \"dezembro\"\n    ],\n    \"SHORTDAY\": [\n      \"dom\",\n      \"seg\",\n      \"ter\",\n      \"qua\",\n      \"qui\",\n      \"sex\",\n      \"s\\u00e1b\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"fev\",\n      \"mar\",\n      \"abr\",\n      \"mai\",\n      \"jun\",\n      \"jul\",\n      \"ago\",\n      \"set\",\n      \"out\",\n      \"nov\",\n      \"dez\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y HH:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R$\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"pt\",\n  \"pluralCat\": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_qu-bo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Domingo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Mi\\u00e9rcoles\",\n      \"Jueves\",\n      \"Viernes\",\n      \"S\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"Qulla puquy\",\n      \"Hatun puquy\",\n      \"Pauqar waray\",\n      \"Ayriwa\",\n      \"Aymuray\",\n      \"Inti raymi\",\n      \"Anta Sitwa\",\n      \"Qhapaq Sitwa\",\n      \"Uma raymi\",\n      \"Kantaray\",\n      \"Ayamarq\\u02bca\",\n      \"Kapaq Raymi\"\n    ],\n    \"SHORTDAY\": [\n      \"Dom\",\n      \"Lun\",\n      \"Mar\",\n      \"Mi\\u00e9\",\n      \"Jue\",\n      \"Vie\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qul\",\n      \"Hat\",\n      \"Pau\",\n      \"Ayr\",\n      \"Aym\",\n      \"Int\",\n      \"Ant\",\n      \"Qha\",\n      \"Uma\",\n      \"Kan\",\n      \"Aya\",\n      \"Kap\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d hh:mm:ss a\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"dd/MM/y hh:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Bs\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"qu-bo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_qu-ec.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Domingo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Mi\\u00e9rcoles\",\n      \"Jueves\",\n      \"Viernes\",\n      \"S\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"Qulla puquy\",\n      \"Hatun puquy\",\n      \"Pauqar waray\",\n      \"Ayriwa\",\n      \"Aymuray\",\n      \"Inti raymi\",\n      \"Anta Sitwa\",\n      \"Qhapaq Sitwa\",\n      \"Uma raymi\",\n      \"Kantaray\",\n      \"Ayamarq\\u02bca\",\n      \"Kapaq Raymi\"\n    ],\n    \"SHORTDAY\": [\n      \"Dom\",\n      \"Lun\",\n      \"Mar\",\n      \"Mi\\u00e9\",\n      \"Jue\",\n      \"Vie\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qul\",\n      \"Hat\",\n      \"Pau\",\n      \"Ayr\",\n      \"Aym\",\n      \"Int\",\n      \"Ant\",\n      \"Qha\",\n      \"Uma\",\n      \"Kan\",\n      \"Aya\",\n      \"Kap\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d hh:mm:ss a\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"dd/MM/y hh:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"qu-ec\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_qu-pe.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Domingo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Mi\\u00e9rcoles\",\n      \"Jueves\",\n      \"Viernes\",\n      \"S\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"Qulla puquy\",\n      \"Hatun puquy\",\n      \"Pauqar waray\",\n      \"Ayriwa\",\n      \"Aymuray\",\n      \"Inti raymi\",\n      \"Anta Sitwa\",\n      \"Qhapaq Sitwa\",\n      \"Uma raymi\",\n      \"Kantaray\",\n      \"Ayamarq\\u02bca\",\n      \"Kapaq Raymi\"\n    ],\n    \"SHORTDAY\": [\n      \"Dom\",\n      \"Lun\",\n      \"Mar\",\n      \"Mi\\u00e9\",\n      \"Jue\",\n      \"Vie\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qul\",\n      \"Hat\",\n      \"Pau\",\n      \"Ayr\",\n      \"Aym\",\n      \"Int\",\n      \"Ant\",\n      \"Qha\",\n      \"Uma\",\n      \"Kan\",\n      \"Aya\",\n      \"Kap\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d hh:mm:ss a\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"dd/MM/y hh:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"S/.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"qu-pe\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_qu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"Domingo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Mi\\u00e9rcoles\",\n      \"Jueves\",\n      \"Viernes\",\n      \"S\\u00e1bado\"\n    ],\n    \"MONTH\": [\n      \"Qulla puquy\",\n      \"Hatun puquy\",\n      \"Pauqar waray\",\n      \"Ayriwa\",\n      \"Aymuray\",\n      \"Inti raymi\",\n      \"Anta Sitwa\",\n      \"Qhapaq Sitwa\",\n      \"Uma raymi\",\n      \"Kantaray\",\n      \"Ayamarq\\u02bca\",\n      \"Kapaq Raymi\"\n    ],\n    \"SHORTDAY\": [\n      \"Dom\",\n      \"Lun\",\n      \"Mar\",\n      \"Mi\\u00e9\",\n      \"Jue\",\n      \"Vie\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qul\",\n      \"Hat\",\n      \"Pau\",\n      \"Ayr\",\n      \"Aym\",\n      \"Int\",\n      \"Ant\",\n      \"Qha\",\n      \"Uma\",\n      \"Kan\",\n      \"Aya\",\n      \"Kap\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d hh:mm:ss a\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"hh:mm:ss a\",\n    \"short\": \"dd/MM/y hh:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"hh:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"S/.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"qu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rm-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"sm\"\n    ],\n    \"DAY\": [\n      \"dumengia\",\n      \"glindesdi\",\n      \"mardi\",\n      \"mesemna\",\n      \"gievgia\",\n      \"venderdi\",\n      \"sonda\"\n    ],\n    \"MONTH\": [\n      \"schaner\",\n      \"favrer\",\n      \"mars\",\n      \"avrigl\",\n      \"matg\",\n      \"zercladur\",\n      \"fanadur\",\n      \"avust\",\n      \"settember\",\n      \"october\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"du\",\n      \"gli\",\n      \"ma\",\n      \"me\",\n      \"gie\",\n      \"ve\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"schan.\",\n      \"favr.\",\n      \"mars\",\n      \"avr.\",\n      \"matg\",\n      \"zercl.\",\n      \"fan.\",\n      \"avust\",\n      \"sett.\",\n      \"oct.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, 'ils' d 'da' MMMM y\",\n    \"longDate\": \"d 'da' MMMM y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rm-ch\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"am\",\n      \"sm\"\n    ],\n    \"DAY\": [\n      \"dumengia\",\n      \"glindesdi\",\n      \"mardi\",\n      \"mesemna\",\n      \"gievgia\",\n      \"venderdi\",\n      \"sonda\"\n    ],\n    \"MONTH\": [\n      \"schaner\",\n      \"favrer\",\n      \"mars\",\n      \"avrigl\",\n      \"matg\",\n      \"zercladur\",\n      \"fanadur\",\n      \"avust\",\n      \"settember\",\n      \"october\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"du\",\n      \"gli\",\n      \"ma\",\n      \"me\",\n      \"gie\",\n      \"ve\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"schan.\",\n      \"favr.\",\n      \"mars\",\n      \"avr.\",\n      \"matg\",\n      \"zercl.\",\n      \"fan.\",\n      \"avust\",\n      \"sett.\",\n      \"oct.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, 'ils' d 'da' MMMM y\",\n    \"longDate\": \"d 'da' MMMM y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-yy HH:mm\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rn-bi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Z.MU.\",\n      \"Z.MW.\"\n    ],\n    \"DAY\": [\n      \"Ku w\\u2019indwi\",\n      \"Ku wa mbere\",\n      \"Ku wa kabiri\",\n      \"Ku wa gatatu\",\n      \"Ku wa kane\",\n      \"Ku wa gatanu\",\n      \"Ku wa gatandatu\"\n    ],\n    \"MONTH\": [\n      \"Nzero\",\n      \"Ruhuhuma\",\n      \"Ntwarante\",\n      \"Ndamukiza\",\n      \"Rusama\",\n      \"Ruheshi\",\n      \"Mukakaro\",\n      \"Nyandagaro\",\n      \"Nyakanga\",\n      \"Gitugutu\",\n      \"Munyonyo\",\n      \"Kigarama\"\n    ],\n    \"SHORTDAY\": [\n      \"cu.\",\n      \"mbe.\",\n      \"kab.\",\n      \"gtu.\",\n      \"kan.\",\n      \"gnu.\",\n      \"gnd.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mut.\",\n      \"Gas.\",\n      \"Wer.\",\n      \"Mat.\",\n      \"Gic.\",\n      \"Kam.\",\n      \"Nya.\",\n      \"Kan.\",\n      \"Nze.\",\n      \"Ukw.\",\n      \"Ugu.\",\n      \"Uku.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FBu\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rn-bi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Z.MU.\",\n      \"Z.MW.\"\n    ],\n    \"DAY\": [\n      \"Ku w\\u2019indwi\",\n      \"Ku wa mbere\",\n      \"Ku wa kabiri\",\n      \"Ku wa gatatu\",\n      \"Ku wa kane\",\n      \"Ku wa gatanu\",\n      \"Ku wa gatandatu\"\n    ],\n    \"MONTH\": [\n      \"Nzero\",\n      \"Ruhuhuma\",\n      \"Ntwarante\",\n      \"Ndamukiza\",\n      \"Rusama\",\n      \"Ruheshi\",\n      \"Mukakaro\",\n      \"Nyandagaro\",\n      \"Nyakanga\",\n      \"Gitugutu\",\n      \"Munyonyo\",\n      \"Kigarama\"\n    ],\n    \"SHORTDAY\": [\n      \"cu.\",\n      \"mbe.\",\n      \"kab.\",\n      \"gtu.\",\n      \"kan.\",\n      \"gnu.\",\n      \"gnd.\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mut.\",\n      \"Gas.\",\n      \"Wer.\",\n      \"Mat.\",\n      \"Gic.\",\n      \"Kam.\",\n      \"Nya.\",\n      \"Kan.\",\n      \"Nze.\",\n      \"Ukw.\",\n      \"Ugu.\",\n      \"Uku.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FBu\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ro-md.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"duminic\\u0103\",\n      \"luni\",\n      \"mar\\u021bi\",\n      \"miercuri\",\n      \"joi\",\n      \"vineri\",\n      \"s\\u00e2mb\\u0103t\\u0103\"\n    ],\n    \"MONTH\": [\n      \"ianuarie\",\n      \"februarie\",\n      \"martie\",\n      \"aprilie\",\n      \"mai\",\n      \"iunie\",\n      \"iulie\",\n      \"august\",\n      \"septembrie\",\n      \"octombrie\",\n      \"noiembrie\",\n      \"decembrie\"\n    ],\n    \"SHORTDAY\": [\n      \"Dum\",\n      \"Lun\",\n      \"Mar\",\n      \"Mie\",\n      \"Joi\",\n      \"Vin\",\n      \"S\\u00e2m\"\n    ],\n    \"SHORTMONTH\": [\n      \"ian.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"iun.\",\n      \"iul.\",\n      \"aug.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MDL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ro-md\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ro-ro.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"duminic\\u0103\",\n      \"luni\",\n      \"mar\\u021bi\",\n      \"miercuri\",\n      \"joi\",\n      \"vineri\",\n      \"s\\u00e2mb\\u0103t\\u0103\"\n    ],\n    \"MONTH\": [\n      \"ianuarie\",\n      \"februarie\",\n      \"martie\",\n      \"aprilie\",\n      \"mai\",\n      \"iunie\",\n      \"iulie\",\n      \"august\",\n      \"septembrie\",\n      \"octombrie\",\n      \"noiembrie\",\n      \"decembrie\"\n    ],\n    \"SHORTDAY\": [\n      \"Dum\",\n      \"Lun\",\n      \"Mar\",\n      \"Mie\",\n      \"Joi\",\n      \"Vin\",\n      \"S\\u00e2m\"\n    ],\n    \"SHORTMONTH\": [\n      \"ian.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"iun.\",\n      \"iul.\",\n      \"aug.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RON\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ro-ro\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ro.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"a.m.\",\n      \"p.m.\"\n    ],\n    \"DAY\": [\n      \"duminic\\u0103\",\n      \"luni\",\n      \"mar\\u021bi\",\n      \"miercuri\",\n      \"joi\",\n      \"vineri\",\n      \"s\\u00e2mb\\u0103t\\u0103\"\n    ],\n    \"MONTH\": [\n      \"ianuarie\",\n      \"februarie\",\n      \"martie\",\n      \"aprilie\",\n      \"mai\",\n      \"iunie\",\n      \"iulie\",\n      \"august\",\n      \"septembrie\",\n      \"octombrie\",\n      \"noiembrie\",\n      \"decembrie\"\n    ],\n    \"SHORTDAY\": [\n      \"Dum\",\n      \"Lun\",\n      \"Mar\",\n      \"Mie\",\n      \"Joi\",\n      \"Vin\",\n      \"S\\u00e2m\"\n    ],\n    \"SHORTMONTH\": [\n      \"ian.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"mai\",\n      \"iun.\",\n      \"iul.\",\n      \"aug.\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.y HH:mm\",\n    \"shortDate\": \"dd.MM.y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RON\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ro\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rof-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"kang\\u2019ama\",\n      \"kingoto\"\n    ],\n    \"DAY\": [\n      \"Ijumapili\",\n      \"Ijumatatu\",\n      \"Ijumanne\",\n      \"Ijumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Ijumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mweri wa kwanza\",\n      \"Mweri wa kaili\",\n      \"Mweri wa katatu\",\n      \"Mweri wa kaana\",\n      \"Mweri wa tanu\",\n      \"Mweri wa sita\",\n      \"Mweri wa saba\",\n      \"Mweri wa nane\",\n      \"Mweri wa tisa\",\n      \"Mweri wa ikumi\",\n      \"Mweri wa ikumi na moja\",\n      \"Mweri wa ikumi na mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"Ijp\",\n      \"Ijt\",\n      \"Ijn\",\n      \"Ijtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Ijm\"\n    ],\n    \"SHORTMONTH\": [\n      \"M1\",\n      \"M2\",\n      \"M3\",\n      \"M4\",\n      \"M5\",\n      \"M6\",\n      \"M7\",\n      \"M8\",\n      \"M9\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"rof-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rof.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"kang\\u2019ama\",\n      \"kingoto\"\n    ],\n    \"DAY\": [\n      \"Ijumapili\",\n      \"Ijumatatu\",\n      \"Ijumanne\",\n      \"Ijumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Ijumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mweri wa kwanza\",\n      \"Mweri wa kaili\",\n      \"Mweri wa katatu\",\n      \"Mweri wa kaana\",\n      \"Mweri wa tanu\",\n      \"Mweri wa sita\",\n      \"Mweri wa saba\",\n      \"Mweri wa nane\",\n      \"Mweri wa tisa\",\n      \"Mweri wa ikumi\",\n      \"Mweri wa ikumi na moja\",\n      \"Mweri wa ikumi na mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"Ijp\",\n      \"Ijt\",\n      \"Ijn\",\n      \"Ijtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Ijm\"\n    ],\n    \"SHORTMONTH\": [\n      \"M1\",\n      \"M2\",\n      \"M3\",\n      \"M4\",\n      \"M5\",\n      \"M6\",\n      \"M7\",\n      \"M8\",\n      \"M9\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"rof\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-by.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"BYR\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-by\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-kg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KGS\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-kg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-kz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b8\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-kz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-md.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MDL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-md\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-ru.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0440\\u0443\\u0431.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-ru\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru-ua.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b4\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru-ua\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ru.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n      \"\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n      \"\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n      \"\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f\",\n      \"\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430\",\n      \"\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f\",\n      \"\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0432\\u0441\",\n      \"\\u043f\\u043d\",\n      \"\\u0432\\u0442\",\n      \"\\u0441\\u0440\",\n      \"\\u0447\\u0442\",\n      \"\\u043f\\u0442\",\n      \"\\u0441\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u044f\\u043d\\u0432.\",\n      \"\\u0444\\u0435\\u0432\\u0440.\",\n      \"\\u043c\\u0430\\u0440\\u0442\\u0430\",\n      \"\\u0430\\u043f\\u0440.\",\n      \"\\u043c\\u0430\\u044f\",\n      \"\\u0438\\u044e\\u043d\\u044f\",\n      \"\\u0438\\u044e\\u043b\\u044f\",\n      \"\\u0430\\u0432\\u0433.\",\n      \"\\u0441\\u0435\\u043d\\u0442.\",\n      \"\\u043e\\u043a\\u0442.\",\n      \"\\u043d\\u043e\\u044f\\u0431.\",\n      \"\\u0434\\u0435\\u043a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0433'.\",\n    \"longDate\": \"d MMMM y '\\u0433'.\",\n    \"medium\": \"d MMM y '\\u0433'. H:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0433'.\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0440\\u0443\\u0431.\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ru\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rw-rw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Ku cyumweru\",\n      \"Kuwa mbere\",\n      \"Kuwa kabiri\",\n      \"Kuwa gatatu\",\n      \"Kuwa kane\",\n      \"Kuwa gatanu\",\n      \"Kuwa gatandatu\"\n    ],\n    \"MONTH\": [\n      \"Mutarama\",\n      \"Gashyantare\",\n      \"Werurwe\",\n      \"Mata\",\n      \"Gicuransi\",\n      \"Kamena\",\n      \"Nyakanga\",\n      \"Kanama\",\n      \"Nzeli\",\n      \"Ukwakira\",\n      \"Ugushyingo\",\n      \"Ukuboza\"\n    ],\n    \"SHORTDAY\": [\n      \"cyu.\",\n      \"mbe.\",\n      \"kab.\",\n      \"gtu.\",\n      \"kan.\",\n      \"gnu.\",\n      \"gnd.\"\n    ],\n    \"SHORTMONTH\": [\n      \"mut.\",\n      \"gas.\",\n      \"wer.\",\n      \"mat.\",\n      \"gic.\",\n      \"kam.\",\n      \"nya.\",\n      \"kan.\",\n      \"nze.\",\n      \"ukw.\",\n      \"ugu.\",\n      \"uku.\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"rw-rw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Ku cyumweru\",\n      \"Kuwa mbere\",\n      \"Kuwa kabiri\",\n      \"Kuwa gatatu\",\n      \"Kuwa kane\",\n      \"Kuwa gatanu\",\n      \"Kuwa gatandatu\"\n    ],\n    \"MONTH\": [\n      \"Mutarama\",\n      \"Gashyantare\",\n      \"Werurwe\",\n      \"Mata\",\n      \"Gicuransi\",\n      \"Kamena\",\n      \"Nyakanga\",\n      \"Kanama\",\n      \"Nzeli\",\n      \"Ukwakira\",\n      \"Ugushyingo\",\n      \"Ukuboza\"\n    ],\n    \"SHORTDAY\": [\n      \"cyu.\",\n      \"mbe.\",\n      \"kab.\",\n      \"gtu.\",\n      \"kan.\",\n      \"gnu.\",\n      \"gnd.\"\n    ],\n    \"SHORTMONTH\": [\n      \"mut.\",\n      \"gas.\",\n      \"wer.\",\n      \"mat.\",\n      \"gic.\",\n      \"kam.\",\n      \"nya.\",\n      \"kan.\",\n      \"nze.\",\n      \"ukw.\",\n      \"ugu.\",\n      \"uku.\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"rw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rwk-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rwk-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_rwk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"rwk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sah-ru.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u042d\\u0418\",\n      \"\\u042d\\u041a\"\n    ],\n    \"DAY\": [\n      \"\\u0411\\u0430\\u0441\\u043a\\u044b\\u04bb\\u044b\\u0430\\u043d\\u043d\\u044c\\u0430\",\n      \"\\u0411\\u044d\\u043d\\u0438\\u0434\\u0438\\u044d\\u043b\\u0438\\u043d\\u043d\\u044c\\u0438\\u043a\",\n      \"\\u041e\\u043f\\u0442\\u0443\\u043e\\u0440\\u0443\\u043d\\u043d\\u044c\\u0443\\u043a\",\n      \"\\u0421\\u044d\\u0440\\u044d\\u0434\\u044d\",\n      \"\\u0427\\u044d\\u043f\\u043f\\u0438\\u044d\\u0440\",\n      \"\\u0411\\u044d\\u044d\\u0442\\u0438\\u04a5\\u0441\\u044d\",\n      \"\\u0421\\u0443\\u0431\\u0443\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0422\\u043e\\u0445\\u0441\\u0443\\u043d\\u043d\\u044c\\u0443\",\n      \"\\u041e\\u043b\\u0443\\u043d\\u043d\\u044c\\u0443\",\n      \"\\u041a\\u0443\\u043b\\u0443\\u043d \\u0442\\u0443\\u0442\\u0430\\u0440\",\n      \"\\u041c\\u0443\\u0443\\u0441 \\u0443\\u0441\\u0442\\u0430\\u0440\",\n      \"\\u042b\\u0430\\u043c \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0411\\u044d\\u0441 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u041e\\u0442 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0410\\u0442\\u044b\\u0440\\u0434\\u044c\\u044b\\u0445 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0411\\u0430\\u043b\\u0430\\u0495\\u0430\\u043d \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0410\\u043b\\u0442\\u044b\\u043d\\u043d\\u044c\\u044b\",\n      \"\\u0421\\u044d\\u0442\\u0438\\u043d\\u043d\\u044c\\u0438\",\n      \"\\u0410\\u0445\\u0441\\u044b\\u043d\\u043d\\u044c\\u044b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0411\\u0441\",\n      \"\\u0411\\u043d\",\n      \"\\u041e\\u043f\",\n      \"\\u0421\\u044d\",\n      \"\\u0427\\u043f\",\n      \"\\u0411\\u044d\",\n      \"\\u0421\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0422\\u043e\\u0445\\u0441\",\n      \"\\u041e\\u043b\\u0443\\u043d\",\n      \"\\u041a\\u043b\\u043d_\\u0442\\u0442\\u0440\",\n      \"\\u041c\\u0443\\u0441_\\u0443\\u0441\\u0442\",\n      \"\\u042b\\u0430\\u043c_\\u0439\\u043d\",\n      \"\\u0411\\u044d\\u0441_\\u0439\\u043d\",\n      \"\\u041e\\u0442_\\u0439\\u043d\",\n      \"\\u0410\\u0442\\u0440\\u0434\\u044c_\\u0439\\u043d\",\n      \"\\u0411\\u043b\\u0495\\u043d_\\u0439\\u043d\",\n      \"\\u0410\\u043b\\u0442\",\n      \"\\u0421\\u044d\\u0442\",\n      \"\\u0410\\u0445\\u0441\"\n    ],\n    \"fullDate\": \"y '\\u0441\\u044b\\u043b' MMMM d '\\u043a\\u04af\\u043d\\u044d', EEEE\",\n    \"longDate\": \"y, MMMM d\",\n    \"medium\": \"y, MMM d HH:mm:ss\",\n    \"mediumDate\": \"y, MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/M/d HH:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0440\\u0443\\u0431.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sah-ru\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sah.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u042d\\u0418\",\n      \"\\u042d\\u041a\"\n    ],\n    \"DAY\": [\n      \"\\u0411\\u0430\\u0441\\u043a\\u044b\\u04bb\\u044b\\u0430\\u043d\\u043d\\u044c\\u0430\",\n      \"\\u0411\\u044d\\u043d\\u0438\\u0434\\u0438\\u044d\\u043b\\u0438\\u043d\\u043d\\u044c\\u0438\\u043a\",\n      \"\\u041e\\u043f\\u0442\\u0443\\u043e\\u0440\\u0443\\u043d\\u043d\\u044c\\u0443\\u043a\",\n      \"\\u0421\\u044d\\u0440\\u044d\\u0434\\u044d\",\n      \"\\u0427\\u044d\\u043f\\u043f\\u0438\\u044d\\u0440\",\n      \"\\u0411\\u044d\\u044d\\u0442\\u0438\\u04a5\\u0441\\u044d\",\n      \"\\u0421\\u0443\\u0431\\u0443\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0422\\u043e\\u0445\\u0441\\u0443\\u043d\\u043d\\u044c\\u0443\",\n      \"\\u041e\\u043b\\u0443\\u043d\\u043d\\u044c\\u0443\",\n      \"\\u041a\\u0443\\u043b\\u0443\\u043d \\u0442\\u0443\\u0442\\u0430\\u0440\",\n      \"\\u041c\\u0443\\u0443\\u0441 \\u0443\\u0441\\u0442\\u0430\\u0440\",\n      \"\\u042b\\u0430\\u043c \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0411\\u044d\\u0441 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u041e\\u0442 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0410\\u0442\\u044b\\u0440\\u0434\\u044c\\u044b\\u0445 \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0411\\u0430\\u043b\\u0430\\u0495\\u0430\\u043d \\u044b\\u0439\\u044b\\u043d\",\n      \"\\u0410\\u043b\\u0442\\u044b\\u043d\\u043d\\u044c\\u044b\",\n      \"\\u0421\\u044d\\u0442\\u0438\\u043d\\u043d\\u044c\\u0438\",\n      \"\\u0410\\u0445\\u0441\\u044b\\u043d\\u043d\\u044c\\u044b\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0411\\u0441\",\n      \"\\u0411\\u043d\",\n      \"\\u041e\\u043f\",\n      \"\\u0421\\u044d\",\n      \"\\u0427\\u043f\",\n      \"\\u0411\\u044d\",\n      \"\\u0421\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0422\\u043e\\u0445\\u0441\",\n      \"\\u041e\\u043b\\u0443\\u043d\",\n      \"\\u041a\\u043b\\u043d_\\u0442\\u0442\\u0440\",\n      \"\\u041c\\u0443\\u0441_\\u0443\\u0441\\u0442\",\n      \"\\u042b\\u0430\\u043c_\\u0439\\u043d\",\n      \"\\u0411\\u044d\\u0441_\\u0439\\u043d\",\n      \"\\u041e\\u0442_\\u0439\\u043d\",\n      \"\\u0410\\u0442\\u0440\\u0434\\u044c_\\u0439\\u043d\",\n      \"\\u0411\\u043b\\u0495\\u043d_\\u0439\\u043d\",\n      \"\\u0410\\u043b\\u0442\",\n      \"\\u0421\\u044d\\u0442\",\n      \"\\u0410\\u0445\\u0441\"\n    ],\n    \"fullDate\": \"y '\\u0441\\u044b\\u043b' MMMM d '\\u043a\\u04af\\u043d\\u044d', EEEE\",\n    \"longDate\": \"y, MMMM d\",\n    \"medium\": \"y, MMM d HH:mm:ss\",\n    \"mediumDate\": \"y, MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/M/d HH:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0440\\u0443\\u0431.\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sah\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_saq-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Tesiran\",\n      \"Teipa\"\n    ],\n    \"DAY\": [\n      \"Mderot ee are\",\n      \"Mderot ee kuni\",\n      \"Mderot ee ong\\u2019wan\",\n      \"Mderot ee inet\",\n      \"Mderot ee ile\",\n      \"Mderot ee sapa\",\n      \"Mderot ee kwe\"\n    ],\n    \"MONTH\": [\n      \"Lapa le obo\",\n      \"Lapa le waare\",\n      \"Lapa le okuni\",\n      \"Lapa le ong\\u2019wan\",\n      \"Lapa le imet\",\n      \"Lapa le ile\",\n      \"Lapa le sapa\",\n      \"Lapa le isiet\",\n      \"Lapa le saal\",\n      \"Lapa le tomon\",\n      \"Lapa le tomon obo\",\n      \"Lapa le tomon waare\"\n    ],\n    \"SHORTDAY\": [\n      \"Are\",\n      \"Kun\",\n      \"Ong\",\n      \"Ine\",\n      \"Ile\",\n      \"Sap\",\n      \"Kwe\"\n    ],\n    \"SHORTMONTH\": [\n      \"Obo\",\n      \"Waa\",\n      \"Oku\",\n      \"Ong\",\n      \"Ime\",\n      \"Ile\",\n      \"Sap\",\n      \"Isi\",\n      \"Saa\",\n      \"Tom\",\n      \"Tob\",\n      \"Tow\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"saq-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_saq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Tesiran\",\n      \"Teipa\"\n    ],\n    \"DAY\": [\n      \"Mderot ee are\",\n      \"Mderot ee kuni\",\n      \"Mderot ee ong\\u2019wan\",\n      \"Mderot ee inet\",\n      \"Mderot ee ile\",\n      \"Mderot ee sapa\",\n      \"Mderot ee kwe\"\n    ],\n    \"MONTH\": [\n      \"Lapa le obo\",\n      \"Lapa le waare\",\n      \"Lapa le okuni\",\n      \"Lapa le ong\\u2019wan\",\n      \"Lapa le imet\",\n      \"Lapa le ile\",\n      \"Lapa le sapa\",\n      \"Lapa le isiet\",\n      \"Lapa le saal\",\n      \"Lapa le tomon\",\n      \"Lapa le tomon obo\",\n      \"Lapa le tomon waare\"\n    ],\n    \"SHORTDAY\": [\n      \"Are\",\n      \"Kun\",\n      \"Ong\",\n      \"Ine\",\n      \"Ile\",\n      \"Sap\",\n      \"Kwe\"\n    ],\n    \"SHORTMONTH\": [\n      \"Obo\",\n      \"Waa\",\n      \"Oku\",\n      \"Ong\",\n      \"Ime\",\n      \"Ile\",\n      \"Sap\",\n      \"Isi\",\n      \"Saa\",\n      \"Tom\",\n      \"Tob\",\n      \"Tow\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"saq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sbp-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Lwamilawu\",\n      \"Pashamihe\"\n    ],\n    \"DAY\": [\n      \"Mulungu\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alahamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mupalangulwa\",\n      \"Mwitope\",\n      \"Mushende\",\n      \"Munyi\",\n      \"Mushende Magali\",\n      \"Mujimbi\",\n      \"Mushipepo\",\n      \"Mupuguto\",\n      \"Munyense\",\n      \"Mokhu\",\n      \"Musongandembwe\",\n      \"Muhaano\"\n    ],\n    \"SHORTDAY\": [\n      \"Mul\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mup\",\n      \"Mwi\",\n      \"Msh\",\n      \"Mun\",\n      \"Mag\",\n      \"Muj\",\n      \"Msp\",\n      \"Mpg\",\n      \"Mye\",\n      \"Mok\",\n      \"Mus\",\n      \"Muh\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sbp-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sbp.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Lwamilawu\",\n      \"Pashamihe\"\n    ],\n    \"DAY\": [\n      \"Mulungu\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alahamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Mupalangulwa\",\n      \"Mwitope\",\n      \"Mushende\",\n      \"Munyi\",\n      \"Mushende Magali\",\n      \"Mujimbi\",\n      \"Mushipepo\",\n      \"Mupuguto\",\n      \"Munyense\",\n      \"Mokhu\",\n      \"Musongandembwe\",\n      \"Muhaano\"\n    ],\n    \"SHORTDAY\": [\n      \"Mul\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Mup\",\n      \"Mwi\",\n      \"Msh\",\n      \"Mun\",\n      \"Mag\",\n      \"Muj\",\n      \"Msp\",\n      \"Mpg\",\n      \"Mye\",\n      \"Mok\",\n      \"Mus\",\n      \"Muh\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sbp\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_se-fi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"i\\u0111itbeaivet\",\n      \"eahketbeaivet\"\n    ],\n    \"DAY\": [\n      \"aejlege\",\n      \"m\\u00e5anta\",\n      \"d\\u00e4jsta\",\n      \"gaskevahkoe\",\n      \"d\\u00e5arsta\",\n      \"bearjadahke\",\n      \"laavadahke\"\n    ],\n    \"MONTH\": [\n      \"o\\u0111\\u0111ajagem\\u00e1nnu\",\n      \"guovvam\\u00e1nnu\",\n      \"njuk\\u010dam\\u00e1nnu\",\n      \"cuo\\u014bom\\u00e1nnu\",\n      \"miessem\\u00e1nnu\",\n      \"geassem\\u00e1nnu\",\n      \"suoidnem\\u00e1nnu\",\n      \"borgem\\u00e1nnu\",\n      \"\\u010dak\\u010dam\\u00e1nnu\",\n      \"golggotm\\u00e1nnu\",\n      \"sk\\u00e1bmam\\u00e1nnu\",\n      \"juovlam\\u00e1nnu\"\n    ],\n    \"SHORTDAY\": [\n      \"sotn\",\n      \"vuos\",\n      \"ma\\u014b\",\n      \"gask\",\n      \"duor\",\n      \"bear\",\n      \"l\\u00e1v\"\n    ],\n    \"SHORTMONTH\": [\n      \"o\\u0111\\u0111ajage\",\n      \"guovva\",\n      \"njuk\\u010da\",\n      \"cuo\\u014bo\",\n      \"miesse\",\n      \"geasse\",\n      \"suoidne\",\n      \"borge\",\n      \"\\u010dak\\u010da\",\n      \"golggot\",\n      \"sk\\u00e1bma\",\n      \"juovla\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"se-fi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_se-no.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"i\\u0111itbeaivet\",\n      \"eahketbeaivet\"\n    ],\n    \"DAY\": [\n      \"sotnabeaivi\",\n      \"vuoss\\u00e1rga\",\n      \"ma\\u014b\\u014beb\\u00e1rga\",\n      \"gaskavahkku\",\n      \"duorasdat\",\n      \"bearjadat\",\n      \"l\\u00e1vvardat\"\n    ],\n    \"MONTH\": [\n      \"o\\u0111\\u0111ajagem\\u00e1nnu\",\n      \"guovvam\\u00e1nnu\",\n      \"njuk\\u010dam\\u00e1nnu\",\n      \"cuo\\u014bom\\u00e1nnu\",\n      \"miessem\\u00e1nnu\",\n      \"geassem\\u00e1nnu\",\n      \"suoidnem\\u00e1nnu\",\n      \"borgem\\u00e1nnu\",\n      \"\\u010dak\\u010dam\\u00e1nnu\",\n      \"golggotm\\u00e1nnu\",\n      \"sk\\u00e1bmam\\u00e1nnu\",\n      \"juovlam\\u00e1nnu\"\n    ],\n    \"SHORTDAY\": [\n      \"sotn\",\n      \"vuos\",\n      \"ma\\u014b\",\n      \"gask\",\n      \"duor\",\n      \"bear\",\n      \"l\\u00e1v\"\n    ],\n    \"SHORTMONTH\": [\n      \"o\\u0111\\u0111j\",\n      \"guov\",\n      \"njuk\",\n      \"cuo\",\n      \"mies\",\n      \"geas\",\n      \"suoi\",\n      \"borg\",\n      \"\\u010dak\\u010d\",\n      \"golg\",\n      \"sk\\u00e1b\",\n      \"juov\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"se-no\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_se-se.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"i\\u0111itbeaivet\",\n      \"eahketbeaivet\"\n    ],\n    \"DAY\": [\n      \"sotnabeaivi\",\n      \"vuoss\\u00e1rga\",\n      \"ma\\u014b\\u014beb\\u00e1rga\",\n      \"gaskavahkku\",\n      \"duorasdat\",\n      \"bearjadat\",\n      \"l\\u00e1vvardat\"\n    ],\n    \"MONTH\": [\n      \"o\\u0111\\u0111ajagem\\u00e1nnu\",\n      \"guovvam\\u00e1nnu\",\n      \"njuk\\u010dam\\u00e1nnu\",\n      \"cuo\\u014bom\\u00e1nnu\",\n      \"miessem\\u00e1nnu\",\n      \"geassem\\u00e1nnu\",\n      \"suoidnem\\u00e1nnu\",\n      \"borgem\\u00e1nnu\",\n      \"\\u010dak\\u010dam\\u00e1nnu\",\n      \"golggotm\\u00e1nnu\",\n      \"sk\\u00e1bmam\\u00e1nnu\",\n      \"juovlam\\u00e1nnu\"\n    ],\n    \"SHORTDAY\": [\n      \"sotn\",\n      \"vuos\",\n      \"ma\\u014b\",\n      \"gask\",\n      \"duor\",\n      \"bear\",\n      \"l\\u00e1v\"\n    ],\n    \"SHORTMONTH\": [\n      \"o\\u0111\\u0111j\",\n      \"guov\",\n      \"njuk\",\n      \"cuo\",\n      \"mies\",\n      \"geas\",\n      \"suoi\",\n      \"borg\",\n      \"\\u010dak\\u010d\",\n      \"golg\",\n      \"sk\\u00e1b\",\n      \"juov\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"se-se\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_se.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"i\\u0111itbeaivet\",\n      \"eahketbeaivet\"\n    ],\n    \"DAY\": [\n      \"sotnabeaivi\",\n      \"vuoss\\u00e1rga\",\n      \"ma\\u014b\\u014beb\\u00e1rga\",\n      \"gaskavahkku\",\n      \"duorasdat\",\n      \"bearjadat\",\n      \"l\\u00e1vvardat\"\n    ],\n    \"MONTH\": [\n      \"o\\u0111\\u0111ajagem\\u00e1nnu\",\n      \"guovvam\\u00e1nnu\",\n      \"njuk\\u010dam\\u00e1nnu\",\n      \"cuo\\u014bom\\u00e1nnu\",\n      \"miessem\\u00e1nnu\",\n      \"geassem\\u00e1nnu\",\n      \"suoidnem\\u00e1nnu\",\n      \"borgem\\u00e1nnu\",\n      \"\\u010dak\\u010dam\\u00e1nnu\",\n      \"golggotm\\u00e1nnu\",\n      \"sk\\u00e1bmam\\u00e1nnu\",\n      \"juovlam\\u00e1nnu\"\n    ],\n    \"SHORTDAY\": [\n      \"sotn\",\n      \"vuos\",\n      \"ma\\u014b\",\n      \"gask\",\n      \"duor\",\n      \"bear\",\n      \"l\\u00e1v\"\n    ],\n    \"SHORTMONTH\": [\n      \"o\\u0111\\u0111j\",\n      \"guov\",\n      \"njuk\",\n      \"cuo\",\n      \"mies\",\n      \"geas\",\n      \"suoi\",\n      \"borg\",\n      \"\\u010dak\\u010d\",\n      \"golg\",\n      \"sk\\u00e1b\",\n      \"juov\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"se\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_seh-mz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dimingu\",\n      \"Chiposi\",\n      \"Chipiri\",\n      \"Chitatu\",\n      \"Chinai\",\n      \"Chishanu\",\n      \"Sabudu\"\n    ],\n    \"MONTH\": [\n      \"Janeiro\",\n      \"Fevreiro\",\n      \"Marco\",\n      \"Abril\",\n      \"Maio\",\n      \"Junho\",\n      \"Julho\",\n      \"Augusto\",\n      \"Setembro\",\n      \"Otubro\",\n      \"Novembro\",\n      \"Decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"Dim\",\n      \"Pos\",\n      \"Pir\",\n      \"Tat\",\n      \"Nai\",\n      \"Sha\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fev\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Set\",\n      \"Otu\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y HH:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MTn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"seh-mz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_seh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Dimingu\",\n      \"Chiposi\",\n      \"Chipiri\",\n      \"Chitatu\",\n      \"Chinai\",\n      \"Chishanu\",\n      \"Sabudu\"\n    ],\n    \"MONTH\": [\n      \"Janeiro\",\n      \"Fevreiro\",\n      \"Marco\",\n      \"Abril\",\n      \"Maio\",\n      \"Junho\",\n      \"Julho\",\n      \"Augusto\",\n      \"Setembro\",\n      \"Otubro\",\n      \"Novembro\",\n      \"Decembro\"\n    ],\n    \"SHORTDAY\": [\n      \"Dim\",\n      \"Pos\",\n      \"Pir\",\n      \"Tat\",\n      \"Nai\",\n      \"Sha\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Fev\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Set\",\n      \"Otu\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n    \"longDate\": \"d 'de' MMMM 'de' y\",\n    \"medium\": \"d 'de' MMM 'de' y HH:mm:ss\",\n    \"mediumDate\": \"d 'de' MMM 'de' y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MTn\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"seh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ses-ml.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Adduha\",\n      \"Aluula\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ses-ml\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ses.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Adduha\",\n      \"Aluula\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"ses\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sg-cf.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ND\",\n      \"LK\"\n    ],\n    \"DAY\": [\n      \"Bikua-\\u00f4ko\",\n      \"B\\u00efkua-\\u00fbse\",\n      \"B\\u00efkua-pt\\u00e2\",\n      \"B\\u00efkua-us\\u00ef\\u00f6\",\n      \"B\\u00efkua-ok\\u00fc\",\n      \"L\\u00e2p\\u00f4s\\u00f6\",\n      \"L\\u00e2yenga\"\n    ],\n    \"MONTH\": [\n      \"Nyenye\",\n      \"Fulund\\u00efgi\",\n      \"Mb\\u00e4ng\\u00fc\",\n      \"Ngub\\u00f9e\",\n      \"B\\u00eal\\u00e4w\\u00fc\",\n      \"F\\u00f6ndo\",\n      \"Lengua\",\n      \"K\\u00fck\\u00fcr\\u00fc\",\n      \"Mvuka\",\n      \"Ngberere\",\n      \"Nab\\u00e4nd\\u00fcru\",\n      \"Kakauka\"\n    ],\n    \"SHORTDAY\": [\n      \"Bk1\",\n      \"Bk2\",\n      \"Bk3\",\n      \"Bk4\",\n      \"Bk5\",\n      \"L\\u00e2p\",\n      \"L\\u00e2y\"\n    ],\n    \"SHORTMONTH\": [\n      \"Nye\",\n      \"Ful\",\n      \"Mb\\u00e4\",\n      \"Ngu\",\n      \"B\\u00eal\",\n      \"F\\u00f6n\",\n      \"Len\",\n      \"K\\u00fck\",\n      \"Mvu\",\n      \"Ngb\",\n      \"Nab\",\n      \"Kak\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sg-cf\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ND\",\n      \"LK\"\n    ],\n    \"DAY\": [\n      \"Bikua-\\u00f4ko\",\n      \"B\\u00efkua-\\u00fbse\",\n      \"B\\u00efkua-pt\\u00e2\",\n      \"B\\u00efkua-us\\u00ef\\u00f6\",\n      \"B\\u00efkua-ok\\u00fc\",\n      \"L\\u00e2p\\u00f4s\\u00f6\",\n      \"L\\u00e2yenga\"\n    ],\n    \"MONTH\": [\n      \"Nyenye\",\n      \"Fulund\\u00efgi\",\n      \"Mb\\u00e4ng\\u00fc\",\n      \"Ngub\\u00f9e\",\n      \"B\\u00eal\\u00e4w\\u00fc\",\n      \"F\\u00f6ndo\",\n      \"Lengua\",\n      \"K\\u00fck\\u00fcr\\u00fc\",\n      \"Mvuka\",\n      \"Ngberere\",\n      \"Nab\\u00e4nd\\u00fcru\",\n      \"Kakauka\"\n    ],\n    \"SHORTDAY\": [\n      \"Bk1\",\n      \"Bk2\",\n      \"Bk3\",\n      \"Bk4\",\n      \"Bk5\",\n      \"L\\u00e2p\",\n      \"L\\u00e2y\"\n    ],\n    \"SHORTMONTH\": [\n      \"Nye\",\n      \"Ful\",\n      \"Mb\\u00e4\",\n      \"Ngu\",\n      \"B\\u00eal\",\n      \"F\\u00f6n\",\n      \"Len\",\n      \"K\\u00fck\",\n      \"Mvu\",\n      \"Ngb\",\n      \"Nab\",\n      \"Kak\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_shi-latn-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"tifawt\",\n      \"tadgg\\u02b7at\"\n    ],\n    \"DAY\": [\n      \"asamas\",\n      \"aynas\",\n      \"asinas\",\n      \"ak\\u1e5bas\",\n      \"akwas\",\n      \"asimwas\",\n      \"asi\\u1e0dyas\"\n    ],\n    \"MONTH\": [\n      \"innayr\",\n      \"b\\u1e5bay\\u1e5b\",\n      \"ma\\u1e5b\\u1e63\",\n      \"ibrir\",\n      \"mayyu\",\n      \"yunyu\",\n      \"yulyuz\",\n      \"\\u0263uct\",\n      \"cutanbir\",\n      \"ktubr\",\n      \"nuwanbir\",\n      \"dujanbir\"\n    ],\n    \"SHORTDAY\": [\n      \"asa\",\n      \"ayn\",\n      \"asi\",\n      \"ak\\u1e5b\",\n      \"akw\",\n      \"asim\",\n      \"asi\\u1e0d\"\n    ],\n    \"SHORTMONTH\": [\n      \"inn\",\n      \"b\\u1e5ba\",\n      \"ma\\u1e5b\",\n      \"ibr\",\n      \"may\",\n      \"yun\",\n      \"yul\",\n      \"\\u0263uc\",\n      \"cut\",\n      \"ktu\",\n      \"nuw\",\n      \"duj\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"shi-latn-ma\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_shi-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"tifawt\",\n      \"tadgg\\u02b7at\"\n    ],\n    \"DAY\": [\n      \"asamas\",\n      \"aynas\",\n      \"asinas\",\n      \"ak\\u1e5bas\",\n      \"akwas\",\n      \"asimwas\",\n      \"asi\\u1e0dyas\"\n    ],\n    \"MONTH\": [\n      \"innayr\",\n      \"b\\u1e5bay\\u1e5b\",\n      \"ma\\u1e5b\\u1e63\",\n      \"ibrir\",\n      \"mayyu\",\n      \"yunyu\",\n      \"yulyuz\",\n      \"\\u0263uct\",\n      \"cutanbir\",\n      \"ktubr\",\n      \"nuwanbir\",\n      \"dujanbir\"\n    ],\n    \"SHORTDAY\": [\n      \"asa\",\n      \"ayn\",\n      \"asi\",\n      \"ak\\u1e5b\",\n      \"akw\",\n      \"asim\",\n      \"asi\\u1e0d\"\n    ],\n    \"SHORTMONTH\": [\n      \"inn\",\n      \"b\\u1e5ba\",\n      \"ma\\u1e5b\",\n      \"ibr\",\n      \"may\",\n      \"yun\",\n      \"yul\",\n      \"\\u0263uc\",\n      \"cut\",\n      \"ktu\",\n      \"nuw\",\n      \"duj\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"shi-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_shi-tfng-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u2d5c\\u2d49\\u2d3c\\u2d30\\u2d61\\u2d5c\",\n      \"\\u2d5c\\u2d30\\u2d37\\u2d33\\u2d33\\u2d6f\\u2d30\\u2d5c\"\n    ],\n    \"DAY\": [\n      \"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d55\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\"\n    ],\n    \"MONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54\",\n      \"\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55\",\n      \"\\u2d4e\\u2d30\\u2d55\\u2d5a\",\n      \"\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63\",\n      \"\\u2d56\\u2d53\\u2d5b\\u2d5c\",\n      \"\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d3d\\u2d5c\\u2d53\\u2d31\\u2d54\",\n      \"\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d37\\u2d53\\u2d4a\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u2d30\\u2d59\\u2d30\",\n      \"\\u2d30\\u2d62\\u2d4f\",\n      \"\\u2d30\\u2d59\\u2d49\",\n      \"\\u2d30\\u2d3d\\u2d55\",\n      \"\\u2d30\\u2d3d\\u2d61\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\",\n      \"\\u2d31\\u2d55\\u2d30\",\n      \"\\u2d4e\\u2d30\\u2d55\",\n      \"\\u2d49\\u2d31\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\",\n      \"\\u2d62\\u2d53\\u2d4f\",\n      \"\\u2d62\\u2d53\\u2d4d\",\n      \"\\u2d56\\u2d53\\u2d5b\",\n      \"\\u2d5b\\u2d53\\u2d5c\",\n      \"\\u2d3d\\u2d5c\\u2d53\",\n      \"\\u2d4f\\u2d53\\u2d61\",\n      \"\\u2d37\\u2d53\\u2d4a\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"shi-tfng-ma\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_shi-tfng.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u2d5c\\u2d49\\u2d3c\\u2d30\\u2d61\\u2d5c\",\n      \"\\u2d5c\\u2d30\\u2d37\\u2d33\\u2d33\\u2d6f\\u2d30\\u2d5c\"\n    ],\n    \"DAY\": [\n      \"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d55\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\"\n    ],\n    \"MONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54\",\n      \"\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55\",\n      \"\\u2d4e\\u2d30\\u2d55\\u2d5a\",\n      \"\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63\",\n      \"\\u2d56\\u2d53\\u2d5b\\u2d5c\",\n      \"\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d3d\\u2d5c\\u2d53\\u2d31\\u2d54\",\n      \"\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d37\\u2d53\\u2d4a\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u2d30\\u2d59\\u2d30\",\n      \"\\u2d30\\u2d62\\u2d4f\",\n      \"\\u2d30\\u2d59\\u2d49\",\n      \"\\u2d30\\u2d3d\\u2d55\",\n      \"\\u2d30\\u2d3d\\u2d61\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\",\n      \"\\u2d31\\u2d55\\u2d30\",\n      \"\\u2d4e\\u2d30\\u2d55\",\n      \"\\u2d49\\u2d31\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\",\n      \"\\u2d62\\u2d53\\u2d4f\",\n      \"\\u2d62\\u2d53\\u2d4d\",\n      \"\\u2d56\\u2d53\\u2d5b\",\n      \"\\u2d5b\\u2d53\\u2d5c\",\n      \"\\u2d3d\\u2d5c\\u2d53\",\n      \"\\u2d4f\\u2d53\\u2d61\",\n      \"\\u2d37\\u2d53\\u2d4a\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"shi-tfng\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_shi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u2d5c\\u2d49\\u2d3c\\u2d30\\u2d61\\u2d5c\",\n      \"\\u2d5c\\u2d30\\u2d37\\u2d33\\u2d33\\u2d6f\\u2d30\\u2d5c\"\n    ],\n    \"DAY\": [\n      \"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d55\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\"\n    ],\n    \"MONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54\",\n      \"\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55\",\n      \"\\u2d4e\\u2d30\\u2d55\\u2d5a\",\n      \"\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63\",\n      \"\\u2d56\\u2d53\\u2d5b\\u2d5c\",\n      \"\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d3d\\u2d5c\\u2d53\\u2d31\\u2d54\",\n      \"\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d37\\u2d53\\u2d4a\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u2d30\\u2d59\\u2d30\",\n      \"\\u2d30\\u2d62\\u2d4f\",\n      \"\\u2d30\\u2d59\\u2d49\",\n      \"\\u2d30\\u2d3d\\u2d55\",\n      \"\\u2d30\\u2d3d\\u2d61\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\",\n      \"\\u2d31\\u2d55\\u2d30\",\n      \"\\u2d4e\\u2d30\\u2d55\",\n      \"\\u2d49\\u2d31\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\",\n      \"\\u2d62\\u2d53\\u2d4f\",\n      \"\\u2d62\\u2d53\\u2d4d\",\n      \"\\u2d56\\u2d53\\u2d5b\",\n      \"\\u2d5b\\u2d53\\u2d5c\",\n      \"\\u2d3d\\u2d5c\\u2d53\",\n      \"\\u2d4f\\u2d53\\u2d61\",\n      \"\\u2d37\\u2d53\\u2d4a\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"shi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_si-lk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0db4\\u0dd9.\\u0dc0.\",\n      \"\\u0db4.\\u0dc0.\"\n    ],\n    \"DAY\": [\n      \"\\u0d89\\u0dbb\\u0dd2\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0db3\\u0dd4\\u0daf\\u0dcf\",\n      \"\\u0d85\\u0d9f\\u0dc4\\u0dbb\\u0dd4\\u0dc0\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0daf\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4\\u0dc3\\u0dca\\u0db4\\u0dad\\u0dd2\\u0db1\\u0dca\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0dd2\\u0d9a\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0dd9\\u0db1\\u0dc3\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf\"\n    ],\n    \"MONTH\": [\n      \"\\u0da2\\u0db1\\u0dc0\\u0dcf\\u0dbb\\u0dd2\",\n      \"\\u0db4\\u0dd9\\u0db6\\u0dbb\\u0dc0\\u0dcf\\u0dbb\\u0dd2\",\n      \"\\u0db8\\u0dcf\\u0dbb\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0d85\\u0db4\\u0dca\\u200d\\u0dbb\\u0dda\\u0dbd\\u0dca\",\n      \"\\u0db8\\u0dd0\\u0dba\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0db1\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0dbd\\u0dd2\",\n      \"\\u0d85\\u0d9c\\u0ddd\\u0dc3\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0dc3\\u0dd0\\u0db4\\u0dca\\u0dad\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0d94\\u0d9a\\u0dca\\u0dad\\u0ddd\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0db1\\u0ddc\\u0dc0\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0daf\\u0dd9\\u0dc3\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0d89\\u0dbb\\u0dd2\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0db3\\u0dd4\\u0daf\\u0dcf\",\n      \"\\u0d85\\u0d9f\\u0dc4\",\n      \"\\u0db6\\u0daf\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4\\u0dc3\\u0dca\",\n      \"\\u0dc3\\u0dd2\\u0d9a\\u0dd4\",\n      \"\\u0dc3\\u0dd9\\u0db1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0da2\\u0db1\",\n      \"\\u0db4\\u0dd9\\u0db6\",\n      \"\\u0db8\\u0dcf\\u0dbb\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0d85\\u0db4\\u0dca\\u200d\\u0dbb\\u0dda\\u0dbd\\u0dca\",\n      \"\\u0db8\\u0dd0\\u0dba\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0db1\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0dbd\\u0dd2\",\n      \"\\u0d85\\u0d9c\\u0ddd\",\n      \"\\u0dc3\\u0dd0\\u0db4\\u0dca\",\n      \"\\u0d94\\u0d9a\\u0dca\",\n      \"\\u0db1\\u0ddc\\u0dc0\\u0dd0\",\n      \"\\u0daf\\u0dd9\\u0dc3\\u0dd0\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d a h.mm.ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"a h.mm.ss\",\n    \"short\": \"y-MM-dd a h.mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"a h.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"si-lk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if ((n == 0 || n == 1) || i == 0 && vf.f == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_si.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0db4\\u0dd9.\\u0dc0.\",\n      \"\\u0db4.\\u0dc0.\"\n    ],\n    \"DAY\": [\n      \"\\u0d89\\u0dbb\\u0dd2\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0db3\\u0dd4\\u0daf\\u0dcf\",\n      \"\\u0d85\\u0d9f\\u0dc4\\u0dbb\\u0dd4\\u0dc0\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0daf\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4\\u0dc3\\u0dca\\u0db4\\u0dad\\u0dd2\\u0db1\\u0dca\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0dd2\\u0d9a\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0dd9\\u0db1\\u0dc3\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf\"\n    ],\n    \"MONTH\": [\n      \"\\u0da2\\u0db1\\u0dc0\\u0dcf\\u0dbb\\u0dd2\",\n      \"\\u0db4\\u0dd9\\u0db6\\u0dbb\\u0dc0\\u0dcf\\u0dbb\\u0dd2\",\n      \"\\u0db8\\u0dcf\\u0dbb\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0d85\\u0db4\\u0dca\\u200d\\u0dbb\\u0dda\\u0dbd\\u0dca\",\n      \"\\u0db8\\u0dd0\\u0dba\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0db1\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0dbd\\u0dd2\",\n      \"\\u0d85\\u0d9c\\u0ddd\\u0dc3\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0dc3\\u0dd0\\u0db4\\u0dca\\u0dad\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0d94\\u0d9a\\u0dca\\u0dad\\u0ddd\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0db1\\u0ddc\\u0dc0\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\",\n      \"\\u0daf\\u0dd9\\u0dc3\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0d89\\u0dbb\\u0dd2\\u0daf\\u0dcf\",\n      \"\\u0dc3\\u0db3\\u0dd4\\u0daf\\u0dcf\",\n      \"\\u0d85\\u0d9f\\u0dc4\",\n      \"\\u0db6\\u0daf\\u0dcf\\u0daf\\u0dcf\",\n      \"\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4\\u0dc3\\u0dca\",\n      \"\\u0dc3\\u0dd2\\u0d9a\\u0dd4\",\n      \"\\u0dc3\\u0dd9\\u0db1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0da2\\u0db1\",\n      \"\\u0db4\\u0dd9\\u0db6\",\n      \"\\u0db8\\u0dcf\\u0dbb\\u0dca\\u0dad\\u0dd4\",\n      \"\\u0d85\\u0db4\\u0dca\\u200d\\u0dbb\\u0dda\\u0dbd\\u0dca\",\n      \"\\u0db8\\u0dd0\\u0dba\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0db1\\u0dd2\",\n      \"\\u0da2\\u0dd6\\u0dbd\\u0dd2\",\n      \"\\u0d85\\u0d9c\\u0ddd\",\n      \"\\u0dc3\\u0dd0\\u0db4\\u0dca\",\n      \"\\u0d94\\u0d9a\\u0dca\",\n      \"\\u0db1\\u0ddc\\u0dc0\\u0dd0\",\n      \"\\u0daf\\u0dd9\\u0dc3\\u0dd0\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d a h.mm.ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"a h.mm.ss\",\n    \"short\": \"y-MM-dd a h.mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"a h.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"si\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if ((n == 0 || n == 1) || i == 0 && vf.f == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sk-sk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopoludnia\",\n      \"odpoludnia\"\n    ],\n    \"DAY\": [\n      \"nede\\u013ea\",\n      \"pondelok\",\n      \"utorok\",\n      \"streda\",\n      \"\\u0161tvrtok\",\n      \"piatok\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"janu\\u00e1ra\",\n      \"febru\\u00e1ra\",\n      \"marca\",\n      \"apr\\u00edla\",\n      \"m\\u00e1ja\",\n      \"j\\u00fana\",\n      \"j\\u00fala\",\n      \"augusta\",\n      \"septembra\",\n      \"okt\\u00f3bra\",\n      \"novembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"ne\",\n      \"po\",\n      \"ut\",\n      \"st\",\n      \"\\u0161t\",\n      \"pi\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"m\\u00e1j\",\n      \"j\\u00fan\",\n      \"j\\u00fal\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. M. y H:mm:ss\",\n    \"mediumDate\": \"d. M. y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sk-sk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dopoludnia\",\n      \"odpoludnia\"\n    ],\n    \"DAY\": [\n      \"nede\\u013ea\",\n      \"pondelok\",\n      \"utorok\",\n      \"streda\",\n      \"\\u0161tvrtok\",\n      \"piatok\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"janu\\u00e1ra\",\n      \"febru\\u00e1ra\",\n      \"marca\",\n      \"apr\\u00edla\",\n      \"m\\u00e1ja\",\n      \"j\\u00fana\",\n      \"j\\u00fala\",\n      \"augusta\",\n      \"septembra\",\n      \"okt\\u00f3bra\",\n      \"novembra\",\n      \"decembra\"\n    ],\n    \"SHORTDAY\": [\n      \"ne\",\n      \"po\",\n      \"ut\",\n      \"st\",\n      \"\\u0161t\",\n      \"pi\",\n      \"so\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"m\\u00e1j\",\n      \"j\\u00fan\",\n      \"j\\u00fal\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. M. y H:mm:ss\",\n    \"mediumDate\": \"d. M. y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"dd.MM.yy H:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sl-si.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dop.\",\n      \"pop.\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljek\",\n      \"torek\",\n      \"sreda\",\n      \"\\u010detrtek\",\n      \"petek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"marec\",\n      \"april\",\n      \"maj\",\n      \"junij\",\n      \"julij\",\n      \"avgust\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"ned.\",\n      \"pon.\",\n      \"tor.\",\n      \"sre.\",\n      \"\\u010det.\",\n      \"pet.\",\n      \"sob.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"maj\",\n      \"jun.\",\n      \"jul.\",\n      \"avg.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y\",\n    \"longDate\": \"dd. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d. MM. yy HH.mm\",\n    \"shortDate\": \"d. MM. yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sl-si\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 100 == 1) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 100 == 2) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"dop.\",\n      \"pop.\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljek\",\n      \"torek\",\n      \"sreda\",\n      \"\\u010detrtek\",\n      \"petek\",\n      \"sobota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"marec\",\n      \"april\",\n      \"maj\",\n      \"junij\",\n      \"julij\",\n      \"avgust\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"ned.\",\n      \"pon.\",\n      \"tor.\",\n      \"sre.\",\n      \"\\u010det.\",\n      \"pet.\",\n      \"sob.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mar.\",\n      \"apr.\",\n      \"maj\",\n      \"jun.\",\n      \"jul.\",\n      \"avg.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y\",\n    \"longDate\": \"dd. MMMM y\",\n    \"medium\": \"d. MMM y HH.mm.ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d. MM. yy HH.mm\",\n    \"shortDate\": \"d. MM. yy\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 100 == 1) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 100 == 2) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_smn-fi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"pasepeeivi\",\n      \"vuossaarg\\u00e2\",\n      \"majebaarg\\u00e2\",\n      \"koskoho\",\n      \"tuor\\u00e2stuv\",\n      \"v\\u00e1stuppeeivi\",\n      \"l\\u00e1vurduv\"\n    ],\n    \"MONTH\": [\n      \"M01\",\n      \"M02\",\n      \"M03\",\n      \"M04\",\n      \"M05\",\n      \"M06\",\n      \"M07\",\n      \"M08\",\n      \"M09\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"SHORTDAY\": [\n      \"pa\",\n      \"vu\",\n      \"ma\",\n      \"ko\",\n      \"tu\",\n      \"v\\u00e1\",\n      \"l\\u00e1\"\n    ],\n    \"SHORTMONTH\": [\n      \"M01\",\n      \"M02\",\n      \"M03\",\n      \"M04\",\n      \"M05\",\n      \"M06\",\n      \"M07\",\n      \"M08\",\n      \"M09\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"smn-fi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_smn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"pasepeeivi\",\n      \"vuossaarg\\u00e2\",\n      \"majebaarg\\u00e2\",\n      \"koskoho\",\n      \"tuor\\u00e2stuv\",\n      \"v\\u00e1stuppeeivi\",\n      \"l\\u00e1vurduv\"\n    ],\n    \"MONTH\": [\n      \"M01\",\n      \"M02\",\n      \"M03\",\n      \"M04\",\n      \"M05\",\n      \"M06\",\n      \"M07\",\n      \"M08\",\n      \"M09\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"SHORTDAY\": [\n      \"pa\",\n      \"vu\",\n      \"ma\",\n      \"ko\",\n      \"tu\",\n      \"v\\u00e1\",\n      \"l\\u00e1\"\n    ],\n    \"SHORTMONTH\": [\n      \"M01\",\n      \"M02\",\n      \"M03\",\n      \"M04\",\n      \"M05\",\n      \"M06\",\n      \"M07\",\n      \"M08\",\n      \"M09\",\n      \"M10\",\n      \"M11\",\n      \"M12\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"smn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sn-zw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Svondo\",\n      \"Muvhuro\",\n      \"Chipiri\",\n      \"Chitatu\",\n      \"China\",\n      \"Chishanu\",\n      \"Mugovera\"\n    ],\n    \"MONTH\": [\n      \"Ndira\",\n      \"Kukadzi\",\n      \"Kurume\",\n      \"Kubvumbi\",\n      \"Chivabvu\",\n      \"Chikumi\",\n      \"Chikunguru\",\n      \"Nyamavhuvhu\",\n      \"Gunyana\",\n      \"Gumiguru\",\n      \"Mbudzi\",\n      \"Zvita\"\n    ],\n    \"SHORTDAY\": [\n      \"Svo\",\n      \"Muv\",\n      \"Chip\",\n      \"Chit\",\n      \"Chin\",\n      \"Chis\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ndi\",\n      \"Kuk\",\n      \"Kur\",\n      \"Kub\",\n      \"Chv\",\n      \"Chk\",\n      \"Chg\",\n      \"Nya\",\n      \"Gun\",\n      \"Gum\",\n      \"Mb\",\n      \"Zvi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sn-zw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Svondo\",\n      \"Muvhuro\",\n      \"Chipiri\",\n      \"Chitatu\",\n      \"China\",\n      \"Chishanu\",\n      \"Mugovera\"\n    ],\n    \"MONTH\": [\n      \"Ndira\",\n      \"Kukadzi\",\n      \"Kurume\",\n      \"Kubvumbi\",\n      \"Chivabvu\",\n      \"Chikumi\",\n      \"Chikunguru\",\n      \"Nyamavhuvhu\",\n      \"Gunyana\",\n      \"Gumiguru\",\n      \"Mbudzi\",\n      \"Zvita\"\n    ],\n    \"SHORTDAY\": [\n      \"Svo\",\n      \"Muv\",\n      \"Chip\",\n      \"Chit\",\n      \"Chin\",\n      \"Chis\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ndi\",\n      \"Kuk\",\n      \"Kur\",\n      \"Kub\",\n      \"Chv\",\n      \"Chk\",\n      \"Chg\",\n      \"Nya\",\n      \"Gun\",\n      \"Gum\",\n      \"Mb\",\n      \"Zvi\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_so-dj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"sn.\",\n      \"gn.\"\n    ],\n    \"DAY\": [\n      \"Axad\",\n      \"Isniin\",\n      \"Talaado\",\n      \"Arbaco\",\n      \"Khamiis\",\n      \"Jimco\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Bisha Koobaad\",\n      \"Bisha Labaad\",\n      \"Bisha Saddexaad\",\n      \"Bisha Afraad\",\n      \"Bisha Shanaad\",\n      \"Bisha Lixaad\",\n      \"Bisha Todobaad\",\n      \"Bisha Sideedaad\",\n      \"Bisha Sagaalaad\",\n      \"Bisha Tobnaad\",\n      \"Bisha Kow iyo Tobnaad\",\n      \"Bisha Laba iyo Tobnaad\"\n    ],\n    \"SHORTDAY\": [\n      \"Axd\",\n      \"Isn\",\n      \"Tal\",\n      \"Arb\",\n      \"Kha\",\n      \"Jim\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kob\",\n      \"Lab\",\n      \"Sad\",\n      \"Afr\",\n      \"Sha\",\n      \"Lix\",\n      \"Tod\",\n      \"Sid\",\n      \"Sag\",\n      \"Tob\",\n      \"KIT\",\n      \"LIT\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Fdj\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"so-dj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_so-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"sn.\",\n      \"gn.\"\n    ],\n    \"DAY\": [\n      \"Axad\",\n      \"Isniin\",\n      \"Talaado\",\n      \"Arbaco\",\n      \"Khamiis\",\n      \"Jimco\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Bisha Koobaad\",\n      \"Bisha Labaad\",\n      \"Bisha Saddexaad\",\n      \"Bisha Afraad\",\n      \"Bisha Shanaad\",\n      \"Bisha Lixaad\",\n      \"Bisha Todobaad\",\n      \"Bisha Sideedaad\",\n      \"Bisha Sagaalaad\",\n      \"Bisha Tobnaad\",\n      \"Bisha Kow iyo Tobnaad\",\n      \"Bisha Laba iyo Tobnaad\"\n    ],\n    \"SHORTDAY\": [\n      \"Axd\",\n      \"Isn\",\n      \"Tal\",\n      \"Arb\",\n      \"Kha\",\n      \"Jim\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kob\",\n      \"Lab\",\n      \"Sad\",\n      \"Afr\",\n      \"Sha\",\n      \"Lix\",\n      \"Tod\",\n      \"Sid\",\n      \"Sag\",\n      \"Tob\",\n      \"KIT\",\n      \"LIT\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"so-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_so-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"sn.\",\n      \"gn.\"\n    ],\n    \"DAY\": [\n      \"Axad\",\n      \"Isniin\",\n      \"Talaado\",\n      \"Arbaco\",\n      \"Khamiis\",\n      \"Jimco\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Bisha Koobaad\",\n      \"Bisha Labaad\",\n      \"Bisha Saddexaad\",\n      \"Bisha Afraad\",\n      \"Bisha Shanaad\",\n      \"Bisha Lixaad\",\n      \"Bisha Todobaad\",\n      \"Bisha Sideedaad\",\n      \"Bisha Sagaalaad\",\n      \"Bisha Tobnaad\",\n      \"Bisha Kow iyo Tobnaad\",\n      \"Bisha Laba iyo Tobnaad\"\n    ],\n    \"SHORTDAY\": [\n      \"Axd\",\n      \"Isn\",\n      \"Tal\",\n      \"Arb\",\n      \"Kha\",\n      \"Jim\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kob\",\n      \"Lab\",\n      \"Sad\",\n      \"Afr\",\n      \"Sha\",\n      \"Lix\",\n      \"Tod\",\n      \"Sid\",\n      \"Sag\",\n      \"Tob\",\n      \"KIT\",\n      \"LIT\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"so-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_so-so.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"sn.\",\n      \"gn.\"\n    ],\n    \"DAY\": [\n      \"Axad\",\n      \"Isniin\",\n      \"Talaado\",\n      \"Arbaco\",\n      \"Khamiis\",\n      \"Jimco\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Bisha Koobaad\",\n      \"Bisha Labaad\",\n      \"Bisha Saddexaad\",\n      \"Bisha Afraad\",\n      \"Bisha Shanaad\",\n      \"Bisha Lixaad\",\n      \"Bisha Todobaad\",\n      \"Bisha Sideedaad\",\n      \"Bisha Sagaalaad\",\n      \"Bisha Tobnaad\",\n      \"Bisha Kow iyo Tobnaad\",\n      \"Bisha Laba iyo Tobnaad\"\n    ],\n    \"SHORTDAY\": [\n      \"Axd\",\n      \"Isn\",\n      \"Tal\",\n      \"Arb\",\n      \"Kha\",\n      \"Jim\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kob\",\n      \"Lab\",\n      \"Sad\",\n      \"Afr\",\n      \"Sha\",\n      \"Lix\",\n      \"Tod\",\n      \"Sid\",\n      \"Sag\",\n      \"Tob\",\n      \"KIT\",\n      \"LIT\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SOS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"so-so\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_so.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"sn.\",\n      \"gn.\"\n    ],\n    \"DAY\": [\n      \"Axad\",\n      \"Isniin\",\n      \"Talaado\",\n      \"Arbaco\",\n      \"Khamiis\",\n      \"Jimco\",\n      \"Sabti\"\n    ],\n    \"MONTH\": [\n      \"Bisha Koobaad\",\n      \"Bisha Labaad\",\n      \"Bisha Saddexaad\",\n      \"Bisha Afraad\",\n      \"Bisha Shanaad\",\n      \"Bisha Lixaad\",\n      \"Bisha Todobaad\",\n      \"Bisha Sideedaad\",\n      \"Bisha Sagaalaad\",\n      \"Bisha Tobnaad\",\n      \"Bisha Kow iyo Tobnaad\",\n      \"Bisha Laba iyo Tobnaad\"\n    ],\n    \"SHORTDAY\": [\n      \"Axd\",\n      \"Isn\",\n      \"Tal\",\n      \"Arb\",\n      \"Kha\",\n      \"Jim\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Kob\",\n      \"Lab\",\n      \"Sad\",\n      \"Afr\",\n      \"Sha\",\n      \"Lix\",\n      \"Tod\",\n      \"Sid\",\n      \"Sag\",\n      \"Tob\",\n      \"KIT\",\n      \"LIT\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SOS\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"so\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sq-al.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"paradite\",\n      \"pasdite\"\n    ],\n    \"DAY\": [\n      \"e diel\",\n      \"e h\\u00ebn\\u00eb\",\n      \"e mart\\u00eb\",\n      \"e m\\u00ebrkur\\u00eb\",\n      \"e enjte\",\n      \"e premte\",\n      \"e shtun\\u00eb\"\n    ],\n    \"MONTH\": [\n      \"janar\",\n      \"shkurt\",\n      \"mars\",\n      \"prill\",\n      \"maj\",\n      \"qershor\",\n      \"korrik\",\n      \"gusht\",\n      \"shtator\",\n      \"tetor\",\n      \"n\\u00ebntor\",\n      \"dhjetor\"\n    ],\n    \"SHORTDAY\": [\n      \"Die\",\n      \"H\\u00ebn\",\n      \"Mar\",\n      \"M\\u00ebr\",\n      \"Enj\",\n      \"Pre\",\n      \"Sht\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Shk\",\n      \"Mar\",\n      \"Pri\",\n      \"Maj\",\n      \"Qer\",\n      \"Kor\",\n      \"Gsh\",\n      \"Sht\",\n      \"Tet\",\n      \"N\\u00ebn\",\n      \"Dhj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy HH:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Lek\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sq-al\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sq-mk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"paradite\",\n      \"pasdite\"\n    ],\n    \"DAY\": [\n      \"e diel\",\n      \"e h\\u00ebn\\u00eb\",\n      \"e mart\\u00eb\",\n      \"e m\\u00ebrkur\\u00eb\",\n      \"e enjte\",\n      \"e premte\",\n      \"e shtun\\u00eb\"\n    ],\n    \"MONTH\": [\n      \"janar\",\n      \"shkurt\",\n      \"mars\",\n      \"prill\",\n      \"maj\",\n      \"qershor\",\n      \"korrik\",\n      \"gusht\",\n      \"shtator\",\n      \"tetor\",\n      \"n\\u00ebntor\",\n      \"dhjetor\"\n    ],\n    \"SHORTDAY\": [\n      \"Die\",\n      \"H\\u00ebn\",\n      \"Mar\",\n      \"M\\u00ebr\",\n      \"Enj\",\n      \"Pre\",\n      \"Sht\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Shk\",\n      \"Mar\",\n      \"Pri\",\n      \"Maj\",\n      \"Qer\",\n      \"Kor\",\n      \"Gsh\",\n      \"Sht\",\n      \"Tet\",\n      \"N\\u00ebn\",\n      \"Dhj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy HH:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sq-mk\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sq-xk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"paradite\",\n      \"pasdite\"\n    ],\n    \"DAY\": [\n      \"e diel\",\n      \"e h\\u00ebn\\u00eb\",\n      \"e mart\\u00eb\",\n      \"e m\\u00ebrkur\\u00eb\",\n      \"e enjte\",\n      \"e premte\",\n      \"e shtun\\u00eb\"\n    ],\n    \"MONTH\": [\n      \"janar\",\n      \"shkurt\",\n      \"mars\",\n      \"prill\",\n      \"maj\",\n      \"qershor\",\n      \"korrik\",\n      \"gusht\",\n      \"shtator\",\n      \"tetor\",\n      \"n\\u00ebntor\",\n      \"dhjetor\"\n    ],\n    \"SHORTDAY\": [\n      \"Die\",\n      \"H\\u00ebn\",\n      \"Mar\",\n      \"M\\u00ebr\",\n      \"Enj\",\n      \"Pre\",\n      \"Sht\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Shk\",\n      \"Mar\",\n      \"Pri\",\n      \"Maj\",\n      \"Qer\",\n      \"Kor\",\n      \"Gsh\",\n      \"Sht\",\n      \"Tet\",\n      \"N\\u00ebn\",\n      \"Dhj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy HH:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sq-xk\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"paradite\",\n      \"pasdite\"\n    ],\n    \"DAY\": [\n      \"e diel\",\n      \"e h\\u00ebn\\u00eb\",\n      \"e mart\\u00eb\",\n      \"e m\\u00ebrkur\\u00eb\",\n      \"e enjte\",\n      \"e premte\",\n      \"e shtun\\u00eb\"\n    ],\n    \"MONTH\": [\n      \"janar\",\n      \"shkurt\",\n      \"mars\",\n      \"prill\",\n      \"maj\",\n      \"qershor\",\n      \"korrik\",\n      \"gusht\",\n      \"shtator\",\n      \"tetor\",\n      \"n\\u00ebntor\",\n      \"dhjetor\"\n    ],\n    \"SHORTDAY\": [\n      \"Die\",\n      \"H\\u00ebn\",\n      \"Mar\",\n      \"M\\u00ebr\",\n      \"Enj\",\n      \"Pre\",\n      \"Sht\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Shk\",\n      \"Mar\",\n      \"Pri\",\n      \"Maj\",\n      \"Qer\",\n      \"Kor\",\n      \"Gsh\",\n      \"Sht\",\n      \"Tet\",\n      \"N\\u00ebn\",\n      \"Dhj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d.M.yy HH:mm\",\n    \"shortDate\": \"d.M.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Lek\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sq\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-cyrl-ba.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0438\\u0458\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\\u0438\",\n      \"\\u0458\\u0443\\u043b\\u0438\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0438\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"y-MM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy-MM-dd HH:mm\",\n    \"shortDate\": \"yy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-cyrl-ba\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-cyrl-me.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0435\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-cyrl-me\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-cyrl-rs.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0435\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-cyrl-rs\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-cyrl-xk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0435\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-cyrl-xk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0435\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-latn-ba.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pre podne\",\n      \"po podne\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljak\",\n      \"utorak\",\n      \"srijeda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"avgust\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sri\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"y-MM-dd HH:mm:ss\",\n    \"mediumDate\": \"y-MM-dd\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy-MM-dd HH:mm\",\n    \"shortDate\": \"yy-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"KM\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-latn-ba\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-latn-me.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pre podne\",\n      \"po podne\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljak\",\n      \"utorak\",\n      \"sreda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avgust\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sre\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-latn-me\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-latn-rs.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pre podne\",\n      \"po podne\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljak\",\n      \"utorak\",\n      \"sreda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avgust\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sre\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-latn-rs\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-latn-xk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pre podne\",\n      \"po podne\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljak\",\n      \"utorak\",\n      \"sreda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avgust\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sre\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-latn-xk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"pre podne\",\n      \"po podne\"\n    ],\n    \"DAY\": [\n      \"nedelja\",\n      \"ponedeljak\",\n      \"utorak\",\n      \"sreda\",\n      \"\\u010detvrtak\",\n      \"petak\",\n      \"subota\"\n    ],\n    \"MONTH\": [\n      \"januar\",\n      \"februar\",\n      \"mart\",\n      \"april\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avgust\",\n      \"septembar\",\n      \"oktobar\",\n      \"novembar\",\n      \"decembar\"\n    ],\n    \"SHORTDAY\": [\n      \"ned\",\n      \"pon\",\n      \"uto\",\n      \"sre\",\n      \"\\u010det\",\n      \"pet\",\n      \"sub\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"avg\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0440\\u0435 \\u043f\\u043e\\u0434\\u043d\\u0435\",\n      \"\\u043f\\u043e \\u043f\\u043e\\u0434\\u043d\\u0435\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a\",\n      \"\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a\",\n      \"\\u0441\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a\",\n      \"\\u043f\\u0435\\u0442\\u0430\\u043a\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\",\n      \"\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440\",\n      \"\\u043c\\u0430\\u0440\\u0442\",\n      \"\\u0430\\u043f\\u0440\\u0438\\u043b\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440\",\n      \"\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440\",\n      \"\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u043d\\u0435\\u0434\",\n      \"\\u043f\\u043e\\u043d\",\n      \"\\u0443\\u0442\\u043e\",\n      \"\\u0441\\u0440\\u0435\",\n      \"\\u0447\\u0435\\u0442\",\n      \"\\u043f\\u0435\\u0442\",\n      \"\\u0441\\u0443\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0458\\u0430\\u043d\",\n      \"\\u0444\\u0435\\u0431\",\n      \"\\u043c\\u0430\\u0440\",\n      \"\\u0430\\u043f\\u0440\",\n      \"\\u043c\\u0430\\u0458\",\n      \"\\u0458\\u0443\\u043d\",\n      \"\\u0458\\u0443\\u043b\",\n      \"\\u0430\\u0432\\u0433\",\n      \"\\u0441\\u0435\\u043f\",\n      \"\\u043e\\u043a\\u0442\",\n      \"\\u043d\\u043e\\u0432\",\n      \"\\u0434\\u0435\\u0446\"\n    ],\n    \"fullDate\": \"EEEE, dd. MMMM y.\",\n    \"longDate\": \"dd. MMMM y.\",\n    \"medium\": \"dd.MM.y. HH.mm.ss\",\n    \"mediumDate\": \"dd.MM.y.\",\n    \"mediumTime\": \"HH.mm.ss\",\n    \"short\": \"d.M.yy. HH.mm\",\n    \"shortDate\": \"d.M.yy.\",\n    \"shortTime\": \"HH.mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"din\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ss-sz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lisontfo\",\n      \"uMsombuluko\",\n      \"Lesibili\",\n      \"Lesitsatfu\",\n      \"Lesine\",\n      \"Lesihlanu\",\n      \"uMgcibelo\"\n    ],\n    \"MONTH\": [\n      \"Bhimbidvwane\",\n      \"iNdlovana\",\n      \"iNdlovu-lenkhulu\",\n      \"Mabasa\",\n      \"iNkhwekhweti\",\n      \"iNhlaba\",\n      \"Kholwane\",\n      \"iNgci\",\n      \"iNyoni\",\n      \"iMphala\",\n      \"Lweti\",\n      \"iNgongoni\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mso\",\n      \"Bil\",\n      \"Tsa\",\n      \"Ne\",\n      \"Hla\",\n      \"Mgc\"\n    ],\n    \"SHORTMONTH\": [\n      \"Bhi\",\n      \"Van\",\n      \"Vol\",\n      \"Mab\",\n      \"Nkh\",\n      \"Nhl\",\n      \"Kho\",\n      \"Ngc\",\n      \"Nyo\",\n      \"Mph\",\n      \"Lwe\",\n      \"Ngo\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"SZL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ss-sz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ss-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lisontfo\",\n      \"uMsombuluko\",\n      \"Lesibili\",\n      \"Lesitsatfu\",\n      \"Lesine\",\n      \"Lesihlanu\",\n      \"uMgcibelo\"\n    ],\n    \"MONTH\": [\n      \"Bhimbidvwane\",\n      \"iNdlovana\",\n      \"iNdlovu-lenkhulu\",\n      \"Mabasa\",\n      \"iNkhwekhweti\",\n      \"iNhlaba\",\n      \"Kholwane\",\n      \"iNgci\",\n      \"iNyoni\",\n      \"iMphala\",\n      \"Lweti\",\n      \"iNgongoni\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mso\",\n      \"Bil\",\n      \"Tsa\",\n      \"Ne\",\n      \"Hla\",\n      \"Mgc\"\n    ],\n    \"SHORTMONTH\": [\n      \"Bhi\",\n      \"Van\",\n      \"Vol\",\n      \"Mab\",\n      \"Nkh\",\n      \"Nhl\",\n      \"Kho\",\n      \"Ngc\",\n      \"Nyo\",\n      \"Mph\",\n      \"Lwe\",\n      \"Ngo\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ss-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ss.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Lisontfo\",\n      \"uMsombuluko\",\n      \"Lesibili\",\n      \"Lesitsatfu\",\n      \"Lesine\",\n      \"Lesihlanu\",\n      \"uMgcibelo\"\n    ],\n    \"MONTH\": [\n      \"Bhimbidvwane\",\n      \"iNdlovana\",\n      \"iNdlovu-lenkhulu\",\n      \"Mabasa\",\n      \"iNkhwekhweti\",\n      \"iNhlaba\",\n      \"Kholwane\",\n      \"iNgci\",\n      \"iNyoni\",\n      \"iMphala\",\n      \"Lweti\",\n      \"iNgongoni\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mso\",\n      \"Bil\",\n      \"Tsa\",\n      \"Ne\",\n      \"Hla\",\n      \"Mgc\"\n    ],\n    \"SHORTMONTH\": [\n      \"Bhi\",\n      \"Van\",\n      \"Vol\",\n      \"Mab\",\n      \"Nkh\",\n      \"Nhl\",\n      \"Kho\",\n      \"Ngc\",\n      \"Nyo\",\n      \"Mph\",\n      \"Lwe\",\n      \"Ngo\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ss\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ssy-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Naba Sambat\",\n      \"Sani\",\n      \"Salus\",\n      \"Rabuq\",\n      \"Camus\",\n      \"Jumqata\",\n      \"Qunxa Sambat\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Liiqen\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Nab\",\n      \"San\",\n      \"Sal\",\n      \"Rab\",\n      \"Cam\",\n      \"Jum\",\n      \"Qun\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ssy-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ssy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"saaku\",\n      \"carra\"\n    ],\n    \"DAY\": [\n      \"Naba Sambat\",\n      \"Sani\",\n      \"Salus\",\n      \"Rabuq\",\n      \"Camus\",\n      \"Jumqata\",\n      \"Qunxa Sambat\"\n    ],\n    \"MONTH\": [\n      \"Qunxa Garablu\",\n      \"Kudo\",\n      \"Ciggilta Kudo\",\n      \"Agda Baxis\",\n      \"Caxah Alsa\",\n      \"Qasa Dirri\",\n      \"Qado Dirri\",\n      \"Liiqen\",\n      \"Waysu\",\n      \"Diteli\",\n      \"Ximoli\",\n      \"Kaxxa Garablu\"\n    ],\n    \"SHORTDAY\": [\n      \"Nab\",\n      \"San\",\n      \"Sal\",\n      \"Rab\",\n      \"Cam\",\n      \"Jum\",\n      \"Qun\"\n    ],\n    \"SHORTMONTH\": [\n      \"Qun\",\n      \"Nah\",\n      \"Cig\",\n      \"Agd\",\n      \"Cax\",\n      \"Qas\",\n      \"Qad\",\n      \"Leq\",\n      \"Way\",\n      \"Dit\",\n      \"Xim\",\n      \"Kax\"\n    ],\n    \"fullDate\": \"EEEE, MMMM dd, y\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ssy\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_st-ls.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sontaha\",\n      \"Mmantaha\",\n      \"Labobedi\",\n      \"Laboraru\",\n      \"Labone\",\n      \"Labohlane\",\n      \"Moqebelo\"\n    ],\n    \"MONTH\": [\n      \"Phesekgong\",\n      \"Hlakola\",\n      \"Hlakubele\",\n      \"Mmese\",\n      \"Motsheanong\",\n      \"Phupjane\",\n      \"Phupu\",\n      \"Phata\",\n      \"Leotshe\",\n      \"Mphalane\",\n      \"Pundungwane\",\n      \"Tshitwe\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mma\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Hla\",\n      \"Moq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Phe\",\n      \"Kol\",\n      \"Ube\",\n      \"Mme\",\n      \"Mot\",\n      \"Jan\",\n      \"Upu\",\n      \"Pha\",\n      \"Leo\",\n      \"Mph\",\n      \"Pun\",\n      \"Tsh\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"st-ls\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_st-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sontaha\",\n      \"Mmantaha\",\n      \"Labobedi\",\n      \"Laboraru\",\n      \"Labone\",\n      \"Labohlane\",\n      \"Moqebelo\"\n    ],\n    \"MONTH\": [\n      \"Phesekgong\",\n      \"Hlakola\",\n      \"Hlakubele\",\n      \"Mmese\",\n      \"Motsheanong\",\n      \"Phupjane\",\n      \"Phupu\",\n      \"Phata\",\n      \"Leotshe\",\n      \"Mphalane\",\n      \"Pundungwane\",\n      \"Tshitwe\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mma\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Hla\",\n      \"Moq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Phe\",\n      \"Kol\",\n      \"Ube\",\n      \"Mme\",\n      \"Mot\",\n      \"Jan\",\n      \"Upu\",\n      \"Pha\",\n      \"Leo\",\n      \"Mph\",\n      \"Pun\",\n      \"Tsh\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"st-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_st.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sontaha\",\n      \"Mmantaha\",\n      \"Labobedi\",\n      \"Laboraru\",\n      \"Labone\",\n      \"Labohlane\",\n      \"Moqebelo\"\n    ],\n    \"MONTH\": [\n      \"Phesekgong\",\n      \"Hlakola\",\n      \"Hlakubele\",\n      \"Mmese\",\n      \"Motsheanong\",\n      \"Phupjane\",\n      \"Phupu\",\n      \"Phata\",\n      \"Leotshe\",\n      \"Mphalane\",\n      \"Pundungwane\",\n      \"Tshitwe\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mma\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Hla\",\n      \"Moq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Phe\",\n      \"Kol\",\n      \"Ube\",\n      \"Mme\",\n      \"Mot\",\n      \"Jan\",\n      \"Upu\",\n      \"Pha\",\n      \"Leo\",\n      \"Mph\",\n      \"Pun\",\n      \"Tsh\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"st\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sv-ax.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"fm\",\n      \"em\"\n    ],\n    \"DAY\": [\n      \"s\\u00f6ndag\",\n      \"m\\u00e5ndag\",\n      \"tisdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f6rdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"mars\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"augusti\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f6n\",\n      \"m\\u00e5n\",\n      \"tis\",\n      \"ons\",\n      \"tors\",\n      \"fre\",\n      \"l\\u00f6r\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sv-ax\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sv-fi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"fm\",\n      \"em\"\n    ],\n    \"DAY\": [\n      \"s\\u00f6ndag\",\n      \"m\\u00e5ndag\",\n      \"tisdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f6rdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"mars\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"augusti\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f6n\",\n      \"m\\u00e5n\",\n      \"tis\",\n      \"ons\",\n      \"tors\",\n      \"fre\",\n      \"l\\u00f6r\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE'en' 'den' d:'e' MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd-MM-y HH:mm\",\n    \"shortDate\": \"dd-MM-y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sv-fi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sv-se.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"fm\",\n      \"em\"\n    ],\n    \"DAY\": [\n      \"s\\u00f6ndag\",\n      \"m\\u00e5ndag\",\n      \"tisdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f6rdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"mars\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"augusti\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f6n\",\n      \"m\\u00e5n\",\n      \"tis\",\n      \"ons\",\n      \"tors\",\n      \"fre\",\n      \"l\\u00f6r\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sv-se\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sv.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"fm\",\n      \"em\"\n    ],\n    \"DAY\": [\n      \"s\\u00f6ndag\",\n      \"m\\u00e5ndag\",\n      \"tisdag\",\n      \"onsdag\",\n      \"torsdag\",\n      \"fredag\",\n      \"l\\u00f6rdag\"\n    ],\n    \"MONTH\": [\n      \"januari\",\n      \"februari\",\n      \"mars\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"augusti\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"SHORTDAY\": [\n      \"s\\u00f6n\",\n      \"m\\u00e5n\",\n      \"tis\",\n      \"ons\",\n      \"tors\",\n      \"fre\",\n      \"l\\u00f6r\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan.\",\n      \"feb.\",\n      \"mars\",\n      \"apr.\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"aug.\",\n      \"sep.\",\n      \"okt.\",\n      \"nov.\",\n      \"dec.\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"kr\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"sv\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sw-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sw-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sw-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sw-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sw-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sw-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_sw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprili\",\n      \"Mei\",\n      \"Juni\",\n      \"Julai\",\n      \"Agosti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jumapili\",\n      \"Jumatatu\",\n      \"Jumanne\",\n      \"Jumatano\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"sw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_swc-cd.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ya asubuyi\",\n      \"ya muchana\"\n    ],\n    \"DAY\": [\n      \"siku ya yenga\",\n      \"siku ya kwanza\",\n      \"siku ya pili\",\n      \"siku ya tatu\",\n      \"siku ya ine\",\n      \"siku ya tanu\",\n      \"siku ya sita\"\n    ],\n    \"MONTH\": [\n      \"mwezi ya kwanja\",\n      \"mwezi ya pili\",\n      \"mwezi ya tatu\",\n      \"mwezi ya ine\",\n      \"mwezi ya tanu\",\n      \"mwezi ya sita\",\n      \"mwezi ya saba\",\n      \"mwezi ya munane\",\n      \"mwezi ya tisa\",\n      \"mwezi ya kumi\",\n      \"mwezi ya kumi na moya\",\n      \"mwezi ya kumi ya mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"yen\",\n      \"kwa\",\n      \"pil\",\n      \"tat\",\n      \"ine\",\n      \"tan\",\n      \"sit\"\n    ],\n    \"SHORTMONTH\": [\n      \"mkw\",\n      \"mpi\",\n      \"mtu\",\n      \"min\",\n      \"mtn\",\n      \"mst\",\n      \"msb\",\n      \"mun\",\n      \"mts\",\n      \"mku\",\n      \"mkm\",\n      \"mkb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"swc-cd\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_swc.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ya asubuyi\",\n      \"ya muchana\"\n    ],\n    \"DAY\": [\n      \"siku ya yenga\",\n      \"siku ya kwanza\",\n      \"siku ya pili\",\n      \"siku ya tatu\",\n      \"siku ya ine\",\n      \"siku ya tanu\",\n      \"siku ya sita\"\n    ],\n    \"MONTH\": [\n      \"mwezi ya kwanja\",\n      \"mwezi ya pili\",\n      \"mwezi ya tatu\",\n      \"mwezi ya ine\",\n      \"mwezi ya tanu\",\n      \"mwezi ya sita\",\n      \"mwezi ya saba\",\n      \"mwezi ya munane\",\n      \"mwezi ya tisa\",\n      \"mwezi ya kumi\",\n      \"mwezi ya kumi na moya\",\n      \"mwezi ya kumi ya mbili\"\n    ],\n    \"SHORTDAY\": [\n      \"yen\",\n      \"kwa\",\n      \"pil\",\n      \"tat\",\n      \"ine\",\n      \"tan\",\n      \"sit\"\n    ],\n    \"SHORTMONTH\": [\n      \"mkw\",\n      \"mpi\",\n      \"mtu\",\n      \"min\",\n      \"mtn\",\n      \"mst\",\n      \"msb\",\n      \"mun\",\n      \"mts\",\n      \"mku\",\n      \"mkm\",\n      \"mkb\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FrCD\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"swc\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ta-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0bae\\u0bc1\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\",\n      \"\\u0baa\\u0bbf\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"\n    ],\n    \"DAY\": [\n      \"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1\",\n      \"\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\",\n      \"\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\",\n      \"\\u0b9a\\u0ba9\\u0bbf\"\n    ],\n    \"MONTH\": [\n      \"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd\",\n      \"\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bcb\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b9e\\u0bbe\",\n      \"\\u0ba4\\u0bbf\",\n      \"\\u0b9a\\u0bc6\",\n      \"\\u0baa\\u0bc1\",\n      \"\\u0bb5\\u0bbf\",\n      \"\\u0bb5\\u0bc6\",\n      \"\\u0b9a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b9c\\u0ba9.\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd.\",\n      \"\\u0b8f\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95.\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd.\",\n      \"\\u0b85\\u0b95\\u0bcd.\",\n      \"\\u0ba8\\u0bb5.\",\n      \"\\u0b9f\\u0bbf\\u0b9a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ta-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ta-lk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0bae\\u0bc1\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\",\n      \"\\u0baa\\u0bbf\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"\n    ],\n    \"DAY\": [\n      \"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1\",\n      \"\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\",\n      \"\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\",\n      \"\\u0b9a\\u0ba9\\u0bbf\"\n    ],\n    \"MONTH\": [\n      \"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd\",\n      \"\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bcb\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b9e\\u0bbe\",\n      \"\\u0ba4\\u0bbf\",\n      \"\\u0b9a\\u0bc6\",\n      \"\\u0baa\\u0bc1\",\n      \"\\u0bb5\\u0bbf\",\n      \"\\u0bb5\\u0bc6\",\n      \"\\u0b9a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b9c\\u0ba9.\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd.\",\n      \"\\u0b8f\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95.\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd.\",\n      \"\\u0b85\\u0b95\\u0bcd.\",\n      \"\\u0ba8\\u0bb5.\",\n      \"\\u0b9f\\u0bbf\\u0b9a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ta-lk\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ta-my.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0bae\\u0bc1\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\",\n      \"\\u0baa\\u0bbf\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"\n    ],\n    \"DAY\": [\n      \"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1\",\n      \"\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\",\n      \"\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\",\n      \"\\u0b9a\\u0ba9\\u0bbf\"\n    ],\n    \"MONTH\": [\n      \"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd\",\n      \"\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bcb\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b9e\\u0bbe\",\n      \"\\u0ba4\\u0bbf\",\n      \"\\u0b9a\\u0bc6\",\n      \"\\u0baa\\u0bc1\",\n      \"\\u0bb5\\u0bbf\",\n      \"\\u0bb5\\u0bc6\",\n      \"\\u0b9a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b9c\\u0ba9.\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd.\",\n      \"\\u0b8f\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95.\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd.\",\n      \"\\u0b85\\u0b95\\u0bcd.\",\n      \"\\u0ba8\\u0bb5.\",\n      \"\\u0b9f\\u0bbf\\u0b9a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"RM\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ta-my\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ta-sg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0bae\\u0bc1\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\",\n      \"\\u0baa\\u0bbf\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"\n    ],\n    \"DAY\": [\n      \"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1\",\n      \"\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\",\n      \"\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\",\n      \"\\u0b9a\\u0ba9\\u0bbf\"\n    ],\n    \"MONTH\": [\n      \"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd\",\n      \"\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bcb\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b9e\\u0bbe\",\n      \"\\u0ba4\\u0bbf\",\n      \"\\u0b9a\\u0bc6\",\n      \"\\u0baa\\u0bc1\",\n      \"\\u0bb5\\u0bbf\",\n      \"\\u0bb5\\u0bc6\",\n      \"\\u0b9a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b9c\\u0ba9.\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd.\",\n      \"\\u0b8f\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95.\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd.\",\n      \"\\u0b85\\u0b95\\u0bcd.\",\n      \"\\u0ba8\\u0bb5.\",\n      \"\\u0b9f\\u0bbf\\u0b9a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ta-sg\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ta.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0bae\\u0bc1\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\",\n      \"\\u0baa\\u0bbf\\u0bb1\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"\n    ],\n    \"DAY\": [\n      \"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1\",\n      \"\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\",\n      \"\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd\",\n      \"\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\",\n      \"\\u0b9a\\u0ba9\\u0bbf\"\n    ],\n    \"MONTH\": [\n      \"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd\",\n      \"\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bcb\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\",\n      \"\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0b9e\\u0bbe\",\n      \"\\u0ba4\\u0bbf\",\n      \"\\u0b9a\\u0bc6\",\n      \"\\u0baa\\u0bc1\",\n      \"\\u0bb5\\u0bbf\",\n      \"\\u0bb5\\u0bc6\",\n      \"\\u0b9a\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0b9c\\u0ba9.\",\n      \"\\u0baa\\u0bbf\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bbe\\u0bb0\\u0bcd.\",\n      \"\\u0b8f\\u0baa\\u0bcd.\",\n      \"\\u0bae\\u0bc7\",\n      \"\\u0b9c\\u0bc2\\u0ba9\\u0bcd\",\n      \"\\u0b9c\\u0bc2\\u0bb2\\u0bc8\",\n      \"\\u0b86\\u0b95.\",\n      \"\\u0b9a\\u0bc6\\u0baa\\u0bcd.\",\n      \"\\u0b85\\u0b95\\u0bcd.\",\n      \"\\u0ba8\\u0bb5.\",\n      \"\\u0b9f\\u0bbf\\u0b9a.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM, y\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d-M-yy h:mm a\",\n    \"shortDate\": \"d-M-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ta\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_te-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"[AM]\",\n      \"[PM]\"\n    ],\n    \"DAY\": [\n      \"\\u0c06\\u0c26\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c38\\u0c4b\\u0c2e\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c2e\\u0c02\\u0c17\\u0c33\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c2c\\u0c41\\u0c27\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c17\\u0c41\\u0c30\\u0c41\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c36\\u0c28\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02\"\n    ],\n    \"MONTH\": [\n      \"\\u0c1c\\u0c28\\u0c35\\u0c30\\u0c3f\",\n      \"\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30\\u0c35\\u0c30\\u0c3f\",\n      \"\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f\",\n      \"\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f\\u0c32\\u0c4d\",\n      \"\\u0c2e\\u0c47\",\n      \"\\u0c1c\\u0c42\\u0c28\\u0c4d\",\n      \"\\u0c1c\\u0c41\\u0c32\\u0c48\",\n      \"\\u0c06\\u0c17\\u0c38\\u0c4d\\u0c1f\\u0c41\",\n      \"\\u0c38\\u0c46\\u0c2a\\u0c4d\\u0c1f\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c28\\u0c35\\u0c02\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c21\\u0c3f\\u0c38\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0c06\\u0c26\\u0c3f\",\n      \"\\u0c38\\u0c4b\\u0c2e\",\n      \"\\u0c2e\\u0c02\\u0c17\\u0c33\",\n      \"\\u0c2c\\u0c41\\u0c27\",\n      \"\\u0c17\\u0c41\\u0c30\\u0c41\",\n      \"\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30\",\n      \"\\u0c36\\u0c28\\u0c3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0c1c\\u0c28\",\n      \"\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30\",\n      \"\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f\",\n      \"\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f\",\n      \"\\u0c2e\\u0c47\",\n      \"\\u0c1c\\u0c42\\u0c28\\u0c4d\",\n      \"\\u0c1c\\u0c41\\u0c32\\u0c48\",\n      \"\\u0c06\\u0c17\",\n      \"\\u0c38\\u0c46\\u0c2a\\u0c4d\\u0c1f\\u0c46\\u0c02\",\n      \"\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b\",\n      \"\\u0c28\\u0c35\\u0c02\",\n      \"\\u0c21\\u0c3f\\u0c38\\u0c46\\u0c02\"\n    ],\n    \"fullDate\": \"d, MMMM y, EEEE\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd-MM-yy h:mm a\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"te-in\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_te.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"[AM]\",\n      \"[PM]\"\n    ],\n    \"DAY\": [\n      \"\\u0c06\\u0c26\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c38\\u0c4b\\u0c2e\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c2e\\u0c02\\u0c17\\u0c33\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c2c\\u0c41\\u0c27\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c17\\u0c41\\u0c30\\u0c41\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30\\u0c35\\u0c3e\\u0c30\\u0c02\",\n      \"\\u0c36\\u0c28\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02\"\n    ],\n    \"MONTH\": [\n      \"\\u0c1c\\u0c28\\u0c35\\u0c30\\u0c3f\",\n      \"\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30\\u0c35\\u0c30\\u0c3f\",\n      \"\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f\",\n      \"\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f\\u0c32\\u0c4d\",\n      \"\\u0c2e\\u0c47\",\n      \"\\u0c1c\\u0c42\\u0c28\\u0c4d\",\n      \"\\u0c1c\\u0c41\\u0c32\\u0c48\",\n      \"\\u0c06\\u0c17\\u0c38\\u0c4d\\u0c1f\\u0c41\",\n      \"\\u0c38\\u0c46\\u0c2a\\u0c4d\\u0c1f\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c28\\u0c35\\u0c02\\u0c2c\\u0c30\\u0c4d\",\n      \"\\u0c21\\u0c3f\\u0c38\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0c06\\u0c26\\u0c3f\",\n      \"\\u0c38\\u0c4b\\u0c2e\",\n      \"\\u0c2e\\u0c02\\u0c17\\u0c33\",\n      \"\\u0c2c\\u0c41\\u0c27\",\n      \"\\u0c17\\u0c41\\u0c30\\u0c41\",\n      \"\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30\",\n      \"\\u0c36\\u0c28\\u0c3f\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0c1c\\u0c28\",\n      \"\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30\",\n      \"\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f\",\n      \"\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f\",\n      \"\\u0c2e\\u0c47\",\n      \"\\u0c1c\\u0c42\\u0c28\\u0c4d\",\n      \"\\u0c1c\\u0c41\\u0c32\\u0c48\",\n      \"\\u0c06\\u0c17\",\n      \"\\u0c38\\u0c46\\u0c2a\\u0c4d\\u0c1f\\u0c46\\u0c02\",\n      \"\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b\",\n      \"\\u0c28\\u0c35\\u0c02\",\n      \"\\u0c21\\u0c3f\\u0c38\\u0c46\\u0c02\"\n    ],\n    \"fullDate\": \"d, MMMM y, EEEE\",\n    \"longDate\": \"d MMMM, y\",\n    \"medium\": \"d MMM, y h:mm:ss a\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd-MM-yy h:mm a\",\n    \"shortDate\": \"dd-MM-yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"te\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_teo-ke.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Taparachu\",\n      \"Ebongi\"\n    ],\n    \"DAY\": [\n      \"Nakaejuma\",\n      \"Nakaebarasa\",\n      \"Nakaare\",\n      \"Nakauni\",\n      \"Nakaung\\u2019on\",\n      \"Nakakany\",\n      \"Nakasabiti\"\n    ],\n    \"MONTH\": [\n      \"Orara\",\n      \"Omuk\",\n      \"Okwamg\\u2019\",\n      \"Odung\\u2019el\",\n      \"Omaruk\",\n      \"Omodok\\u2019king\\u2019ol\",\n      \"Ojola\",\n      \"Opedel\",\n      \"Osokosokoma\",\n      \"Otibar\",\n      \"Olabor\",\n      \"Opoo\"\n    ],\n    \"SHORTDAY\": [\n      \"Jum\",\n      \"Bar\",\n      \"Aar\",\n      \"Uni\",\n      \"Ung\",\n      \"Kan\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Rar\",\n      \"Muk\",\n      \"Kwa\",\n      \"Dun\",\n      \"Mar\",\n      \"Mod\",\n      \"Jol\",\n      \"Ped\",\n      \"Sok\",\n      \"Tib\",\n      \"Lab\",\n      \"Poo\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Ksh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"teo-ke\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_teo-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Taparachu\",\n      \"Ebongi\"\n    ],\n    \"DAY\": [\n      \"Nakaejuma\",\n      \"Nakaebarasa\",\n      \"Nakaare\",\n      \"Nakauni\",\n      \"Nakaung\\u2019on\",\n      \"Nakakany\",\n      \"Nakasabiti\"\n    ],\n    \"MONTH\": [\n      \"Orara\",\n      \"Omuk\",\n      \"Okwamg\\u2019\",\n      \"Odung\\u2019el\",\n      \"Omaruk\",\n      \"Omodok\\u2019king\\u2019ol\",\n      \"Ojola\",\n      \"Opedel\",\n      \"Osokosokoma\",\n      \"Otibar\",\n      \"Olabor\",\n      \"Opoo\"\n    ],\n    \"SHORTDAY\": [\n      \"Jum\",\n      \"Bar\",\n      \"Aar\",\n      \"Uni\",\n      \"Ung\",\n      \"Kan\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Rar\",\n      \"Muk\",\n      \"Kwa\",\n      \"Dun\",\n      \"Mar\",\n      \"Mod\",\n      \"Jol\",\n      \"Ped\",\n      \"Sok\",\n      \"Tib\",\n      \"Lab\",\n      \"Poo\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"teo-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_teo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Taparachu\",\n      \"Ebongi\"\n    ],\n    \"DAY\": [\n      \"Nakaejuma\",\n      \"Nakaebarasa\",\n      \"Nakaare\",\n      \"Nakauni\",\n      \"Nakaung\\u2019on\",\n      \"Nakakany\",\n      \"Nakasabiti\"\n    ],\n    \"MONTH\": [\n      \"Orara\",\n      \"Omuk\",\n      \"Okwamg\\u2019\",\n      \"Odung\\u2019el\",\n      \"Omaruk\",\n      \"Omodok\\u2019king\\u2019ol\",\n      \"Ojola\",\n      \"Opedel\",\n      \"Osokosokoma\",\n      \"Otibar\",\n      \"Olabor\",\n      \"Opoo\"\n    ],\n    \"SHORTDAY\": [\n      \"Jum\",\n      \"Bar\",\n      \"Aar\",\n      \"Uni\",\n      \"Ung\",\n      \"Kan\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Rar\",\n      \"Muk\",\n      \"Kwa\",\n      \"Dun\",\n      \"Mar\",\n      \"Mod\",\n      \"Jol\",\n      \"Ped\",\n      \"Sok\",\n      \"Tib\",\n      \"Lab\",\n      \"Poo\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"teo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tg-cyrl-tj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0435. \\u0447\\u043e.\",\n      \"\\u043f\\u0430. \\u0447\\u043e.\"\n    ],\n    \"DAY\": [\n      \"\\u042f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0414\\u0443\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0421\\u0435\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0427\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u041f\\u0430\\u043d\\u04b7\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u04b6\\u0443\\u043c\\u044a\\u0430\",\n      \"\\u0428\\u0430\\u043d\\u0431\\u0435\"\n    ],\n    \"MONTH\": [\n      \"\\u042f\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u041c\\u0430\\u0440\\u0442\",\n      \"\\u0410\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041d\\u043e\\u044f\\u0431\\u0440\",\n      \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u042f\\u0448\\u0431\",\n      \"\\u0414\\u0448\\u0431\",\n      \"\\u0421\\u0448\\u0431\",\n      \"\\u0427\\u0448\\u0431\",\n      \"\\u041f\\u0448\\u0431\",\n      \"\\u04b6\\u043c\\u044a\",\n      \"\\u0428\\u043d\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u042f\\u043d\\u0432\",\n      \"\\u0424\\u0435\\u0432\",\n      \"\\u041c\\u0430\\u0440\",\n      \"\\u0410\\u043f\\u0440\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\",\n      \"\\u0421\\u0435\\u043d\",\n      \"\\u041e\\u043a\\u0442\",\n      \"\\u041d\\u043e\\u044f\",\n      \"\\u0414\\u0435\\u043a\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Som\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tg-cyrl-tj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tg-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0435. \\u0447\\u043e.\",\n      \"\\u043f\\u0430. \\u0447\\u043e.\"\n    ],\n    \"DAY\": [\n      \"\\u042f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0414\\u0443\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0421\\u0435\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0427\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u041f\\u0430\\u043d\\u04b7\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u04b6\\u0443\\u043c\\u044a\\u0430\",\n      \"\\u0428\\u0430\\u043d\\u0431\\u0435\"\n    ],\n    \"MONTH\": [\n      \"\\u042f\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u041c\\u0430\\u0440\\u0442\",\n      \"\\u0410\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041d\\u043e\\u044f\\u0431\\u0440\",\n      \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u042f\\u0448\\u0431\",\n      \"\\u0414\\u0448\\u0431\",\n      \"\\u0421\\u0448\\u0431\",\n      \"\\u0427\\u0448\\u0431\",\n      \"\\u041f\\u0448\\u0431\",\n      \"\\u04b6\\u043c\\u044a\",\n      \"\\u0428\\u043d\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u042f\\u043d\\u0432\",\n      \"\\u0424\\u0435\\u0432\",\n      \"\\u041c\\u0430\\u0440\",\n      \"\\u0410\\u043f\\u0440\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\",\n      \"\\u0421\\u0435\\u043d\",\n      \"\\u041e\\u043a\\u0442\",\n      \"\\u041d\\u043e\\u044f\",\n      \"\\u0414\\u0435\\u043a\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tg-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u043f\\u0435. \\u0447\\u043e.\",\n      \"\\u043f\\u0430. \\u0447\\u043e.\"\n    ],\n    \"DAY\": [\n      \"\\u042f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0414\\u0443\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0421\\u0435\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u0427\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u041f\\u0430\\u043d\\u04b7\\u0448\\u0430\\u043d\\u0431\\u0435\",\n      \"\\u04b6\\u0443\\u043c\\u044a\\u0430\",\n      \"\\u0428\\u0430\\u043d\\u0431\\u0435\"\n    ],\n    \"MONTH\": [\n      \"\\u042f\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u041c\\u0430\\u0440\\u0442\",\n      \"\\u0410\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041d\\u043e\\u044f\\u0431\\u0440\",\n      \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u042f\\u0448\\u0431\",\n      \"\\u0414\\u0448\\u0431\",\n      \"\\u0421\\u0448\\u0431\",\n      \"\\u0427\\u0448\\u0431\",\n      \"\\u041f\\u0448\\u0431\",\n      \"\\u04b6\\u043c\\u044a\",\n      \"\\u0428\\u043d\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u042f\\u043d\\u0432\",\n      \"\\u0424\\u0435\\u0432\",\n      \"\\u041c\\u0430\\u0440\",\n      \"\\u0410\\u043f\\u0440\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\",\n      \"\\u0421\\u0435\\u043d\",\n      \"\\u041e\\u043a\\u0442\",\n      \"\\u041d\\u043e\\u044f\",\n      \"\\u0414\\u0435\\u043a\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Som\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tg\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_th-th.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0e01\\u0e48\\u0e2d\\u0e19\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\",\n      \"\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\"\n    ],\n    \"DAY\": [\n      \"\\u0e27\\u0e31\\u0e19\\u0e2d\\u0e32\\u0e17\\u0e34\\u0e15\\u0e22\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e08\\u0e31\\u0e19\\u0e17\\u0e23\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e2d\\u0e31\\u0e07\\u0e04\\u0e32\\u0e23\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e1e\\u0e38\\u0e18\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e1e\\u0e24\\u0e2b\\u0e31\\u0e2a\\u0e1a\\u0e14\\u0e35\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e28\\u0e38\\u0e01\\u0e23\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e40\\u0e2a\\u0e32\\u0e23\\u0e4c\"\n    ],\n    \"MONTH\": [\n      \"\\u0e21\\u0e01\\u0e23\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e01\\u0e38\\u0e21\\u0e20\\u0e32\\u0e1e\\u0e31\\u0e19\\u0e18\\u0e4c\",\n      \"\\u0e21\\u0e35\\u0e19\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e40\\u0e21\\u0e29\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e1e\\u0e24\\u0e29\\u0e20\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e21\\u0e34\\u0e16\\u0e38\\u0e19\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e01\\u0e23\\u0e01\\u0e0e\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e2a\\u0e34\\u0e07\\u0e2b\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e01\\u0e31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e15\\u0e38\\u0e25\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e1e\\u0e24\\u0e28\\u0e08\\u0e34\\u0e01\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e18\\u0e31\\u0e19\\u0e27\\u0e32\\u0e04\\u0e21\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0e2d\\u0e32.\",\n      \"\\u0e08.\",\n      \"\\u0e2d.\",\n      \"\\u0e1e.\",\n      \"\\u0e1e\\u0e24.\",\n      \"\\u0e28.\",\n      \"\\u0e2a.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0e21.\\u0e04.\",\n      \"\\u0e01.\\u0e1e.\",\n      \"\\u0e21\\u0e35.\\u0e04.\",\n      \"\\u0e40\\u0e21.\\u0e22.\",\n      \"\\u0e1e.\\u0e04.\",\n      \"\\u0e21\\u0e34.\\u0e22.\",\n      \"\\u0e01.\\u0e04.\",\n      \"\\u0e2a.\\u0e04.\",\n      \"\\u0e01.\\u0e22.\",\n      \"\\u0e15.\\u0e04.\",\n      \"\\u0e1e.\\u0e22.\",\n      \"\\u0e18.\\u0e04.\"\n    ],\n    \"fullDate\": \"EEEE\\u0e17\\u0e35\\u0e48 d MMMM G y\",\n    \"longDate\": \"d MMMM G y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0e3f\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"th-th\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_th.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0e01\\u0e48\\u0e2d\\u0e19\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\",\n      \"\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\"\n    ],\n    \"DAY\": [\n      \"\\u0e27\\u0e31\\u0e19\\u0e2d\\u0e32\\u0e17\\u0e34\\u0e15\\u0e22\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e08\\u0e31\\u0e19\\u0e17\\u0e23\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e2d\\u0e31\\u0e07\\u0e04\\u0e32\\u0e23\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e1e\\u0e38\\u0e18\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e1e\\u0e24\\u0e2b\\u0e31\\u0e2a\\u0e1a\\u0e14\\u0e35\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e28\\u0e38\\u0e01\\u0e23\\u0e4c\",\n      \"\\u0e27\\u0e31\\u0e19\\u0e40\\u0e2a\\u0e32\\u0e23\\u0e4c\"\n    ],\n    \"MONTH\": [\n      \"\\u0e21\\u0e01\\u0e23\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e01\\u0e38\\u0e21\\u0e20\\u0e32\\u0e1e\\u0e31\\u0e19\\u0e18\\u0e4c\",\n      \"\\u0e21\\u0e35\\u0e19\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e40\\u0e21\\u0e29\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e1e\\u0e24\\u0e29\\u0e20\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e21\\u0e34\\u0e16\\u0e38\\u0e19\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e01\\u0e23\\u0e01\\u0e0e\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e2a\\u0e34\\u0e07\\u0e2b\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e01\\u0e31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e15\\u0e38\\u0e25\\u0e32\\u0e04\\u0e21\",\n      \"\\u0e1e\\u0e24\\u0e28\\u0e08\\u0e34\\u0e01\\u0e32\\u0e22\\u0e19\",\n      \"\\u0e18\\u0e31\\u0e19\\u0e27\\u0e32\\u0e04\\u0e21\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0e2d\\u0e32.\",\n      \"\\u0e08.\",\n      \"\\u0e2d.\",\n      \"\\u0e1e.\",\n      \"\\u0e1e\\u0e24.\",\n      \"\\u0e28.\",\n      \"\\u0e2a.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0e21.\\u0e04.\",\n      \"\\u0e01.\\u0e1e.\",\n      \"\\u0e21\\u0e35.\\u0e04.\",\n      \"\\u0e40\\u0e21.\\u0e22.\",\n      \"\\u0e1e.\\u0e04.\",\n      \"\\u0e21\\u0e34.\\u0e22.\",\n      \"\\u0e01.\\u0e04.\",\n      \"\\u0e2a.\\u0e04.\",\n      \"\\u0e01.\\u0e22.\",\n      \"\\u0e15.\\u0e04.\",\n      \"\\u0e1e.\\u0e22.\",\n      \"\\u0e18.\\u0e04.\"\n    ],\n    \"fullDate\": \"EEEE\\u0e17\\u0e35\\u0e48 d MMMM G y\",\n    \"longDate\": \"d MMMM G y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/yy HH:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u0e3f\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"th\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ti-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1295\\u1309\\u1206 \\u1230\\u12d3\\u1270\",\n      \"\\u12f5\\u1215\\u122d \\u1230\\u12d3\\u1275\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1230\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1213\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"MONTH\": [\n      \"\\u1325\\u122a\",\n      \"\\u1208\\u12ab\\u1272\\u1275\",\n      \"\\u1218\\u130b\\u1262\\u1275\",\n      \"\\u121a\\u12eb\\u12dd\\u12eb\",\n      \"\\u130d\\u1295\\u1266\\u1275\",\n      \"\\u1230\\u1290\",\n      \"\\u1213\\u121d\\u1208\",\n      \"\\u1290\\u1213\\u1230\",\n      \"\\u1218\\u1235\\u12a8\\u1228\\u121d\",\n      \"\\u1325\\u1245\\u121d\\u1272\",\n      \"\\u1215\\u12f3\\u122d\",\n      \"\\u1273\\u1215\\u1233\\u1235\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1230\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1213\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1325\\u122a\",\n      \"\\u1208\\u12ab\\u1272\",\n      \"\\u1218\\u130b\\u1262\",\n      \"\\u121a\\u12eb\\u12dd\",\n      \"\\u130d\\u1295\\u1266\",\n      \"\\u1230\\u1290\",\n      \"\\u1213\\u121d\\u1208\",\n      \"\\u1290\\u1213\\u1230\",\n      \"\\u1218\\u1235\\u12a8\",\n      \"\\u1325\\u1245\\u121d\",\n      \"\\u1215\\u12f3\\u122d\",\n      \"\\u1273\\u1215\\u1233\"\n    ],\n    \"fullDate\": \"EEEE\\u1361 dd MMMM \\u1218\\u12d3\\u120d\\u1272 y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ti-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ti-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1295\\u1309\\u1206 \\u1230\\u12d3\\u1270\",\n      \"\\u12f5\\u1215\\u122d \\u1230\\u12d3\\u1275\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1220\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1283\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1220\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1283\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1363 dd MMMM \\u1218\\u12d3\\u120d\\u1272 y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ti-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ti.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1295\\u1309\\u1206 \\u1230\\u12d3\\u1270\",\n      \"\\u12f5\\u1215\\u122d \\u1230\\u12d3\\u1275\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1220\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1283\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275\",\n      \"\\u1230\\u1291\\u12ed\",\n      \"\\u1220\\u1209\\u1235\",\n      \"\\u1228\\u1261\\u12d5\",\n      \"\\u1283\\u1219\\u1235\",\n      \"\\u12d3\\u122d\\u1262\",\n      \"\\u1240\\u12f3\\u121d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1363 dd MMMM \\u1218\\u12d3\\u120d\\u1272 y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ti\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tig-er.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1240\\u12f0\\u121d \\u1230\\u122d\\u121d\\u12d5\\u120d\",\n      \"\\u1213\\u1246 \\u1235\\u122d\\u121d\\u12d5\\u120d\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275 \\u12d3\\u1263\\u12ed\",\n      \"\\u1230\\u1296\",\n      \"\\u1273\\u120b\\u1238\\u1296\",\n      \"\\u12a3\\u1228\\u122d\\u1263\\u12d3\",\n      \"\\u12a8\\u121a\\u123d\",\n      \"\\u1305\\u121d\\u12d3\\u1275\",\n      \"\\u1230\\u1295\\u1260\\u1275 \\u1295\\u12a2\\u123d\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230/\\u12d3\",\n      \"\\u1230\\u1296\",\n      \"\\u1273\\u120b\\u1238\",\n      \"\\u12a3\\u1228\\u122d\",\n      \"\\u12a8\\u121a\\u123d\",\n      \"\\u1305\\u121d\\u12d3\",\n      \"\\u1230/\\u1295\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1361 dd MMMM \\u12ee\\u121d y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tig-er\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tig.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u1240\\u12f0\\u121d \\u1230\\u122d\\u121d\\u12d5\\u120d\",\n      \"\\u1213\\u1246 \\u1235\\u122d\\u121d\\u12d5\\u120d\"\n    ],\n    \"DAY\": [\n      \"\\u1230\\u1295\\u1260\\u1275 \\u12d3\\u1263\\u12ed\",\n      \"\\u1230\\u1296\",\n      \"\\u1273\\u120b\\u1238\\u1296\",\n      \"\\u12a3\\u1228\\u122d\\u1263\\u12d3\",\n      \"\\u12a8\\u121a\\u123d\",\n      \"\\u1305\\u121d\\u12d3\\u1275\",\n      \"\\u1230\\u1295\\u1260\\u1275 \\u1295\\u12a2\\u123d\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u1230/\\u12d3\",\n      \"\\u1230\\u1296\",\n      \"\\u1273\\u120b\\u1238\",\n      \"\\u12a3\\u1228\\u122d\",\n      \"\\u12a8\\u121a\\u123d\",\n      \"\\u1305\\u121d\\u12d3\",\n      \"\\u1230/\\u1295\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1361 dd MMMM \\u12ee\\u121d y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Nfk\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tig\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Linggo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Miyerkules\",\n      \"Huwebes\",\n      \"Biyernes\",\n      \"Sabado\"\n    ],\n    \"MONTH\": [\n      \"Enero\",\n      \"Pebrero\",\n      \"Marso\",\n      \"Abril\",\n      \"Mayo\",\n      \"Hunyo\",\n      \"Hulyo\",\n      \"Agosto\",\n      \"Setyembre\",\n      \"Oktubre\",\n      \"Nobyembre\",\n      \"Disyembre\"\n    ],\n    \"SHORTDAY\": [\n      \"Lin\",\n      \"Lun\",\n      \"Mar\",\n      \"Miy\",\n      \"Huw\",\n      \"Biy\",\n      \"Sab\"\n    ],\n    \"SHORTMONTH\": [\n      \"Ene\",\n      \"Peb\",\n      \"Mar\",\n      \"Abr\",\n      \"May\",\n      \"Hun\",\n      \"Hul\",\n      \"Ago\",\n      \"Set\",\n      \"Okt\",\n      \"Nob\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b1\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tl\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tn-bw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Tshipi\",\n      \"Mosopulogo\",\n      \"Labobedi\",\n      \"Laboraro\",\n      \"Labone\",\n      \"Labotlhano\",\n      \"Matlhatso\"\n    ],\n    \"MONTH\": [\n      \"Ferikgong\",\n      \"Tlhakole\",\n      \"Mopitlo\",\n      \"Moranang\",\n      \"Motsheganang\",\n      \"Seetebosigo\",\n      \"Phukwi\",\n      \"Phatwe\",\n      \"Lwetse\",\n      \"Diphalane\",\n      \"Ngwanatsele\",\n      \"Sedimonthole\"\n    ],\n    \"SHORTDAY\": [\n      \"Tsh\",\n      \"Mos\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Tla\",\n      \"Mat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Fer\",\n      \"Tlh\",\n      \"Mop\",\n      \"Mor\",\n      \"Mot\",\n      \"See\",\n      \"Phu\",\n      \"Pha\",\n      \"Lwe\",\n      \"Dip\",\n      \"Ngw\",\n      \"Sed\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"P\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tn-bw\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tn-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Tshipi\",\n      \"Mosopulogo\",\n      \"Labobedi\",\n      \"Laboraro\",\n      \"Labone\",\n      \"Labotlhano\",\n      \"Matlhatso\"\n    ],\n    \"MONTH\": [\n      \"Ferikgong\",\n      \"Tlhakole\",\n      \"Mopitlo\",\n      \"Moranang\",\n      \"Motsheganang\",\n      \"Seetebosigo\",\n      \"Phukwi\",\n      \"Phatwe\",\n      \"Lwetse\",\n      \"Diphalane\",\n      \"Ngwanatsele\",\n      \"Sedimonthole\"\n    ],\n    \"SHORTDAY\": [\n      \"Tsh\",\n      \"Mos\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Tla\",\n      \"Mat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Fer\",\n      \"Tlh\",\n      \"Mop\",\n      \"Mor\",\n      \"Mot\",\n      \"See\",\n      \"Phu\",\n      \"Pha\",\n      \"Lwe\",\n      \"Dip\",\n      \"Ngw\",\n      \"Sed\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tn-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Tshipi\",\n      \"Mosopulogo\",\n      \"Labobedi\",\n      \"Laboraro\",\n      \"Labone\",\n      \"Labotlhano\",\n      \"Matlhatso\"\n    ],\n    \"MONTH\": [\n      \"Ferikgong\",\n      \"Tlhakole\",\n      \"Mopitlo\",\n      \"Moranang\",\n      \"Motsheganang\",\n      \"Seetebosigo\",\n      \"Phukwi\",\n      \"Phatwe\",\n      \"Lwetse\",\n      \"Diphalane\",\n      \"Ngwanatsele\",\n      \"Sedimonthole\"\n    ],\n    \"SHORTDAY\": [\n      \"Tsh\",\n      \"Mos\",\n      \"Bed\",\n      \"Rar\",\n      \"Ne\",\n      \"Tla\",\n      \"Mat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Fer\",\n      \"Tlh\",\n      \"Mop\",\n      \"Mor\",\n      \"Mot\",\n      \"See\",\n      \"Phu\",\n      \"Pha\",\n      \"Lwe\",\n      \"Dip\",\n      \"Ngw\",\n      \"Sed\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"tn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_to-to.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"S\\u0101pate\",\n      \"M\\u014dnite\",\n      \"T\\u016bsite\",\n      \"Pulelulu\",\n      \"Tu\\u02bbapulelulu\",\n      \"Falaite\",\n      \"Tokonaki\"\n    ],\n    \"MONTH\": [\n      \"S\\u0101nuali\",\n      \"F\\u0113pueli\",\n      \"Ma\\u02bbasi\",\n      \"\\u02bbEpeleli\",\n      \"M\\u0113\",\n      \"Sune\",\n      \"Siulai\",\n      \"\\u02bbAokosi\",\n      \"Sepitema\",\n      \"\\u02bbOkatopa\",\n      \"N\\u014dvema\",\n      \"T\\u012bsema\"\n    ],\n    \"SHORTDAY\": [\n      \"S\\u0101p\",\n      \"M\\u014dn\",\n      \"T\\u016bs\",\n      \"Pul\",\n      \"Tu\\u02bba\",\n      \"Fal\",\n      \"Tok\"\n    ],\n    \"SHORTMONTH\": [\n      \"S\\u0101n\",\n      \"F\\u0113p\",\n      \"Ma\\u02bba\",\n      \"\\u02bbEpe\",\n      \"M\\u0113\",\n      \"Sun\",\n      \"Siu\",\n      \"\\u02bbAok\",\n      \"Sep\",\n      \"\\u02bbOka\",\n      \"N\\u014dv\",\n      \"T\\u012bs\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"T$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"to-to\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_to.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"S\\u0101pate\",\n      \"M\\u014dnite\",\n      \"T\\u016bsite\",\n      \"Pulelulu\",\n      \"Tu\\u02bbapulelulu\",\n      \"Falaite\",\n      \"Tokonaki\"\n    ],\n    \"MONTH\": [\n      \"S\\u0101nuali\",\n      \"F\\u0113pueli\",\n      \"Ma\\u02bbasi\",\n      \"\\u02bbEpeleli\",\n      \"M\\u0113\",\n      \"Sune\",\n      \"Siulai\",\n      \"\\u02bbAokosi\",\n      \"Sepitema\",\n      \"\\u02bbOkatopa\",\n      \"N\\u014dvema\",\n      \"T\\u012bsema\"\n    ],\n    \"SHORTDAY\": [\n      \"S\\u0101p\",\n      \"M\\u014dn\",\n      \"T\\u016bs\",\n      \"Pul\",\n      \"Tu\\u02bba\",\n      \"Fal\",\n      \"Tok\"\n    ],\n    \"SHORTMONTH\": [\n      \"S\\u0101n\",\n      \"F\\u0113p\",\n      \"Ma\\u02bba\",\n      \"\\u02bbEpe\",\n      \"M\\u0113\",\n      \"Sun\",\n      \"Siu\",\n      \"\\u02bbAok\",\n      \"Sep\",\n      \"\\u02bbOka\",\n      \"N\\u014dv\",\n      \"T\\u012bs\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"T$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"to\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tr-cy.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00d6\\u00d6\",\n      \"\\u00d6S\"\n    ],\n    \"DAY\": [\n      \"Pazar\",\n      \"Pazartesi\",\n      \"Sal\\u0131\",\n      \"\\u00c7ar\\u015famba\",\n      \"Per\\u015fembe\",\n      \"Cuma\",\n      \"Cumartesi\"\n    ],\n    \"MONTH\": [\n      \"Ocak\",\n      \"\\u015eubat\",\n      \"Mart\",\n      \"Nisan\",\n      \"May\\u0131s\",\n      \"Haziran\",\n      \"Temmuz\",\n      \"A\\u011fustos\",\n      \"Eyl\\u00fcl\",\n      \"Ekim\",\n      \"Kas\\u0131m\",\n      \"Aral\\u0131k\"\n    ],\n    \"SHORTDAY\": [\n      \"Paz\",\n      \"Pzt\",\n      \"Sal\",\n      \"\\u00c7ar\",\n      \"Per\",\n      \"Cum\",\n      \"Cmt\"\n    ],\n    \"SHORTMONTH\": [\n      \"Oca\",\n      \"\\u015eub\",\n      \"Mar\",\n      \"Nis\",\n      \"May\",\n      \"Haz\",\n      \"Tem\",\n      \"A\\u011fu\",\n      \"Eyl\",\n      \"Eki\",\n      \"Kas\",\n      \"Ara\"\n    ],\n    \"fullDate\": \"d MMMM y EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d MM y HH:mm\",\n    \"shortDate\": \"d MM y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tr-cy\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tr-tr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00d6\\u00d6\",\n      \"\\u00d6S\"\n    ],\n    \"DAY\": [\n      \"Pazar\",\n      \"Pazartesi\",\n      \"Sal\\u0131\",\n      \"\\u00c7ar\\u015famba\",\n      \"Per\\u015fembe\",\n      \"Cuma\",\n      \"Cumartesi\"\n    ],\n    \"MONTH\": [\n      \"Ocak\",\n      \"\\u015eubat\",\n      \"Mart\",\n      \"Nisan\",\n      \"May\\u0131s\",\n      \"Haziran\",\n      \"Temmuz\",\n      \"A\\u011fustos\",\n      \"Eyl\\u00fcl\",\n      \"Ekim\",\n      \"Kas\\u0131m\",\n      \"Aral\\u0131k\"\n    ],\n    \"SHORTDAY\": [\n      \"Paz\",\n      \"Pzt\",\n      \"Sal\",\n      \"\\u00c7ar\",\n      \"Per\",\n      \"Cum\",\n      \"Cmt\"\n    ],\n    \"SHORTMONTH\": [\n      \"Oca\",\n      \"\\u015eub\",\n      \"Mar\",\n      \"Nis\",\n      \"May\",\n      \"Haz\",\n      \"Tem\",\n      \"A\\u011fu\",\n      \"Eyl\",\n      \"Eki\",\n      \"Kas\",\n      \"Ara\"\n    ],\n    \"fullDate\": \"d MMMM y EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d MM y HH:mm\",\n    \"shortDate\": \"d MM y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tr-tr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00d6\\u00d6\",\n      \"\\u00d6S\"\n    ],\n    \"DAY\": [\n      \"Pazar\",\n      \"Pazartesi\",\n      \"Sal\\u0131\",\n      \"\\u00c7ar\\u015famba\",\n      \"Per\\u015fembe\",\n      \"Cuma\",\n      \"Cumartesi\"\n    ],\n    \"MONTH\": [\n      \"Ocak\",\n      \"\\u015eubat\",\n      \"Mart\",\n      \"Nisan\",\n      \"May\\u0131s\",\n      \"Haziran\",\n      \"Temmuz\",\n      \"A\\u011fustos\",\n      \"Eyl\\u00fcl\",\n      \"Ekim\",\n      \"Kas\\u0131m\",\n      \"Aral\\u0131k\"\n    ],\n    \"SHORTDAY\": [\n      \"Paz\",\n      \"Pzt\",\n      \"Sal\",\n      \"\\u00c7ar\",\n      \"Per\",\n      \"Cum\",\n      \"Cmt\"\n    ],\n    \"SHORTMONTH\": [\n      \"Oca\",\n      \"\\u015eub\",\n      \"Mar\",\n      \"Nis\",\n      \"May\",\n      \"Haz\",\n      \"Tem\",\n      \"A\\u011fu\",\n      \"Eyl\",\n      \"Eki\",\n      \"Kas\",\n      \"Ara\"\n    ],\n    \"fullDate\": \"d MMMM y EEEE\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d MM y HH:mm\",\n    \"shortDate\": \"d MM y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TL\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tr\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ts-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Musumbhunuku\",\n      \"Ravumbirhi\",\n      \"Ravunharhu\",\n      \"Ravumune\",\n      \"Ravuntlhanu\",\n      \"Mugqivela\"\n    ],\n    \"MONTH\": [\n      \"Sunguti\",\n      \"Nyenyenyani\",\n      \"Nyenyankulu\",\n      \"Dzivamisoko\",\n      \"Mudyaxihi\",\n      \"Khotavuxika\",\n      \"Mawuwani\",\n      \"Mhawuri\",\n      \"Ndzhati\",\n      \"Nhlangula\",\n      \"Hukuri\",\n      \"N\\u2019wendzamhala\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mus\",\n      \"Bir\",\n      \"Har\",\n      \"Ne\",\n      \"Tlh\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Sun\",\n      \"Yan\",\n      \"Kul\",\n      \"Dzi\",\n      \"Mud\",\n      \"Kho\",\n      \"Maw\",\n      \"Mha\",\n      \"Ndz\",\n      \"Nhl\",\n      \"Huk\",\n      \"N\\u2019w\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ts-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ts.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Musumbhunuku\",\n      \"Ravumbirhi\",\n      \"Ravunharhu\",\n      \"Ravumune\",\n      \"Ravuntlhanu\",\n      \"Mugqivela\"\n    ],\n    \"MONTH\": [\n      \"Sunguti\",\n      \"Nyenyenyani\",\n      \"Nyenyankulu\",\n      \"Dzivamisoko\",\n      \"Mudyaxihi\",\n      \"Khotavuxika\",\n      \"Mawuwani\",\n      \"Mhawuri\",\n      \"Ndzhati\",\n      \"Nhlangula\",\n      \"Hukuri\",\n      \"N\\u2019wendzamhala\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mus\",\n      \"Bir\",\n      \"Har\",\n      \"Ne\",\n      \"Tlh\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Sun\",\n      \"Yan\",\n      \"Kul\",\n      \"Dzi\",\n      \"Mud\",\n      \"Kho\",\n      \"Maw\",\n      \"Mha\",\n      \"Ndz\",\n      \"Nhl\",\n      \"Huk\",\n      \"N\\u2019w\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ts\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_twq-ne.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Subbaahi\",\n      \"Zaarikay b\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"twq-ne\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_twq.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Subbaahi\",\n      \"Zaarikay b\"\n    ],\n    \"DAY\": [\n      \"Alhadi\",\n      \"Atinni\",\n      \"Atalaata\",\n      \"Alarba\",\n      \"Alhamiisa\",\n      \"Alzuma\",\n      \"Asibti\"\n    ],\n    \"MONTH\": [\n      \"\\u017danwiye\",\n      \"Feewiriye\",\n      \"Marsi\",\n      \"Awiril\",\n      \"Me\",\n      \"\\u017duwe\\u014b\",\n      \"\\u017duyye\",\n      \"Ut\",\n      \"Sektanbur\",\n      \"Oktoobur\",\n      \"Noowanbur\",\n      \"Deesanbur\"\n    ],\n    \"SHORTDAY\": [\n      \"Alh\",\n      \"Ati\",\n      \"Ata\",\n      \"Ala\",\n      \"Alm\",\n      \"Alz\",\n      \"Asi\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u017dan\",\n      \"Fee\",\n      \"Mar\",\n      \"Awi\",\n      \"Me\",\n      \"\\u017duw\",\n      \"\\u017duy\",\n      \"Ut\",\n      \"Sek\",\n      \"Okt\",\n      \"Noo\",\n      \"Dee\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"twq\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tzm-latn-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Zdat azal\",\n      \"\\u1e0ceffir aza\"\n    ],\n    \"DAY\": [\n      \"Asamas\",\n      \"Aynas\",\n      \"Asinas\",\n      \"Akras\",\n      \"Akwas\",\n      \"Asimwas\",\n      \"Asi\\u1e0dyas\"\n    ],\n    \"MONTH\": [\n      \"Yennayer\",\n      \"Yebrayer\",\n      \"Mars\",\n      \"Ibrir\",\n      \"Mayyu\",\n      \"Yunyu\",\n      \"Yulyuz\",\n      \"\\u0194uct\",\n      \"Cutanbir\",\n      \"K\\u1e6duber\",\n      \"Nwanbir\",\n      \"Dujanbir\"\n    ],\n    \"SHORTDAY\": [\n      \"Asa\",\n      \"Ayn\",\n      \"Asn\",\n      \"Akr\",\n      \"Akw\",\n      \"Asm\",\n      \"As\\u1e0d\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yen\",\n      \"Yeb\",\n      \"Mar\",\n      \"Ibr\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"\\u0194uc\",\n      \"Cut\",\n      \"K\\u1e6du\",\n      \"Nwa\",\n      \"Duj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tzm-latn-ma\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tzm-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Zdat azal\",\n      \"\\u1e0ceffir aza\"\n    ],\n    \"DAY\": [\n      \"Asamas\",\n      \"Aynas\",\n      \"Asinas\",\n      \"Akras\",\n      \"Akwas\",\n      \"Asimwas\",\n      \"Asi\\u1e0dyas\"\n    ],\n    \"MONTH\": [\n      \"Yennayer\",\n      \"Yebrayer\",\n      \"Mars\",\n      \"Ibrir\",\n      \"Mayyu\",\n      \"Yunyu\",\n      \"Yulyuz\",\n      \"\\u0194uct\",\n      \"Cutanbir\",\n      \"K\\u1e6duber\",\n      \"Nwanbir\",\n      \"Dujanbir\"\n    ],\n    \"SHORTDAY\": [\n      \"Asa\",\n      \"Ayn\",\n      \"Asn\",\n      \"Akr\",\n      \"Akw\",\n      \"Asm\",\n      \"As\\u1e0d\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yen\",\n      \"Yeb\",\n      \"Mar\",\n      \"Ibr\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"\\u0194uc\",\n      \"Cut\",\n      \"K\\u1e6du\",\n      \"Nwa\",\n      \"Duj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tzm-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_tzm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Zdat azal\",\n      \"\\u1e0ceffir aza\"\n    ],\n    \"DAY\": [\n      \"Asamas\",\n      \"Aynas\",\n      \"Asinas\",\n      \"Akras\",\n      \"Akwas\",\n      \"Asimwas\",\n      \"Asi\\u1e0dyas\"\n    ],\n    \"MONTH\": [\n      \"Yennayer\",\n      \"Yebrayer\",\n      \"Mars\",\n      \"Ibrir\",\n      \"Mayyu\",\n      \"Yunyu\",\n      \"Yulyuz\",\n      \"\\u0194uct\",\n      \"Cutanbir\",\n      \"K\\u1e6duber\",\n      \"Nwanbir\",\n      \"Dujanbir\"\n    ],\n    \"SHORTDAY\": [\n      \"Asa\",\n      \"Ayn\",\n      \"Asn\",\n      \"Akr\",\n      \"Akw\",\n      \"Asm\",\n      \"As\\u1e0d\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yen\",\n      \"Yeb\",\n      \"Mar\",\n      \"Ibr\",\n      \"May\",\n      \"Yun\",\n      \"Yul\",\n      \"\\u0194uc\",\n      \"Cut\",\n      \"K\\u1e6du\",\n      \"Nwa\",\n      \"Duj\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"tzm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ug-arab-cn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646\",\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u064a\\u06d5\\u0643\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062f\\u06c8\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0633\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0686\\u0627\\u0631\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u067e\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062c\\u06c8\\u0645\\u06d5\",\n      \"\\u0634\\u06d5\\u0646\\u0628\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0628\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u064a\\u06d5\",\n      \"\\u062f\\u06c8\",\n      \"\\u0633\\u06d5\",\n      \"\\u0686\\u0627\",\n      \"\\u067e\\u06d5\",\n      \"\\u0686\\u06c8\",\n      \"\\u0634\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0646\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c MMMM d\\u060c y\",\n    \"longDate\": \"MMMM d\\u060c y\",\n    \"medium\": \"MMM d\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"MMM d\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ug-arab-cn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ug-arab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646\",\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u064a\\u06d5\\u0643\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062f\\u06c8\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0633\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0686\\u0627\\u0631\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u067e\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062c\\u06c8\\u0645\\u06d5\",\n      \"\\u0634\\u06d5\\u0646\\u0628\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0628\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u064a\\u06d5\",\n      \"\\u062f\\u06c8\",\n      \"\\u0633\\u06d5\",\n      \"\\u0686\\u0627\",\n      \"\\u067e\\u06d5\",\n      \"\\u0686\\u06c8\",\n      \"\\u0634\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0646\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c MMMM d\\u060c y\",\n    \"longDate\": \"MMMM d\\u060c y\",\n    \"medium\": \"MMM d\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"MMM d\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ug-arab\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646\",\n      \"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646\"\n    ],\n    \"DAY\": [\n      \"\\u064a\\u06d5\\u0643\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062f\\u06c8\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0633\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u0686\\u0627\\u0631\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u067e\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5\",\n      \"\\u062c\\u06c8\\u0645\\u06d5\",\n      \"\\u0634\\u06d5\\u0646\\u0628\\u06d5\"\n    ],\n    \"MONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0628\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u064a\\u06d5\",\n      \"\\u062f\\u06c8\",\n      \"\\u0633\\u06d5\",\n      \"\\u0686\\u0627\",\n      \"\\u067e\\u06d5\",\n      \"\\u0686\\u06c8\",\n      \"\\u0634\\u06d5\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631\",\n      \"\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644\",\n      \"\\u0645\\u0627\\u0631\\u062a\",\n      \"\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644\",\n      \"\\u0645\\u0627\\u064a\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0646\",\n      \"\\u0626\\u0649\\u064a\\u06c7\\u0644\",\n      \"\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a\",\n      \"\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631\",\n      \"\\u0646\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631\",\n      \"\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c MMMM d\\u060c y\",\n    \"longDate\": \"MMMM d\\u060c y\",\n    \"medium\": \"MMM d\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"MMM d\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uk-ua.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0434\\u043f\",\n      \"\\u043f\\u043f\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0456\\u043b\\u044f\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043e\\u043a\",\n      \"\\u0432\\u0456\\u0432\\u0442\\u043e\\u0440\\u043e\\u043a\",\n      \"\\u0441\\u0435\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\",\n      \"\\u043f\\u02bc\\u044f\\u0442\\u043d\\u0438\\u0446\\u044f\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0441\\u0456\\u0447\\u043d\\u044f\",\n      \"\\u043b\\u044e\\u0442\\u043e\\u0433\\u043e\",\n      \"\\u0431\\u0435\\u0440\\u0435\\u0437\\u043d\\u044f\",\n      \"\\u043a\\u0432\\u0456\\u0442\\u043d\\u044f\",\n      \"\\u0442\\u0440\\u0430\\u0432\\u043d\\u044f\",\n      \"\\u0447\\u0435\\u0440\\u0432\\u043d\\u044f\",\n      \"\\u043b\\u0438\\u043f\\u043d\\u044f\",\n      \"\\u0441\\u0435\\u0440\\u043f\\u043d\\u044f\",\n      \"\\u0432\\u0435\\u0440\\u0435\\u0441\\u043d\\u044f\",\n      \"\\u0436\\u043e\\u0432\\u0442\\u043d\\u044f\",\n      \"\\u043b\\u0438\\u0441\\u0442\\u043e\\u043f\\u0430\\u0434\\u0430\",\n      \"\\u0433\\u0440\\u0443\\u0434\\u043d\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u041d\\u0434\",\n      \"\\u041f\\u043d\",\n      \"\\u0412\\u0442\",\n      \"\\u0421\\u0440\",\n      \"\\u0427\\u0442\",\n      \"\\u041f\\u0442\",\n      \"\\u0421\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0441\\u0456\\u0447.\",\n      \"\\u043b\\u044e\\u0442.\",\n      \"\\u0431\\u0435\\u0440.\",\n      \"\\u043a\\u0432\\u0456\\u0442.\",\n      \"\\u0442\\u0440\\u0430\\u0432.\",\n      \"\\u0447\\u0435\\u0440\\u0432.\",\n      \"\\u043b\\u0438\\u043f.\",\n      \"\\u0441\\u0435\\u0440\\u043f.\",\n      \"\\u0432\\u0435\\u0440.\",\n      \"\\u0436\\u043e\\u0432\\u0442.\",\n      \"\\u043b\\u0438\\u0441\\u0442.\",\n      \"\\u0433\\u0440\\u0443\\u0434.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0440'.\",\n    \"longDate\": \"d MMMM y '\\u0440'.\",\n    \"medium\": \"d MMM y '\\u0440'. HH:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0440'.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b4\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"uk-ua\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0434\\u043f\",\n      \"\\u043f\\u043f\"\n    ],\n    \"DAY\": [\n      \"\\u043d\\u0435\\u0434\\u0456\\u043b\\u044f\",\n      \"\\u043f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043e\\u043a\",\n      \"\\u0432\\u0456\\u0432\\u0442\\u043e\\u0440\\u043e\\u043a\",\n      \"\\u0441\\u0435\\u0440\\u0435\\u0434\\u0430\",\n      \"\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\",\n      \"\\u043f\\u02bc\\u044f\\u0442\\u043d\\u0438\\u0446\\u044f\",\n      \"\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u0441\\u0456\\u0447\\u043d\\u044f\",\n      \"\\u043b\\u044e\\u0442\\u043e\\u0433\\u043e\",\n      \"\\u0431\\u0435\\u0440\\u0435\\u0437\\u043d\\u044f\",\n      \"\\u043a\\u0432\\u0456\\u0442\\u043d\\u044f\",\n      \"\\u0442\\u0440\\u0430\\u0432\\u043d\\u044f\",\n      \"\\u0447\\u0435\\u0440\\u0432\\u043d\\u044f\",\n      \"\\u043b\\u0438\\u043f\\u043d\\u044f\",\n      \"\\u0441\\u0435\\u0440\\u043f\\u043d\\u044f\",\n      \"\\u0432\\u0435\\u0440\\u0435\\u0441\\u043d\\u044f\",\n      \"\\u0436\\u043e\\u0432\\u0442\\u043d\\u044f\",\n      \"\\u043b\\u0438\\u0441\\u0442\\u043e\\u043f\\u0430\\u0434\\u0430\",\n      \"\\u0433\\u0440\\u0443\\u0434\\u043d\\u044f\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u041d\\u0434\",\n      \"\\u041f\\u043d\",\n      \"\\u0412\\u0442\",\n      \"\\u0421\\u0440\",\n      \"\\u0427\\u0442\",\n      \"\\u041f\\u0442\",\n      \"\\u0421\\u0431\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u0441\\u0456\\u0447.\",\n      \"\\u043b\\u044e\\u0442.\",\n      \"\\u0431\\u0435\\u0440.\",\n      \"\\u043a\\u0432\\u0456\\u0442.\",\n      \"\\u0442\\u0440\\u0430\\u0432.\",\n      \"\\u0447\\u0435\\u0440\\u0432.\",\n      \"\\u043b\\u0438\\u043f.\",\n      \"\\u0441\\u0435\\u0440\\u043f.\",\n      \"\\u0432\\u0435\\u0440.\",\n      \"\\u0436\\u043e\\u0432\\u0442.\",\n      \"\\u043b\\u0438\\u0441\\u0442.\",\n      \"\\u0433\\u0440\\u0443\\u0434.\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y '\\u0440'.\",\n    \"longDate\": \"d MMMM y '\\u0440'.\",\n    \"medium\": \"d MMM y '\\u0440'. HH:mm:ss\",\n    \"mediumDate\": \"d MMM y '\\u0440'.\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd.MM.yy HH:mm\",\n    \"shortDate\": \"dd.MM.yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b4\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"uk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ur-in.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644 \\u062f\\u0648\\u067e\\u06c1\\u0631\",\n      \"\\u0628\\u0639\\u062f \\u062f\\u0648\\u067e\\u06c1\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u067e\\u06cc\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"d MMM\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"d MMM\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20b9\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ur-in\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ur-pk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644 \\u062f\\u0648\\u067e\\u06c1\\u0631\",\n      \"\\u0628\\u0639\\u062f \\u062f\\u0648\\u067e\\u06c1\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u0633\\u0648\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u0633\\u0648\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"d MMM\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"d MMM\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ur-pk\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ur.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u0642\\u0628\\u0644 \\u062f\\u0648\\u067e\\u06c1\\u0631\",\n      \"\\u0628\\u0639\\u062f \\u062f\\u0648\\u067e\\u06c1\\u0631\"\n    ],\n    \"DAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u0633\\u0648\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u0627\\u062a\\u0648\\u0627\\u0631\",\n      \"\\u0633\\u0648\\u0645\\u0648\\u0627\\u0631\",\n      \"\\u0645\\u0646\\u06af\\u0644\",\n      \"\\u0628\\u062f\\u06be\",\n      \"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\n      \"\\u062c\\u0645\\u0639\\u06c1\",\n      \"\\u06c1\\u0641\\u062a\\u06c1\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u0626\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"fullDate\": \"EEEE\\u060c d MMMM\\u060c y\",\n    \"longDate\": \"d MMMM\\u060c y\",\n    \"medium\": \"d MMM\\u060c y h:mm:ss a\",\n    \"mediumDate\": \"d MMM\\u060c y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"d/M/yy h:mm a\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Rs\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 2,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ur\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-arab-af.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc.\",\n      \"\\u062f.\",\n      \"\\u0633.\",\n      \"\\u0686.\",\n      \"\\u067e.\",\n      \"\\u062c.\",\n      \"\\u0634.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\",\n      \"\\u0641\\u0628\\u0631\",\n      \"\\u0645\\u0627\\u0631\",\n      \"\\u0627\\u067e\\u0631\",\n      \"\\u0645\\u0640\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\",\n      \"\\u0627\\u06af\\u0633\",\n      \"\\u0633\\u067e\\u062a\",\n      \"\\u0627\\u06a9\\u062a\",\n      \"\\u0646\\u0648\\u0645\",\n      \"\\u062f\\u0633\\u0645\"\n    ],\n    \"fullDate\": \"y \\u0646\\u0686\\u06cc \\u06cc\\u06cc\\u0644 d \\u0646\\u0686\\u06cc MMMM EEEE \\u06a9\\u0648\\u0646\\u06cc\",\n    \"longDate\": \"d \\u0646\\u0686\\u06cc MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Af.\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"uz-arab-af\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-arab.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u067e\\u0646\\u062c\\u0634\\u0646\\u0628\\u0647\",\n      \"\\u062c\\u0645\\u0639\\u0647\",\n      \"\\u0634\\u0646\\u0628\\u0647\"\n    ],\n    \"MONTH\": [\n      \"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\n      \"\\u0641\\u0628\\u0631\\u0648\\u0631\\u06cc\",\n      \"\\u0645\\u0627\\u0631\\u0686\",\n      \"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\n      \"\\u0645\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\\u0627\\u06cc\",\n      \"\\u0627\\u06af\\u0633\\u062a\",\n      \"\\u0633\\u067e\\u062a\\u0645\\u0628\\u0631\",\n      \"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\n      \"\\u0646\\u0648\\u0645\\u0628\\u0631\",\n      \"\\u062f\\u0633\\u0645\\u0628\\u0631\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u06cc.\",\n      \"\\u062f.\",\n      \"\\u0633.\",\n      \"\\u0686.\",\n      \"\\u067e.\",\n      \"\\u062c.\",\n      \"\\u0634.\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u062c\\u0646\\u0648\",\n      \"\\u0641\\u0628\\u0631\",\n      \"\\u0645\\u0627\\u0631\",\n      \"\\u0627\\u067e\\u0631\",\n      \"\\u0645\\u0640\\u06cc\",\n      \"\\u062c\\u0648\\u0646\",\n      \"\\u062c\\u0648\\u0644\",\n      \"\\u0627\\u06af\\u0633\",\n      \"\\u0633\\u067e\\u062a\",\n      \"\\u0627\\u06a9\\u062a\",\n      \"\\u0646\\u0648\\u0645\",\n      \"\\u062f\\u0633\\u0645\"\n    ],\n    \"fullDate\": \"y \\u0646\\u0686\\u06cc \\u06cc\\u06cc\\u0644 d \\u0646\\u0686\\u06cc MMMM EEEE \\u06a9\\u0648\\u0646\\u06cc\",\n    \"longDate\": \"d \\u0646\\u0686\\u06cc MMMM y\",\n    \"medium\": \"d MMM y H:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"H:mm:ss\",\n    \"short\": \"y/M/d H:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"H:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Af.\",\n    \"DECIMAL_SEP\": \"\\u066b\",\n    \"GROUP_SEP\": \"\\u066c\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"uz-arab\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-cyrl-uz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u044f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0434\\u0443\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0441\\u0435\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0447\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u043f\\u0430\\u0439\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0448\\u0430\\u043d\\u0431\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u042f\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u041c\\u0430\\u0440\\u0442\",\n      \"\\u0410\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041d\\u043e\\u044f\\u0431\\u0440\",\n      \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u042f\\u043a\\u0448\",\n      \"\\u0414\\u0443\\u0448\",\n      \"\\u0421\\u0435\\u0448\",\n      \"\\u0427\\u043e\\u0440\",\n      \"\\u041f\\u0430\\u0439\",\n      \"\\u0416\\u0443\\u043c\",\n      \"\\u0428\\u0430\\u043d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u042f\\u043d\\u0432\",\n      \"\\u0424\\u0435\\u0432\",\n      \"\\u041c\\u0430\\u0440\",\n      \"\\u0410\\u043f\\u0440\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\",\n      \"\\u0421\\u0435\\u043d\",\n      \"\\u041e\\u043a\\u0442\",\n      \"\\u041d\\u043e\\u044f\",\n      \"\\u0414\\u0435\\u043a\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"so\\u02bcm\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"uz-cyrl-uz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-cyrl.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\u044f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0434\\u0443\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0441\\u0435\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0447\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u043f\\u0430\\u0439\\u0448\\u0430\\u043d\\u0431\\u0430\",\n      \"\\u0436\\u0443\\u043c\\u0430\",\n      \"\\u0448\\u0430\\u043d\\u0431\\u0430\"\n    ],\n    \"MONTH\": [\n      \"\\u042f\\u043d\\u0432\\u0430\\u0440\",\n      \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\",\n      \"\\u041c\\u0430\\u0440\\u0442\",\n      \"\\u0410\\u043f\\u0440\\u0435\\u043b\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n      \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\",\n      \"\\u041d\\u043e\\u044f\\u0431\\u0440\",\n      \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u042f\\u043a\\u0448\",\n      \"\\u0414\\u0443\\u0448\",\n      \"\\u0421\\u0435\\u0448\",\n      \"\\u0427\\u043e\\u0440\",\n      \"\\u041f\\u0430\\u0439\",\n      \"\\u0416\\u0443\\u043c\",\n      \"\\u0428\\u0430\\u043d\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u042f\\u043d\\u0432\",\n      \"\\u0424\\u0435\\u0432\",\n      \"\\u041c\\u0430\\u0440\",\n      \"\\u0410\\u043f\\u0440\",\n      \"\\u041c\\u0430\\u0439\",\n      \"\\u0418\\u044e\\u043d\",\n      \"\\u0418\\u044e\\u043b\",\n      \"\\u0410\\u0432\\u0433\",\n      \"\\u0421\\u0435\\u043d\",\n      \"\\u041e\\u043a\\u0442\",\n      \"\\u041d\\u043e\\u044f\",\n      \"\\u0414\\u0435\\u043a\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"uz-cyrl\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-latn-uz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"TO\",\n      \"TK\"\n    ],\n    \"DAY\": [\n      \"yakshanba\",\n      \"dushanba\",\n      \"seshanba\",\n      \"chorshanba\",\n      \"payshanba\",\n      \"juma\",\n      \"shanba\"\n    ],\n    \"MONTH\": [\n      \"Yanvar\",\n      \"Fevral\",\n      \"Mart\",\n      \"Aprel\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avgust\",\n      \"Sentabr\",\n      \"Oktabr\",\n      \"Noyabr\",\n      \"Dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"Yaksh\",\n      \"Dush\",\n      \"Sesh\",\n      \"Chor\",\n      \"Pay\",\n      \"Jum\",\n      \"Shan\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yanv\",\n      \"Fev\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avg\",\n      \"Sen\",\n      \"Okt\",\n      \"Noya\",\n      \"Dek\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"so\\u02bcm\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"uz-latn-uz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"TO\",\n      \"TK\"\n    ],\n    \"DAY\": [\n      \"yakshanba\",\n      \"dushanba\",\n      \"seshanba\",\n      \"chorshanba\",\n      \"payshanba\",\n      \"juma\",\n      \"shanba\"\n    ],\n    \"MONTH\": [\n      \"Yanvar\",\n      \"Fevral\",\n      \"Mart\",\n      \"Aprel\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avgust\",\n      \"Sentabr\",\n      \"Oktabr\",\n      \"Noyabr\",\n      \"Dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"Yaksh\",\n      \"Dush\",\n      \"Sesh\",\n      \"Chor\",\n      \"Pay\",\n      \"Jum\",\n      \"Shan\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yanv\",\n      \"Fev\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avg\",\n      \"Sen\",\n      \"Okt\",\n      \"Noya\",\n      \"Dek\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"uz-latn\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_uz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"TO\",\n      \"TK\"\n    ],\n    \"DAY\": [\n      \"yakshanba\",\n      \"dushanba\",\n      \"seshanba\",\n      \"chorshanba\",\n      \"payshanba\",\n      \"juma\",\n      \"shanba\"\n    ],\n    \"MONTH\": [\n      \"Yanvar\",\n      \"Fevral\",\n      \"Mart\",\n      \"Aprel\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avgust\",\n      \"Sentabr\",\n      \"Oktabr\",\n      \"Noyabr\",\n      \"Dekabr\"\n    ],\n    \"SHORTDAY\": [\n      \"Yaksh\",\n      \"Dush\",\n      \"Sesh\",\n      \"Chor\",\n      \"Pay\",\n      \"Jum\",\n      \"Shan\"\n    ],\n    \"SHORTMONTH\": [\n      \"Yanv\",\n      \"Fev\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Iyun\",\n      \"Iyul\",\n      \"Avg\",\n      \"Sen\",\n      \"Okt\",\n      \"Noya\",\n      \"Dek\"\n    ],\n    \"fullDate\": \"EEEE, y MMMM dd\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"yy/MM/dd HH:mm\",\n    \"shortDate\": \"yy/MM/dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"so\\u02bcm\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"uz\",\n  \"pluralCat\": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vai-latn-lr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"lahadi\",\n      \"t\\u025b\\u025bn\\u025b\\u025b\",\n      \"talata\",\n      \"alaba\",\n      \"aimisa\",\n      \"aijima\",\n      \"si\\u0253iti\"\n    ],\n    \"MONTH\": [\n      \"luukao kem\\u00e3\",\n      \"\\u0253anda\\u0253u\",\n      \"v\\u0254\\u0254\",\n      \"fulu\",\n      \"goo\",\n      \"6\",\n      \"7\",\n      \"k\\u0254nde\",\n      \"saah\",\n      \"galo\",\n      \"kenpkato \\u0253olol\\u0254\",\n      \"luukao l\\u0254ma\"\n    ],\n    \"SHORTDAY\": [\n      \"lahadi\",\n      \"t\\u025b\\u025bn\\u025b\\u025b\",\n      \"talata\",\n      \"alaba\",\n      \"aimisa\",\n      \"aijima\",\n      \"si\\u0253iti\"\n    ],\n    \"SHORTMONTH\": [\n      \"luukao kem\\u00e3\",\n      \"\\u0253anda\\u0253u\",\n      \"v\\u0254\\u0254\",\n      \"fulu\",\n      \"goo\",\n      \"6\",\n      \"7\",\n      \"k\\u0254nde\",\n      \"saah\",\n      \"galo\",\n      \"kenpkato \\u0253olol\\u0254\",\n      \"luukao l\\u0254ma\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vai-latn-lr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vai-latn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"lahadi\",\n      \"t\\u025b\\u025bn\\u025b\\u025b\",\n      \"talata\",\n      \"alaba\",\n      \"aimisa\",\n      \"aijima\",\n      \"si\\u0253iti\"\n    ],\n    \"MONTH\": [\n      \"luukao kem\\u00e3\",\n      \"\\u0253anda\\u0253u\",\n      \"v\\u0254\\u0254\",\n      \"fulu\",\n      \"goo\",\n      \"6\",\n      \"7\",\n      \"k\\u0254nde\",\n      \"saah\",\n      \"galo\",\n      \"kenpkato \\u0253olol\\u0254\",\n      \"luukao l\\u0254ma\"\n    ],\n    \"SHORTDAY\": [\n      \"lahadi\",\n      \"t\\u025b\\u025bn\\u025b\\u025b\",\n      \"talata\",\n      \"alaba\",\n      \"aimisa\",\n      \"aijima\",\n      \"si\\u0253iti\"\n    ],\n    \"SHORTMONTH\": [\n      \"luukao kem\\u00e3\",\n      \"\\u0253anda\\u0253u\",\n      \"v\\u0254\\u0254\",\n      \"fulu\",\n      \"goo\",\n      \"6\",\n      \"7\",\n      \"k\\u0254nde\",\n      \"saah\",\n      \"galo\",\n      \"kenpkato \\u0253olol\\u0254\",\n      \"luukao l\\u0254ma\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vai-latn\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vai-vaii-lr.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"MONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vai-vaii-lr\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vai-vaii.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"MONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vai-vaii\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vai.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"MONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"SHORTDAY\": [\n      \"\\ua55e\\ua54c\\ua535\",\n      \"\\ua5f3\\ua5e1\\ua609\",\n      \"\\ua55a\\ua55e\\ua55a\",\n      \"\\ua549\\ua55e\\ua552\",\n      \"\\ua549\\ua524\\ua546\\ua562\",\n      \"\\ua549\\ua524\\ua540\\ua56e\",\n      \"\\ua53b\\ua52c\\ua533\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\ua5a8\\ua56a\\ua583 \\ua51e\\ua56e\",\n      \"\\ua552\\ua561\\ua59d\\ua595\",\n      \"\\ua57e\\ua5ba\",\n      \"\\ua5a2\\ua595\",\n      \"\\ua591\\ua571\",\n      \"6\",\n      \"7\",\n      \"\\ua5db\\ua515\",\n      \"\\ua562\\ua54c\",\n      \"\\ua56d\\ua583\",\n      \"\\ua51e\\ua60b\\ua554\\ua57f \\ua578\\ua583\\ua5cf\",\n      \"\\ua5a8\\ua56a\\ua571 \\ua5cf\\ua56e\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vai\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ve-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Swondaha\",\n      \"Musumbuluwo\",\n      \"\\u1e3cavhuvhili\",\n      \"\\u1e3cavhuraru\",\n      \"\\u1e3cavhu\\u1e4ba\",\n      \"\\u1e3cavhu\\u1e71anu\",\n      \"Mugivhela\"\n    ],\n    \"MONTH\": [\n      \"Phando\",\n      \"Luhuhi\",\n      \"\\u1e70hafamuhwe\",\n      \"Lambamai\",\n      \"Shundunthule\",\n      \"Fulwi\",\n      \"Fulwana\",\n      \"\\u1e70hangule\",\n      \"Khubvumedzi\",\n      \"Tshimedzi\",\n      \"\\u1e3cara\",\n      \"Nyendavhusiku\"\n    ],\n    \"SHORTDAY\": [\n      \"Swo\",\n      \"Mus\",\n      \"Vhi\",\n      \"Rar\",\n      \"\\u1e4aa\",\n      \"\\u1e70an\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Pha\",\n      \"Luh\",\n      \"\\u1e70hf\",\n      \"Lam\",\n      \"Shu\",\n      \"Lwi\",\n      \"Lwa\",\n      \"\\u1e70ha\",\n      \"Khu\",\n      \"Tsh\",\n      \"\\u1e3car\",\n      \"Nye\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ve-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_ve.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Swondaha\",\n      \"Musumbuluwo\",\n      \"\\u1e3cavhuvhili\",\n      \"\\u1e3cavhuraru\",\n      \"\\u1e3cavhu\\u1e4ba\",\n      \"\\u1e3cavhu\\u1e71anu\",\n      \"Mugivhela\"\n    ],\n    \"MONTH\": [\n      \"Phando\",\n      \"Luhuhi\",\n      \"\\u1e70hafamuhwe\",\n      \"Lambamai\",\n      \"Shundunthule\",\n      \"Fulwi\",\n      \"Fulwana\",\n      \"\\u1e70hangule\",\n      \"Khubvumedzi\",\n      \"Tshimedzi\",\n      \"\\u1e3cara\",\n      \"Nyendavhusiku\"\n    ],\n    \"SHORTDAY\": [\n      \"Swo\",\n      \"Mus\",\n      \"Vhi\",\n      \"Rar\",\n      \"\\u1e4aa\",\n      \"\\u1e70an\",\n      \"Mug\"\n    ],\n    \"SHORTMONTH\": [\n      \"Pha\",\n      \"Luh\",\n      \"\\u1e70hf\",\n      \"Lam\",\n      \"Shu\",\n      \"Lwi\",\n      \"Lwa\",\n      \"\\u1e70ha\",\n      \"Khu\",\n      \"Tsh\",\n      \"\\u1e3car\",\n      \"Nye\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"ve\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vi-vn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"SA\",\n      \"CH\"\n    ],\n    \"DAY\": [\n      \"Ch\\u1ee7 Nh\\u1eadt\",\n      \"Th\\u1ee9 Hai\",\n      \"Th\\u1ee9 Ba\",\n      \"Th\\u1ee9 T\\u01b0\",\n      \"Th\\u1ee9 N\\u0103m\",\n      \"Th\\u1ee9 S\\u00e1u\",\n      \"Th\\u1ee9 B\\u1ea3y\"\n    ],\n    \"MONTH\": [\n      \"th\\u00e1ng 1\",\n      \"th\\u00e1ng 2\",\n      \"th\\u00e1ng 3\",\n      \"th\\u00e1ng 4\",\n      \"th\\u00e1ng 5\",\n      \"th\\u00e1ng 6\",\n      \"th\\u00e1ng 7\",\n      \"th\\u00e1ng 8\",\n      \"th\\u00e1ng 9\",\n      \"th\\u00e1ng 10\",\n      \"th\\u00e1ng 11\",\n      \"th\\u00e1ng 12\"\n    ],\n    \"SHORTDAY\": [\n      \"CN\",\n      \"Th 2\",\n      \"Th 3\",\n      \"Th 4\",\n      \"Th 5\",\n      \"Th 6\",\n      \"Th 7\"\n    ],\n    \"SHORTMONTH\": [\n      \"thg 1\",\n      \"thg 2\",\n      \"thg 3\",\n      \"thg 4\",\n      \"thg 5\",\n      \"thg 6\",\n      \"thg 7\",\n      \"thg 8\",\n      \"thg 9\",\n      \"thg 10\",\n      \"thg 11\",\n      \"thg 12\"\n    ],\n    \"fullDate\": \"EEEE, 'ng\\u00e0y' dd MMMM 'n\\u0103m' y\",\n    \"longDate\": \"'Ng\\u00e0y' dd 'th\\u00e1ng' MM 'n\\u0103m' y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ab\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"vi-vn\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"SA\",\n      \"CH\"\n    ],\n    \"DAY\": [\n      \"Ch\\u1ee7 Nh\\u1eadt\",\n      \"Th\\u1ee9 Hai\",\n      \"Th\\u1ee9 Ba\",\n      \"Th\\u1ee9 T\\u01b0\",\n      \"Th\\u1ee9 N\\u0103m\",\n      \"Th\\u1ee9 S\\u00e1u\",\n      \"Th\\u1ee9 B\\u1ea3y\"\n    ],\n    \"MONTH\": [\n      \"th\\u00e1ng 1\",\n      \"th\\u00e1ng 2\",\n      \"th\\u00e1ng 3\",\n      \"th\\u00e1ng 4\",\n      \"th\\u00e1ng 5\",\n      \"th\\u00e1ng 6\",\n      \"th\\u00e1ng 7\",\n      \"th\\u00e1ng 8\",\n      \"th\\u00e1ng 9\",\n      \"th\\u00e1ng 10\",\n      \"th\\u00e1ng 11\",\n      \"th\\u00e1ng 12\"\n    ],\n    \"SHORTDAY\": [\n      \"CN\",\n      \"Th 2\",\n      \"Th 3\",\n      \"Th 4\",\n      \"Th 5\",\n      \"Th 6\",\n      \"Th 7\"\n    ],\n    \"SHORTMONTH\": [\n      \"thg 1\",\n      \"thg 2\",\n      \"thg 3\",\n      \"thg 4\",\n      \"thg 5\",\n      \"thg 6\",\n      \"thg 7\",\n      \"thg 8\",\n      \"thg 9\",\n      \"thg 10\",\n      \"thg 11\",\n      \"thg 12\"\n    ],\n    \"fullDate\": \"EEEE, 'ng\\u00e0y' dd MMMM 'n\\u0103m' y\",\n    \"longDate\": \"'Ng\\u00e0y' dd 'th\\u00e1ng' MM 'n\\u0103m' y\",\n    \"medium\": \"dd-MM-y HH:mm:ss\",\n    \"mediumDate\": \"dd-MM-y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/y HH:mm\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ab\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \".\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"vi\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vo-001.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"posz.\",\n      \"b\\u00fcz.\"\n    ],\n    \"DAY\": [\n      \"sudel\",\n      \"mudel\",\n      \"tudel\",\n      \"vedel\",\n      \"d\\u00f6del\",\n      \"fridel\",\n      \"z\\u00e4del\"\n    ],\n    \"MONTH\": [\n      \"janul\",\n      \"febul\",\n      \"m\\u00e4zil\",\n      \"prilul\",\n      \"mayul\",\n      \"yunul\",\n      \"yulul\",\n      \"gustul\",\n      \"setul\",\n      \"tobul\",\n      \"novul\",\n      \"dekul\"\n    ],\n    \"SHORTDAY\": [\n      \"su.\",\n      \"mu.\",\n      \"tu.\",\n      \"ve.\",\n      \"d\\u00f6.\",\n      \"fr.\",\n      \"z\\u00e4.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"m\\u00e4z\",\n      \"prl\",\n      \"may\",\n      \"yun\",\n      \"yul\",\n      \"gst\",\n      \"set\",\n      \"ton\",\n      \"nov\",\n      \"dek\"\n    ],\n    \"fullDate\": \"y MMMMa 'd'. d'id'\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM. d HH:mm:ss\",\n    \"mediumDate\": \"y MMM. d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vo-001\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"posz.\",\n      \"b\\u00fcz.\"\n    ],\n    \"DAY\": [\n      \"sudel\",\n      \"mudel\",\n      \"tudel\",\n      \"vedel\",\n      \"d\\u00f6del\",\n      \"fridel\",\n      \"z\\u00e4del\"\n    ],\n    \"MONTH\": [\n      \"janul\",\n      \"febul\",\n      \"m\\u00e4zil\",\n      \"prilul\",\n      \"mayul\",\n      \"yunul\",\n      \"yulul\",\n      \"gustul\",\n      \"setul\",\n      \"tobul\",\n      \"novul\",\n      \"dekul\"\n    ],\n    \"SHORTDAY\": [\n      \"su.\",\n      \"mu.\",\n      \"tu.\",\n      \"ve.\",\n      \"d\\u00f6.\",\n      \"fr.\",\n      \"z\\u00e4.\"\n    ],\n    \"SHORTMONTH\": [\n      \"jan\",\n      \"feb\",\n      \"m\\u00e4z\",\n      \"prl\",\n      \"may\",\n      \"yun\",\n      \"yul\",\n      \"gst\",\n      \"set\",\n      \"ton\",\n      \"nov\",\n      \"dek\"\n    ],\n    \"fullDate\": \"y MMMMa 'd'. d'id'\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM. d HH:mm:ss\",\n    \"mediumDate\": \"y MMM. d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vun-tz.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vun-tz\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_vun.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"utuko\",\n      \"kyiukonyi\"\n    ],\n    \"DAY\": [\n      \"Jumapilyi\",\n      \"Jumatatuu\",\n      \"Jumanne\",\n      \"Jumatanu\",\n      \"Alhamisi\",\n      \"Ijumaa\",\n      \"Jumamosi\"\n    ],\n    \"MONTH\": [\n      \"Januari\",\n      \"Februari\",\n      \"Machi\",\n      \"Aprilyi\",\n      \"Mei\",\n      \"Junyi\",\n      \"Julyai\",\n      \"Agusti\",\n      \"Septemba\",\n      \"Oktoba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Jpi\",\n      \"Jtt\",\n      \"Jnn\",\n      \"Jtn\",\n      \"Alh\",\n      \"Iju\",\n      \"Jmo\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mac\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"TSh\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"vun\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_wae-ch.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunntag\",\n      \"M\\u00e4ntag\",\n      \"Zi\\u0161tag\",\n      \"Mittwu\\u010d\",\n      \"Fr\\u00f3ntag\",\n      \"Fritag\",\n      \"Sam\\u0161tag\"\n    ],\n    \"MONTH\": [\n      \"Jenner\",\n      \"Hornig\",\n      \"M\\u00e4rze\",\n      \"Abrille\",\n      \"Meije\",\n      \"Br\\u00e1\\u010det\",\n      \"Heiwet\",\n      \"\\u00d6ig\\u0161te\",\n      \"Herb\\u0161tm\\u00e1net\",\n      \"W\\u00edm\\u00e1net\",\n      \"Winterm\\u00e1net\",\n      \"Chri\\u0161tm\\u00e1net\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"M\\u00e4n\",\n      \"Zi\\u0161\",\n      \"Mit\",\n      \"Fr\\u00f3\",\n      \"Fri\",\n      \"Sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jen\",\n      \"Hor\",\n      \"M\\u00e4r\",\n      \"Abr\",\n      \"Mei\",\n      \"Br\\u00e1\",\n      \"Hei\",\n      \"\\u00d6ig\",\n      \"Her\",\n      \"W\\u00edm\",\n      \"Win\",\n      \"Chr\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"wae-ch\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_wae.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunntag\",\n      \"M\\u00e4ntag\",\n      \"Zi\\u0161tag\",\n      \"Mittwu\\u010d\",\n      \"Fr\\u00f3ntag\",\n      \"Fritag\",\n      \"Sam\\u0161tag\"\n    ],\n    \"MONTH\": [\n      \"Jenner\",\n      \"Hornig\",\n      \"M\\u00e4rze\",\n      \"Abrille\",\n      \"Meije\",\n      \"Br\\u00e1\\u010det\",\n      \"Heiwet\",\n      \"\\u00d6ig\\u0161te\",\n      \"Herb\\u0161tm\\u00e1net\",\n      \"W\\u00edm\\u00e1net\",\n      \"Winterm\\u00e1net\",\n      \"Chri\\u0161tm\\u00e1net\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"M\\u00e4n\",\n      \"Zi\\u0161\",\n      \"Mit\",\n      \"Fr\\u00f3\",\n      \"Fri\",\n      \"Sam\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jen\",\n      \"Hor\",\n      \"M\\u00e4r\",\n      \"Abr\",\n      \"Mei\",\n      \"Br\\u00e1\",\n      \"Hei\",\n      \"\\u00d6ig\",\n      \"Her\",\n      \"W\\u00edm\",\n      \"Win\",\n      \"Chr\"\n    ],\n    \"fullDate\": \"EEEE, d. MMMM y\",\n    \"longDate\": \"d. MMMM y\",\n    \"medium\": \"d. MMM y HH:mm:ss\",\n    \"mediumDate\": \"d. MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CHF\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"wae\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_wal-et.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u121b\\u1208\\u12f6\",\n      \"\\u1243\\u121b\"\n    ],\n    \"DAY\": [\n      \"\\u12c8\\u130b\",\n      \"\\u1233\\u12ed\\u1296\",\n      \"\\u121b\\u1246\\u1233\\u129b\",\n      \"\\u12a0\\u1229\\u12cb\",\n      \"\\u1203\\u1219\\u1233\",\n      \"\\u12a0\\u122d\\u1263\",\n      \"\\u1244\\u122b\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u12c8\\u130b\",\n      \"\\u1233\\u12ed\\u1296\",\n      \"\\u121b\\u1246\\u1233\\u129b\",\n      \"\\u12a0\\u1229\\u12cb\",\n      \"\\u1203\\u1219\\u1233\",\n      \"\\u12a0\\u122d\\u1263\",\n      \"\\u1244\\u122b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1365 dd MMMM \\u130b\\u120b\\u1233 y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"wal-et\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_wal.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u121b\\u1208\\u12f6\",\n      \"\\u1243\\u121b\"\n    ],\n    \"DAY\": [\n      \"\\u12c8\\u130b\",\n      \"\\u1233\\u12ed\\u1296\",\n      \"\\u121b\\u1246\\u1233\\u129b\",\n      \"\\u12a0\\u1229\\u12cb\",\n      \"\\u1203\\u1219\\u1233\",\n      \"\\u12a0\\u122d\\u1263\",\n      \"\\u1244\\u122b\"\n    ],\n    \"MONTH\": [\n      \"\\u1303\\u1295\\u12e9\\u12c8\\u122a\",\n      \"\\u134c\\u1265\\u1229\\u12c8\\u122a\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\\u120d\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\\u1275\",\n      \"\\u1234\\u1355\\u1274\\u121d\\u1260\\u122d\",\n      \"\\u12a6\\u12ad\\u1270\\u12cd\\u1260\\u122d\",\n      \"\\u1296\\u126c\\u121d\\u1260\\u122d\",\n      \"\\u12f2\\u1234\\u121d\\u1260\\u122d\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u12c8\\u130b\",\n      \"\\u1233\\u12ed\\u1296\",\n      \"\\u121b\\u1246\\u1233\\u129b\",\n      \"\\u12a0\\u1229\\u12cb\",\n      \"\\u1203\\u1219\\u1233\",\n      \"\\u12a0\\u122d\\u1263\",\n      \"\\u1244\\u122b\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1303\\u1295\\u12e9\",\n      \"\\u134c\\u1265\\u1229\",\n      \"\\u121b\\u122d\\u127d\",\n      \"\\u12a4\\u1355\\u1228\",\n      \"\\u121c\\u12ed\",\n      \"\\u1301\\u1295\",\n      \"\\u1301\\u120b\\u12ed\",\n      \"\\u12a6\\u1308\\u1235\",\n      \"\\u1234\\u1355\\u1274\",\n      \"\\u12a6\\u12ad\\u1270\",\n      \"\\u1296\\u126c\\u121d\",\n      \"\\u12f2\\u1234\\u121d\"\n    ],\n    \"fullDate\": \"EEEE\\u1365 dd MMMM \\u130b\\u120b\\u1233 y G\",\n    \"longDate\": \"dd MMMM y\",\n    \"medium\": \"dd-MMM-y h:mm:ss a\",\n    \"mediumDate\": \"dd-MMM-y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/yy h:mm a\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"Birr\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \"\\u2019\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"wal\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_xh-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Cawe\",\n      \"Mvulo\",\n      \"Lwesibini\",\n      \"Lwesithathu\",\n      \"Lwesine\",\n      \"Lwesihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Janyuwari\",\n      \"Februwari\",\n      \"Matshi\",\n      \"Epreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Agasti\",\n      \"Septemba\",\n      \"Okthoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Caw\",\n      \"Mvu\",\n      \"Bin\",\n      \"Tha\",\n      \"Sin\",\n      \"Hla\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Epr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Aga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"xh-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_xh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Cawe\",\n      \"Mvulo\",\n      \"Lwesibini\",\n      \"Lwesithathu\",\n      \"Lwesine\",\n      \"Lwesihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Janyuwari\",\n      \"Februwari\",\n      \"Matshi\",\n      \"Epreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Agasti\",\n      \"Septemba\",\n      \"Okthoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Caw\",\n      \"Mvu\",\n      \"Bin\",\n      \"Tha\",\n      \"Sin\",\n      \"Hla\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mat\",\n      \"Epr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Aga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"y MMMM d, EEEE\",\n    \"longDate\": \"y MMMM d\",\n    \"medium\": \"y MMM d HH:mm:ss\",\n    \"mediumDate\": \"y MMM d\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"y-MM-dd HH:mm\",\n    \"shortDate\": \"y-MM-dd\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"xh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_xog-ug.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Munkyo\",\n      \"Eigulo\"\n    ],\n    \"DAY\": [\n      \"Sabiiti\",\n      \"Balaza\",\n      \"Owokubili\",\n      \"Owokusatu\",\n      \"Olokuna\",\n      \"Olokutaanu\",\n      \"Olomukaaga\"\n    ],\n    \"MONTH\": [\n      \"Janwaliyo\",\n      \"Febwaliyo\",\n      \"Marisi\",\n      \"Apuli\",\n      \"Maayi\",\n      \"Juuni\",\n      \"Julaayi\",\n      \"Agusito\",\n      \"Sebuttemba\",\n      \"Okitobba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Sabi\",\n      \"Bala\",\n      \"Kubi\",\n      \"Kusa\",\n      \"Kuna\",\n      \"Kuta\",\n      \"Muka\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apu\",\n      \"Maa\",\n      \"Juu\",\n      \"Jul\",\n      \"Agu\",\n      \"Seb\",\n      \"Oki\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"xog-ug\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_xog.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Munkyo\",\n      \"Eigulo\"\n    ],\n    \"DAY\": [\n      \"Sabiiti\",\n      \"Balaza\",\n      \"Owokubili\",\n      \"Owokusatu\",\n      \"Olokuna\",\n      \"Olokutaanu\",\n      \"Olomukaaga\"\n    ],\n    \"MONTH\": [\n      \"Janwaliyo\",\n      \"Febwaliyo\",\n      \"Marisi\",\n      \"Apuli\",\n      \"Maayi\",\n      \"Juuni\",\n      \"Julaayi\",\n      \"Agusito\",\n      \"Sebuttemba\",\n      \"Okitobba\",\n      \"Novemba\",\n      \"Desemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Sabi\",\n      \"Bala\",\n      \"Kubi\",\n      \"Kusa\",\n      \"Kuna\",\n      \"Kuta\",\n      \"Muka\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apu\",\n      \"Maa\",\n      \"Juu\",\n      \"Jul\",\n      \"Agu\",\n      \"Seb\",\n      \"Oki\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"UGX\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"xog\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yav-cm.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ki\\u025bm\\u025b\\u0301\\u025bm\",\n      \"kis\\u025b\\u0301nd\\u025b\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301ndi\\u025b\",\n      \"m\\u00f3ndie\",\n      \"mu\\u00e1ny\\u00e1\\u014bm\\u00f3ndie\",\n      \"met\\u00fakp\\u00ed\\u00e1p\\u025b\",\n      \"k\\u00fap\\u00e9limet\\u00fakpiap\\u025b\",\n      \"fel\\u00e9te\",\n      \"s\\u00e9sel\\u00e9\"\n    ],\n    \"MONTH\": [\n      \"pik\\u00edt\\u00edk\\u00edtie, o\\u00f3l\\u00ed \\u00fa kut\\u00faan\",\n      \"si\\u025by\\u025b\\u0301, o\\u00f3li \\u00fa k\\u00e1nd\\u00ed\\u025b\",\n      \"\\u0254ns\\u00famb\\u0254l, o\\u00f3li \\u00fa k\\u00e1t\\u00e1t\\u00fa\\u025b\",\n      \"mesi\\u014b, o\\u00f3li \\u00fa k\\u00e9nie\",\n      \"ensil, o\\u00f3li \\u00fa k\\u00e1t\\u00e1nu\\u025b\",\n      \"\\u0254s\\u0254n\",\n      \"efute\",\n      \"pisuy\\u00fa\",\n      \"im\\u025b\\u014b i pu\\u0254s\",\n      \"im\\u025b\\u014b i put\\u00fak,o\\u00f3li \\u00fa k\\u00e1t\\u00ed\\u025b\",\n      \"makandik\\u025b\",\n      \"pil\\u0254nd\\u0254\\u0301\"\n    ],\n    \"SHORTDAY\": [\n      \"sd\",\n      \"md\",\n      \"mw\",\n      \"et\",\n      \"kl\",\n      \"fl\",\n      \"ss\"\n    ],\n    \"SHORTMONTH\": [\n      \"o.1\",\n      \"o.2\",\n      \"o.3\",\n      \"o.4\",\n      \"o.5\",\n      \"o.6\",\n      \"o.7\",\n      \"o.8\",\n      \"o.9\",\n      \"o.10\",\n      \"o.11\",\n      \"o.12\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"yav-cm\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yav.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"ki\\u025bm\\u025b\\u0301\\u025bm\",\n      \"kis\\u025b\\u0301nd\\u025b\"\n    ],\n    \"DAY\": [\n      \"s\\u0254\\u0301ndi\\u025b\",\n      \"m\\u00f3ndie\",\n      \"mu\\u00e1ny\\u00e1\\u014bm\\u00f3ndie\",\n      \"met\\u00fakp\\u00ed\\u00e1p\\u025b\",\n      \"k\\u00fap\\u00e9limet\\u00fakpiap\\u025b\",\n      \"fel\\u00e9te\",\n      \"s\\u00e9sel\\u00e9\"\n    ],\n    \"MONTH\": [\n      \"pik\\u00edt\\u00edk\\u00edtie, o\\u00f3l\\u00ed \\u00fa kut\\u00faan\",\n      \"si\\u025by\\u025b\\u0301, o\\u00f3li \\u00fa k\\u00e1nd\\u00ed\\u025b\",\n      \"\\u0254ns\\u00famb\\u0254l, o\\u00f3li \\u00fa k\\u00e1t\\u00e1t\\u00fa\\u025b\",\n      \"mesi\\u014b, o\\u00f3li \\u00fa k\\u00e9nie\",\n      \"ensil, o\\u00f3li \\u00fa k\\u00e1t\\u00e1nu\\u025b\",\n      \"\\u0254s\\u0254n\",\n      \"efute\",\n      \"pisuy\\u00fa\",\n      \"im\\u025b\\u014b i pu\\u0254s\",\n      \"im\\u025b\\u014b i put\\u00fak,o\\u00f3li \\u00fa k\\u00e1t\\u00ed\\u025b\",\n      \"makandik\\u025b\",\n      \"pil\\u0254nd\\u0254\\u0301\"\n    ],\n    \"SHORTDAY\": [\n      \"sd\",\n      \"md\",\n      \"mw\",\n      \"et\",\n      \"kl\",\n      \"fl\",\n      \"ss\"\n    ],\n    \"SHORTMONTH\": [\n      \"o.1\",\n      \"o.2\",\n      \"o.3\",\n      \"o.4\",\n      \"o.5\",\n      \"o.6\",\n      \"o.7\",\n      \"o.8\",\n      \"o.9\",\n      \"o.10\",\n      \"o.11\",\n      \"o.12\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y HH:mm:ss\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"FCFA\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a0\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a0\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"yav\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yi-001.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u05e4\\u05d0\\u05e8\\u05de\\u05d9\\u05d8\\u05d0\\u05d2\",\n      \"\\u05e0\\u05d0\\u05db\\u05de\\u05d9\\u05d8\\u05d0\\u05d2\"\n    ],\n    \"DAY\": [\n      \"\\u05d6\\u05d5\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d0\\u05b8\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05d3\\u05d9\\u05e0\\u05e1\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d9\\u05d8\\u05d5\\u05d5\\u05d0\\u05da\",\n      \"\\u05d3\\u05d0\\u05e0\\u05e2\\u05e8\\u05e9\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e4\\u05bf\\u05e8\\u05f2\\u05b7\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"MONTH\": [\n      \"\\u05d9\\u05d0\\u05b7\\u05e0\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05e4\\u05bf\\u05e2\\u05d1\\u05e8\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05de\\u05e2\\u05e8\\u05e5\",\n      \"\\u05d0\\u05b7\\u05e4\\u05bc\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d9\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e2\\u05e4\\u05bc\\u05d8\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d0\\u05e7\\u05d8\\u05d0\\u05d1\\u05e2\\u05e8\",\n      \"\\u05e0\\u05d0\\u05d5\\u05d5\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d3\\u05e2\\u05e6\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u05d6\\u05d5\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d0\\u05b8\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05d3\\u05d9\\u05e0\\u05e1\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d9\\u05d8\\u05d5\\u05d5\\u05d0\\u05da\",\n      \"\\u05d3\\u05d0\\u05e0\\u05e2\\u05e8\\u05e9\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e4\\u05bf\\u05e8\\u05f2\\u05b7\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u05d9\\u05d0\\u05b7\\u05e0\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05e4\\u05bf\\u05e2\\u05d1\\u05e8\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05de\\u05e2\\u05e8\\u05e5\",\n      \"\\u05d0\\u05b7\\u05e4\\u05bc\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d9\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e2\\u05e4\\u05bc\\u05d8\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d0\\u05e7\\u05d8\\u05d0\\u05d1\\u05e2\\u05e8\",\n      \"\\u05e0\\u05d0\\u05d5\\u05d5\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d3\\u05e2\\u05e6\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\"\n    ],\n    \"fullDate\": \"EEEE, d\\u05d8\\u05df MMMM y\",\n    \"longDate\": \"d\\u05d8\\u05df MMMM y\",\n    \"medium\": \"d\\u05d8\\u05df MMM y HH:mm:ss\",\n    \"mediumDate\": \"d\\u05d8\\u05df MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"yi-001\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yi.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u05e4\\u05d0\\u05e8\\u05de\\u05d9\\u05d8\\u05d0\\u05d2\",\n      \"\\u05e0\\u05d0\\u05db\\u05de\\u05d9\\u05d8\\u05d0\\u05d2\"\n    ],\n    \"DAY\": [\n      \"\\u05d6\\u05d5\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d0\\u05b8\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05d3\\u05d9\\u05e0\\u05e1\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d9\\u05d8\\u05d5\\u05d5\\u05d0\\u05da\",\n      \"\\u05d3\\u05d0\\u05e0\\u05e2\\u05e8\\u05e9\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e4\\u05bf\\u05e8\\u05f2\\u05b7\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"MONTH\": [\n      \"\\u05d9\\u05d0\\u05b7\\u05e0\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05e4\\u05bf\\u05e2\\u05d1\\u05e8\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05de\\u05e2\\u05e8\\u05e5\",\n      \"\\u05d0\\u05b7\\u05e4\\u05bc\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d9\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e2\\u05e4\\u05bc\\u05d8\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d0\\u05e7\\u05d8\\u05d0\\u05d1\\u05e2\\u05e8\",\n      \"\\u05e0\\u05d0\\u05d5\\u05d5\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d3\\u05e2\\u05e6\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u05d6\\u05d5\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d0\\u05b8\\u05e0\\u05d8\\u05d9\\u05e7\",\n      \"\\u05d3\\u05d9\\u05e0\\u05e1\\u05d8\\u05d9\\u05e7\",\n      \"\\u05de\\u05d9\\u05d8\\u05d5\\u05d5\\u05d0\\u05da\",\n      \"\\u05d3\\u05d0\\u05e0\\u05e2\\u05e8\\u05e9\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e4\\u05bf\\u05e8\\u05f2\\u05b7\\u05d8\\u05d9\\u05e7\",\n      \"\\u05e9\\u05d1\\u05ea\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u05d9\\u05d0\\u05b7\\u05e0\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05e4\\u05bf\\u05e2\\u05d1\\u05e8\\u05d5\\u05d0\\u05b7\\u05e8\",\n      \"\\u05de\\u05e2\\u05e8\\u05e5\",\n      \"\\u05d0\\u05b7\\u05e4\\u05bc\\u05e8\\u05d9\\u05dc\",\n      \"\\u05de\\u05d9\\u05d9\",\n      \"\\u05d9\\u05d5\\u05e0\\u05d9\",\n      \"\\u05d9\\u05d5\\u05dc\\u05d9\",\n      \"\\u05d0\\u05d5\\u05d9\\u05d2\\u05d5\\u05e1\\u05d8\",\n      \"\\u05e1\\u05e2\\u05e4\\u05bc\\u05d8\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d0\\u05e7\\u05d8\\u05d0\\u05d1\\u05e2\\u05e8\",\n      \"\\u05e0\\u05d0\\u05d5\\u05d5\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\",\n      \"\\u05d3\\u05e2\\u05e6\\u05e2\\u05de\\u05d1\\u05e2\\u05e8\"\n    ],\n    \"fullDate\": \"EEEE, d\\u05d8\\u05df MMMM y\",\n    \"longDate\": \"d\\u05d8\\u05df MMMM y\",\n    \"medium\": \"d\\u05d8\\u05df MMM y HH:mm:ss\",\n    \"mediumDate\": \"d\\u05d8\\u05df MMM y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"dd/MM/yy HH:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"yi\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yo-bj.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00c0\\u00e1r\\u0254\\u0300\",\n      \"\\u0186\\u0300s\\u00e1n\"\n    ],\n    \"DAY\": [\n      \"\\u0186j\\u0254\\u0301 \\u00c0\\u00eck\\u00fa\",\n      \"\\u0186j\\u0254\\u0301 Aj\\u00e9\",\n      \"\\u0186j\\u0254\\u0301 \\u00ccs\\u025b\\u0301gun\",\n      \"\\u0186j\\u0254\\u0301r\\u00fa\",\n      \"\\u0186j\\u0254\\u0301b\\u0254\",\n      \"\\u0186j\\u0254\\u0301 \\u0190t\\u00ec\",\n      \"\\u0186j\\u0254\\u0301 \\u00c0b\\u00e1m\\u025b\\u0301ta\"\n    ],\n    \"MONTH\": [\n      \"Osh\\u00f9 Sh\\u025b\\u0301r\\u025b\\u0301\",\n      \"Osh\\u00f9 \\u00c8r\\u00e8l\\u00e8\",\n      \"Osh\\u00f9 \\u0190r\\u025b\\u0300n\\u00e0\",\n      \"Osh\\u00f9 \\u00ccgb\\u00e9\",\n      \"Osh\\u00f9 \\u0190\\u0300bibi\",\n      \"Osh\\u00f9 \\u00d2k\\u00fadu\",\n      \"Osh\\u00f9 Ag\\u025bm\\u0254\",\n      \"Osh\\u00f9 \\u00d2g\\u00fan\",\n      \"Osh\\u00f9 Owewe\",\n      \"Osh\\u00f9 \\u0186\\u0300w\\u00e0r\\u00e0\",\n      \"Osh\\u00f9 B\\u00e9l\\u00fa\",\n      \"Osh\\u00f9 \\u0186\\u0300p\\u025b\\u0300\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u00c0\\u00eck\\u00fa\",\n      \"Aj\\u00e9\",\n      \"\\u00ccs\\u025b\\u0301gun\",\n      \"\\u0186j\\u0254\\u0301r\\u00fa\",\n      \"\\u0186j\\u0254\\u0301b\\u0254\",\n      \"\\u0190t\\u00ec\",\n      \"\\u00c0b\\u00e1m\\u025b\\u0301ta\"\n    ],\n    \"SHORTMONTH\": [\n      \"Sh\\u025b\\u0301r\\u025b\\u0301\",\n      \"\\u00c8r\\u00e8l\\u00e8\",\n      \"\\u0190r\\u025b\\u0300n\\u00e0\",\n      \"\\u00ccgb\\u00e9\",\n      \"\\u0190\\u0300bibi\",\n      \"\\u00d2k\\u00fadu\",\n      \"Ag\\u025bm\\u0254\",\n      \"\\u00d2g\\u00fan\",\n      \"Owewe\",\n      \"\\u0186\\u0300w\\u00e0r\\u00e0\",\n      \"B\\u00e9l\\u00fa\",\n      \"\\u0186\\u0300p\\u025b\\u0300\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"CFA\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"yo-bj\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yo-ng.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00c0\\u00e1r\\u1ecd\\u0300\",\n      \"\\u1ecc\\u0300s\\u00e1n\"\n    ],\n    \"DAY\": [\n      \"\\u1eccj\\u1ecd\\u0301 \\u00c0\\u00eck\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301 Aj\\u00e9\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u00ccs\\u1eb9\\u0301gun\",\n      \"\\u1eccj\\u1ecd\\u0301r\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301b\\u1ecd\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u1eb8t\\u00ec\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u00c0b\\u00e1m\\u1eb9\\u0301ta\"\n    ],\n    \"MONTH\": [\n      \"O\\u1e63\\u00f9 \\u1e62\\u1eb9\\u0301r\\u1eb9\\u0301\",\n      \"O\\u1e63\\u00f9 \\u00c8r\\u00e8l\\u00e8\",\n      \"O\\u1e63\\u00f9 \\u1eb8r\\u1eb9\\u0300n\\u00e0\",\n      \"O\\u1e63\\u00f9 \\u00ccgb\\u00e9\",\n      \"O\\u1e63\\u00f9 \\u1eb8\\u0300bibi\",\n      \"O\\u1e63\\u00f9 \\u00d2k\\u00fadu\",\n      \"O\\u1e63\\u00f9 Ag\\u1eb9m\\u1ecd\",\n      \"O\\u1e63\\u00f9 \\u00d2g\\u00fan\",\n      \"O\\u1e63\\u00f9 Owewe\",\n      \"O\\u1e63\\u00f9 \\u1ecc\\u0300w\\u00e0r\\u00e0\",\n      \"O\\u1e63\\u00f9 B\\u00e9l\\u00fa\",\n      \"O\\u1e63\\u00f9 \\u1ecc\\u0300p\\u1eb9\\u0300\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u00c0\\u00eck\\u00fa\",\n      \"Aj\\u00e9\",\n      \"\\u00ccs\\u1eb9\\u0301gun\",\n      \"\\u1eccj\\u1ecd\\u0301r\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301b\\u1ecd\",\n      \"\\u1eb8t\\u00ec\",\n      \"\\u00c0b\\u00e1m\\u1eb9\\u0301ta\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1e62\\u1eb9\\u0301r\\u1eb9\\u0301\",\n      \"\\u00c8r\\u00e8l\\u00e8\",\n      \"\\u1eb8r\\u1eb9\\u0300n\\u00e0\",\n      \"\\u00ccgb\\u00e9\",\n      \"\\u1eb8\\u0300bibi\",\n      \"\\u00d2k\\u00fadu\",\n      \"Ag\\u1eb9m\\u1ecd\",\n      \"\\u00d2g\\u00fan\",\n      \"Owewe\",\n      \"\\u1ecc\\u0300w\\u00e0r\\u00e0\",\n      \"B\\u00e9l\\u00fa\",\n      \"\\u1ecc\\u0300p\\u1eb9\\u0300\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"yo-ng\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_yo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u00c0\\u00e1r\\u1ecd\\u0300\",\n      \"\\u1ecc\\u0300s\\u00e1n\"\n    ],\n    \"DAY\": [\n      \"\\u1eccj\\u1ecd\\u0301 \\u00c0\\u00eck\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301 Aj\\u00e9\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u00ccs\\u1eb9\\u0301gun\",\n      \"\\u1eccj\\u1ecd\\u0301r\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301b\\u1ecd\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u1eb8t\\u00ec\",\n      \"\\u1eccj\\u1ecd\\u0301 \\u00c0b\\u00e1m\\u1eb9\\u0301ta\"\n    ],\n    \"MONTH\": [\n      \"O\\u1e63\\u00f9 \\u1e62\\u1eb9\\u0301r\\u1eb9\\u0301\",\n      \"O\\u1e63\\u00f9 \\u00c8r\\u00e8l\\u00e8\",\n      \"O\\u1e63\\u00f9 \\u1eb8r\\u1eb9\\u0300n\\u00e0\",\n      \"O\\u1e63\\u00f9 \\u00ccgb\\u00e9\",\n      \"O\\u1e63\\u00f9 \\u1eb8\\u0300bibi\",\n      \"O\\u1e63\\u00f9 \\u00d2k\\u00fadu\",\n      \"O\\u1e63\\u00f9 Ag\\u1eb9m\\u1ecd\",\n      \"O\\u1e63\\u00f9 \\u00d2g\\u00fan\",\n      \"O\\u1e63\\u00f9 Owewe\",\n      \"O\\u1e63\\u00f9 \\u1ecc\\u0300w\\u00e0r\\u00e0\",\n      \"O\\u1e63\\u00f9 B\\u00e9l\\u00fa\",\n      \"O\\u1e63\\u00f9 \\u1ecc\\u0300p\\u1eb9\\u0300\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u00c0\\u00eck\\u00fa\",\n      \"Aj\\u00e9\",\n      \"\\u00ccs\\u1eb9\\u0301gun\",\n      \"\\u1eccj\\u1ecd\\u0301r\\u00fa\",\n      \"\\u1eccj\\u1ecd\\u0301b\\u1ecd\",\n      \"\\u1eb8t\\u00ec\",\n      \"\\u00c0b\\u00e1m\\u1eb9\\u0301ta\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u1e62\\u1eb9\\u0301r\\u1eb9\\u0301\",\n      \"\\u00c8r\\u00e8l\\u00e8\",\n      \"\\u1eb8r\\u1eb9\\u0300n\\u00e0\",\n      \"\\u00ccgb\\u00e9\",\n      \"\\u1eb8\\u0300bibi\",\n      \"\\u00d2k\\u00fadu\",\n      \"Ag\\u1eb9m\\u1ecd\",\n      \"\\u00d2g\\u00fan\",\n      \"Owewe\",\n      \"\\u1ecc\\u0300w\\u00e0r\\u00e0\",\n      \"B\\u00e9l\\u00fa\",\n      \"\\u1ecc\\u0300p\\u1eb9\\u0300\"\n    ],\n    \"fullDate\": \"EEEE, d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM y h:mm:ss a\",\n    \"mediumDate\": \"d MMM y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"dd/MM/y h:mm a\",\n    \"shortDate\": \"dd/MM/y\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20a6\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"yo\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zgh-ma.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u2d5c\\u2d49\\u2d3c\\u2d30\\u2d61\\u2d5c\",\n      \"\\u2d5c\\u2d30\\u2d37\\u2d33\\u2d33\\u2d6f\\u2d30\\u2d5c\"\n    ],\n    \"DAY\": [\n      \"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d55\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\"\n    ],\n    \"MONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54\",\n      \"\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55\",\n      \"\\u2d4e\\u2d30\\u2d55\\u2d5a\",\n      \"\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63\",\n      \"\\u2d56\\u2d53\\u2d5b\\u2d5c\",\n      \"\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d3d\\u2d5c\\u2d53\\u2d31\\u2d54\",\n      \"\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d37\\u2d53\\u2d4a\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u2d30\\u2d59\\u2d30\",\n      \"\\u2d30\\u2d62\\u2d4f\",\n      \"\\u2d30\\u2d59\\u2d49\",\n      \"\\u2d30\\u2d3d\\u2d55\",\n      \"\\u2d30\\u2d3d\\u2d61\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\",\n      \"\\u2d31\\u2d55\\u2d30\",\n      \"\\u2d4e\\u2d30\\u2d55\",\n      \"\\u2d49\\u2d31\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\",\n      \"\\u2d62\\u2d53\\u2d4f\",\n      \"\\u2d62\\u2d53\\u2d4d\",\n      \"\\u2d56\\u2d53\\u2d5b\",\n      \"\\u2d5b\\u2d53\\u2d5c\",\n      \"\\u2d3d\\u2d5c\\u2d53\",\n      \"\\u2d4f\\u2d53\\u2d61\",\n      \"\\u2d37\\u2d53\\u2d4a\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"zgh-ma\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zgh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u2d5c\\u2d49\\u2d3c\\u2d30\\u2d61\\u2d5c\",\n      \"\\u2d5c\\u2d30\\u2d37\\u2d33\\u2d33\\u2d6f\\u2d30\\u2d5c\"\n    ],\n    \"DAY\": [\n      \"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d55\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\"\n    ],\n    \"MONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54\",\n      \"\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55\",\n      \"\\u2d4e\\u2d30\\u2d55\\u2d5a\",\n      \"\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53\",\n      \"\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63\",\n      \"\\u2d56\\u2d53\\u2d5b\\u2d5c\",\n      \"\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d3d\\u2d5c\\u2d53\\u2d31\\u2d54\",\n      \"\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\",\n      \"\\u2d37\\u2d53\\u2d4a\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u2d30\\u2d59\\u2d30\",\n      \"\\u2d30\\u2d62\\u2d4f\",\n      \"\\u2d30\\u2d59\\u2d49\",\n      \"\\u2d30\\u2d3d\\u2d55\",\n      \"\\u2d30\\u2d3d\\u2d61\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d4e\",\n      \"\\u2d30\\u2d59\\u2d49\\u2d39\"\n    ],\n    \"SHORTMONTH\": [\n      \"\\u2d49\\u2d4f\\u2d4f\",\n      \"\\u2d31\\u2d55\\u2d30\",\n      \"\\u2d4e\\u2d30\\u2d55\",\n      \"\\u2d49\\u2d31\\u2d54\",\n      \"\\u2d4e\\u2d30\\u2d62\",\n      \"\\u2d62\\u2d53\\u2d4f\",\n      \"\\u2d62\\u2d53\\u2d4d\",\n      \"\\u2d56\\u2d53\\u2d5b\",\n      \"\\u2d5b\\u2d53\\u2d5c\",\n      \"\\u2d3d\\u2d5c\\u2d53\",\n      \"\\u2d4f\\u2d53\\u2d61\",\n      \"\\u2d37\\u2d53\\u2d4a\"\n    ],\n    \"fullDate\": \"EEEE d MMMM y\",\n    \"longDate\": \"d MMMM y\",\n    \"medium\": \"d MMM, y HH:mm:ss\",\n    \"mediumDate\": \"d MMM, y\",\n    \"mediumTime\": \"HH:mm:ss\",\n    \"short\": \"d/M/y HH:mm\",\n    \"shortDate\": \"d/M/y\",\n    \"shortTime\": \"HH:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"dh\",\n    \"DECIMAL_SEP\": \",\",\n    \"GROUP_SEP\": \"\\u00a0\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\\u00a4\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\\u00a4\"\n      }\n    ]\n  },\n  \"id\": \"zgh\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-cn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"yy/M/d ah:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-cn\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hans-cn.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"yy/M/d ah:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hans-cn\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hans-hk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"d/M/yy ah:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hans-hk\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hans-mo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"d/M/yy ah:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MOP\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hans-mo\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hans-sg.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"dd/MM/yy ahh:mm\",\n    \"shortDate\": \"dd/MM/yy\",\n    \"shortTime\": \"ahh:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hans-sg\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hans.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"yy/M/d ah:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u20ac\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hans\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hant-hk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"d/M/yy ah:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hant-hk\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hant-mo.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74MM\\u6708dd\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74MM\\u6708dd\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"yy\\u5e74M\\u6708d\\u65e5 ah:mm\",\n    \"shortDate\": \"yy\\u5e74M\\u6708d\\u65e5\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"MOP\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hant-mo\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hant-tw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5 EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"y/M/d ah:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"NT$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hant-tw\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hant.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5 EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"y/M/d ah:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"NT$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hant\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-hk.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"d/M/yy ah:mm\",\n    \"shortDate\": \"d/M/yy\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-hk\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh-tw.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u9031\\u65e5\",\n      \"\\u9031\\u4e00\",\n      \"\\u9031\\u4e8c\",\n      \"\\u9031\\u4e09\",\n      \"\\u9031\\u56db\",\n      \"\\u9031\\u4e94\",\n      \"\\u9031\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5 EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"y/M/d ah:mm\",\n    \"shortDate\": \"y/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"NT$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh-tw\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zh.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"\\u4e0a\\u5348\",\n      \"\\u4e0b\\u5348\"\n    ],\n    \"DAY\": [\n      \"\\u661f\\u671f\\u65e5\",\n      \"\\u661f\\u671f\\u4e00\",\n      \"\\u661f\\u671f\\u4e8c\",\n      \"\\u661f\\u671f\\u4e09\",\n      \"\\u661f\\u671f\\u56db\",\n      \"\\u661f\\u671f\\u4e94\",\n      \"\\u661f\\u671f\\u516d\"\n    ],\n    \"MONTH\": [\n      \"\\u4e00\\u6708\",\n      \"\\u4e8c\\u6708\",\n      \"\\u4e09\\u6708\",\n      \"\\u56db\\u6708\",\n      \"\\u4e94\\u6708\",\n      \"\\u516d\\u6708\",\n      \"\\u4e03\\u6708\",\n      \"\\u516b\\u6708\",\n      \"\\u4e5d\\u6708\",\n      \"\\u5341\\u6708\",\n      \"\\u5341\\u4e00\\u6708\",\n      \"\\u5341\\u4e8c\\u6708\"\n    ],\n    \"SHORTDAY\": [\n      \"\\u5468\\u65e5\",\n      \"\\u5468\\u4e00\",\n      \"\\u5468\\u4e8c\",\n      \"\\u5468\\u4e09\",\n      \"\\u5468\\u56db\",\n      \"\\u5468\\u4e94\",\n      \"\\u5468\\u516d\"\n    ],\n    \"SHORTMONTH\": [\n      \"1\\u6708\",\n      \"2\\u6708\",\n      \"3\\u6708\",\n      \"4\\u6708\",\n      \"5\\u6708\",\n      \"6\\u6708\",\n      \"7\\u6708\",\n      \"8\\u6708\",\n      \"9\\u6708\",\n      \"10\\u6708\",\n      \"11\\u6708\",\n      \"12\\u6708\"\n    ],\n    \"fullDate\": \"y\\u5e74M\\u6708d\\u65e5EEEE\",\n    \"longDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"medium\": \"y\\u5e74M\\u6708d\\u65e5 ah:mm:ss\",\n    \"mediumDate\": \"y\\u5e74M\\u6708d\\u65e5\",\n    \"mediumTime\": \"ah:mm:ss\",\n    \"short\": \"yy/M/d ah:mm\",\n    \"shortDate\": \"yy/M/d\",\n    \"shortTime\": \"ah:mm\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"\\u00a5\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4\\u00a0-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\\u00a0\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zh\",\n  \"pluralCat\": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zu-za.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Ekuseni\",\n      \"Ntambama\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Msombuluko\",\n      \"Lwesibili\",\n      \"Lwesithathu\",\n      \"Lwesine\",\n      \"Lwesihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Januwari\",\n      \"Februwari\",\n      \"Mashi\",\n      \"Apreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Agasti\",\n      \"Septhemba\",\n      \"Okthoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mso\",\n      \"Bil\",\n      \"Tha\",\n      \"Sin\",\n      \"Hla\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mas\",\n      \"Apr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Aga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zu-za\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/angular-locale_zu.js",
    "content": "'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"Ekuseni\",\n      \"Ntambama\"\n    ],\n    \"DAY\": [\n      \"Sonto\",\n      \"Msombuluko\",\n      \"Lwesibili\",\n      \"Lwesithathu\",\n      \"Lwesine\",\n      \"Lwesihlanu\",\n      \"Mgqibelo\"\n    ],\n    \"MONTH\": [\n      \"Januwari\",\n      \"Februwari\",\n      \"Mashi\",\n      \"Apreli\",\n      \"Meyi\",\n      \"Juni\",\n      \"Julayi\",\n      \"Agasti\",\n      \"Septhemba\",\n      \"Okthoba\",\n      \"Novemba\",\n      \"Disemba\"\n    ],\n    \"SHORTDAY\": [\n      \"Son\",\n      \"Mso\",\n      \"Bil\",\n      \"Tha\",\n      \"Sin\",\n      \"Hla\",\n      \"Mgq\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mas\",\n      \"Apr\",\n      \"Mey\",\n      \"Jun\",\n      \"Jul\",\n      \"Aga\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dis\"\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"R\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"\\u00a4-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"zu\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n"
  },
  {
    "path": "client/components/angular-i18n/bower.json",
    "content": "{\n  \"name\": \"angular-i18n\",\n  \"version\": \"1.3.5\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"components\"\n  ]\n}\n"
  },
  {
    "path": "client/components/angular-i18n/package.json",
    "content": "{\n  \"name\": \"angular-i18n\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS module for internationalization\",\n  \"main\": \"angular-i18n.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"internationalization\",\n    \"i18n\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-messages/.bower.json",
    "content": "{\n  \"name\": \"angular-messages\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-messages.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-messages\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"37a8c732534b1ad3d912ff780d7682f14fd7befa\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-messages.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-messages\"\n}"
  },
  {
    "path": "client/components/angular-messages/README.md",
    "content": "# packaged angular-messages\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMessages).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-messages\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular-messages/angular-messages.js\"></script>\n```\n\nThen add `ngMessages` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngMessages']);\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular-messages')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-messages\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-messages/angular-messages.js\"></script>\n```\n\nThen add `ngMessages` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngMessages']);\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/api/ngMessages).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "client/components/angular-messages/angular-messages.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngMessages\n * @description\n *\n * The `ngMessages` module provides enhanced support for displaying messages within templates\n * (typically within forms or when rendering message objects that return key/value data).\n * Instead of relying on JavaScript code and/or complex ng-if statements within your form template to\n * show and hide error messages specific to the state of an input field, the `ngMessages` and\n * `ngMessage` directives are designed to handle the complexity, inheritance and priority\n * sequencing based on the order of how the messages are defined in the template.\n *\n * Currently, the ngMessages module only contains the code for the `ngMessages`\n * and `ngMessage` directives.\n *\n * # Usage\n * The `ngMessages` directive listens on a key/value collection which is set on the ngMessages attribute.\n * Since the {@link ngModel ngModel} directive exposes an `$error` object, this error object can be\n * used with `ngMessages` to display control error messages in an easier way than with just regular angular\n * template directives.\n *\n * ```html\n * <form name=\"myForm\">\n *   <input type=\"text\" ng-model=\"field\" name=\"myField\" required minlength=\"5\" />\n *   <div ng-messages=\"myForm.myField.$error\">\n *     <div ng-message=\"required\">You did not enter a field</div>\n *     <div ng-message=\"minlength\">The value entered is too short</div>\n *   </div>\n * </form>\n * ```\n *\n * Now whatever key/value entries are present within the provided object (in this case `$error`) then\n * the ngMessages directive will render the inner first ngMessage directive (depending if the key values\n * match the attribute value present on each ngMessage directive). In other words, if your errors\n * object contains the following data:\n *\n * ```javascript\n * <!-- keep in mind that ngModel automatically sets these error flags -->\n * myField.$error = { minlength : true, required : false };\n * ```\n *\n * Then the `required` message will be displayed first. When required is false then the `minlength` message\n * will be displayed right after (since these messages are ordered this way in the template HTML code).\n * The prioritization of each message is determined by what order they're present in the DOM.\n * Therefore, instead of having custom JavaScript code determine the priority of what errors are\n * present before others, the presentation of the errors are handled within the template.\n *\n * By default, ngMessages will only display one error at a time. However, if you wish to display all\n * messages then the `ng-messages-multiple` attribute flag can be used on the element containing the\n * ngMessages directive to make this happen.\n *\n * ```html\n * <div ng-messages=\"myForm.myField.$error\" ng-messages-multiple>...</div>\n * ```\n *\n * ## Reusing and Overriding Messages\n * In addition to prioritization, ngMessages also allows for including messages from a remote or an inline\n * template. This allows for generic collection of messages to be reused across multiple parts of an\n * application.\n *\n * ```html\n * <script type=\"text/ng-template\" id=\"error-messages\">\n *   <div ng-message=\"required\">This field is required</div>\n *   <div ng-message=\"minlength\">This field is too short</div>\n * </script>\n * <div ng-messages=\"myForm.myField.$error\" ng-messages-include=\"error-messages\"></div>\n * ```\n *\n * However, including generic messages may not be useful enough to match all input fields, therefore,\n * `ngMessages` provides the ability to override messages defined in the remote template by redefining\n * then within the directive container.\n *\n * ```html\n * <!-- a generic template of error messages known as \"my-custom-messages\" -->\n * <script type=\"text/ng-template\" id=\"my-custom-messages\">\n *   <div ng-message=\"required\">This field is required</div>\n *   <div ng-message=\"minlength\">This field is too short</div>\n * </script>\n *\n * <form name=\"myForm\">\n *   <input type=\"email\"\n *          id=\"email\"\n *          name=\"myEmail\"\n *          ng-model=\"email\"\n *          minlength=\"5\"\n *          required />\n *\n *   <div ng-messages=\"myForm.myEmail.$error\" ng-messages-include=\"my-custom-messages\">\n *     <!-- this required message has overridden the template message -->\n *     <div ng-message=\"required\">You did not enter your email address</div>\n *\n *     <!-- this is a brand new message and will appear last in the prioritization -->\n *     <div ng-message=\"email\">Your email address is invalid</div>\n *   </div>\n * </form>\n * ```\n *\n * In the example HTML code above the message that is set on required will override the corresponding\n * required message defined within the remote template. Therefore, with particular input fields (such\n * email addresses, date fields, autocomplete inputs, etc...), specialized error messages can be applied\n * while more generic messages can be used to handle other, more general input errors.\n *\n * ## Animations\n * If the `ngAnimate` module is active within the application then both the `ngMessages` and\n * `ngMessage` directives will trigger animations whenever any messages are added and removed\n * from the DOM by the `ngMessages` directive.\n *\n * Whenever the `ngMessages` directive contains one or more visible messages then the `.ng-active` CSS\n * class will be added to the element. The `.ng-inactive` CSS class will be applied when there are no\n * animations present. Therefore, CSS transitions and keyframes as well as JavaScript animations can\n * hook into the animations whenever these classes are added/removed.\n *\n * Let's say that our HTML code for our messages container looks like so:\n *\n * ```html\n * <div ng-messages=\"myMessages\" class=\"my-messages\">\n *   <div ng-message=\"alert\" class=\"some-message\">...</div>\n *   <div ng-message=\"fail\" class=\"some-message\">...</div>\n * </div>\n * ```\n *\n * Then the CSS animation code for the message container looks like so:\n *\n * ```css\n * .my-messages {\n *   transition:1s linear all;\n * }\n * .my-messages.ng-active {\n *   // messages are visible\n * }\n * .my-messages.ng-inactive {\n *   // messages are hidden\n * }\n * ```\n *\n * Whenever an inner message is attached (becomes visible) or removed (becomes hidden) then the enter\n * and leave animation is triggered for each particular element bound to the `ngMessage` directive.\n *\n * Therefore, the CSS code for the inner messages looks like so:\n *\n * ```css\n * .some-message {\n *   transition:1s linear all;\n * }\n *\n * .some-message.ng-enter {}\n * .some-message.ng-enter.ng-enter-active {}\n *\n * .some-message.ng-leave {}\n * .some-message.ng-leave.ng-leave-active {}\n * ```\n *\n * {@link ngAnimate Click here} to learn how to use JavaScript animations or to learn more about ngAnimate.\n */\nangular.module('ngMessages', [])\n\n   /**\n    * @ngdoc directive\n    * @module ngMessages\n    * @name ngMessages\n    * @restrict AE\n    *\n    * @description\n    * `ngMessages` is a directive that is designed to show and hide messages based on the state\n    * of a key/value object that it listens on. The directive itself compliments error message\n    * reporting with the `ngModel` $error object (which stores a key/value state of validation errors).\n    *\n    * `ngMessages` manages the state of internal messages within its container element. The internal\n    * messages use the `ngMessage` directive and will be inserted/removed from the page depending\n    * on if they're present within the key/value object. By default, only one message will be displayed\n    * at a time and this depends on the prioritization of the messages within the template. (This can\n    * be changed by using the ng-messages-multiple on the directive container.)\n    *\n    * A remote template can also be used to promote message reuseability and messages can also be\n    * overridden.\n    *\n    * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n    *\n    * @usage\n    * ```html\n    * <!-- using attribute directives -->\n    * <ANY ng-messages=\"expression\">\n    *   <ANY ng-message=\"keyValue1\">...</ANY>\n    *   <ANY ng-message=\"keyValue2\">...</ANY>\n    *   <ANY ng-message=\"keyValue3\">...</ANY>\n    * </ANY>\n    *\n    * <!-- or by using element directives -->\n    * <ng-messages for=\"expression\">\n    *   <ng-message when=\"keyValue1\">...</ng-message>\n    *   <ng-message when=\"keyValue2\">...</ng-message>\n    *   <ng-message when=\"keyValue3\">...</ng-message>\n    * </ng-messages>\n    * ```\n    *\n    * @param {string} ngMessages an angular expression evaluating to a key/value object\n    *                 (this is typically the $error object on an ngModel instance).\n    * @param {string=} ngMessagesMultiple|multiple when set, all messages will be displayed with true\n    * @param {string=} ngMessagesInclude|include when set, the specified template will be included into the ng-messages container\n    *\n    * @example\n    * <example name=\"ngMessages-directive\" module=\"ngMessagesExample\"\n    *          deps=\"angular-messages.js\"\n    *          animations=\"true\" fixBase=\"true\">\n    *   <file name=\"index.html\">\n    *     <form name=\"myForm\">\n    *       <label>Enter your name:</label>\n    *       <input type=\"text\"\n    *              name=\"myName\"\n    *              ng-model=\"name\"\n    *              ng-minlength=\"5\"\n    *              ng-maxlength=\"20\"\n    *              required />\n    *\n    *       <pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre>\n    *\n    *       <div ng-messages=\"myForm.myName.$error\" style=\"color:maroon\">\n    *         <div ng-message=\"required\">You did not enter a field</div>\n    *         <div ng-message=\"minlength\">Your field is too short</div>\n    *         <div ng-message=\"maxlength\">Your field is too long</div>\n    *       </div>\n    *     </form>\n    *   </file>\n    *   <file name=\"script.js\">\n    *     angular.module('ngMessagesExample', ['ngMessages']);\n    *   </file>\n    * </example>\n    */\n  .directive('ngMessages', ['$compile', '$animate', '$templateRequest',\n                   function($compile,    $animate,   $templateRequest) {\n    var ACTIVE_CLASS = 'ng-active';\n    var INACTIVE_CLASS = 'ng-inactive';\n\n    return {\n      restrict: 'AE',\n      controller: function() {\n        this.$renderNgMessageClasses = angular.noop;\n\n        var messages = [];\n        this.registerMessage = function(index, message) {\n          for (var i = 0; i < messages.length; i++) {\n            if (messages[i].type == message.type) {\n              if (index != i) {\n                var temp = messages[index];\n                messages[index] = messages[i];\n                if (index < messages.length) {\n                  messages[i] = temp;\n                } else {\n                  messages.splice(0, i); //remove the old one (and shift left)\n                }\n              }\n              return;\n            }\n          }\n          messages.splice(index, 0, message); //add the new one (and shift right)\n        };\n\n        this.renderMessages = function(values, multiple) {\n          values = values || {};\n\n          var found;\n          angular.forEach(messages, function(message) {\n            if ((!found || multiple) && truthyVal(values[message.type])) {\n              message.attach();\n              found = true;\n            } else {\n              message.detach();\n            }\n          });\n\n          this.renderElementClasses(found);\n\n          function truthyVal(value) {\n            return value !== null && value !== false && value;\n          }\n        };\n      },\n      require: 'ngMessages',\n      link: function($scope, element, $attrs, ctrl) {\n        ctrl.renderElementClasses = function(bool) {\n          bool ? $animate.setClass(element, ACTIVE_CLASS, INACTIVE_CLASS)\n               : $animate.setClass(element, INACTIVE_CLASS, ACTIVE_CLASS);\n        };\n\n        //JavaScript treats empty strings as false, but ng-message-multiple by itself is an empty string\n        var multiple = angular.isString($attrs.ngMessagesMultiple) ||\n                       angular.isString($attrs.multiple);\n\n        var cachedValues, watchAttr = $attrs.ngMessages || $attrs['for']; //for is a reserved keyword\n        $scope.$watchCollection(watchAttr, function(values) {\n          cachedValues = values;\n          ctrl.renderMessages(values, multiple);\n        });\n\n        var tpl = $attrs.ngMessagesInclude || $attrs.include;\n        if (tpl) {\n          $templateRequest(tpl)\n            .then(function processTemplate(html) {\n              var after, container = angular.element('<div/>').html(html);\n              angular.forEach(container.children(), function(elm) {\n               elm = angular.element(elm);\n               after ? after.after(elm)\n                     : element.prepend(elm); //start of the container\n               after = elm;\n               $compile(elm)($scope);\n              });\n              ctrl.renderMessages(cachedValues, multiple);\n            });\n        }\n      }\n    };\n  }])\n\n\n   /**\n    * @ngdoc directive\n    * @name ngMessage\n    * @restrict AE\n    * @scope\n    *\n    * @description\n    * `ngMessage` is a directive with the purpose to show and hide a particular message.\n    * For `ngMessage` to operate, a parent `ngMessages` directive on a parent DOM element\n    * must be situated since it determines which messages are visible based on the state\n    * of the provided key/value map that `ngMessages` listens on.\n    *\n    * @usage\n    * ```html\n    * <!-- using attribute directives -->\n    * <ANY ng-messages=\"expression\">\n    *   <ANY ng-message=\"keyValue1\">...</ANY>\n    *   <ANY ng-message=\"keyValue2\">...</ANY>\n    *   <ANY ng-message=\"keyValue3\">...</ANY>\n    * </ANY>\n    *\n    * <!-- or by using element directives -->\n    * <ng-messages for=\"expression\">\n    *   <ng-message when=\"keyValue1\">...</ng-message>\n    *   <ng-message when=\"keyValue2\">...</ng-message>\n    *   <ng-message when=\"keyValue3\">...</ng-message>\n    * </ng-messages>\n    * ```\n    *\n    * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n    *\n    * @param {string} ngMessage a string value corresponding to the message key.\n    */\n  .directive('ngMessage', ['$animate', function($animate) {\n    var COMMENT_NODE = 8;\n    return {\n      require: '^ngMessages',\n      transclude: 'element',\n      terminal: true,\n      restrict: 'AE',\n      link: function($scope, $element, $attrs, ngMessages, $transclude) {\n        var index, element;\n\n        var commentNode = $element[0];\n        var parentNode = commentNode.parentNode;\n        for (var i = 0, j = 0; i < parentNode.childNodes.length; i++) {\n          var node = parentNode.childNodes[i];\n          if (node.nodeType == COMMENT_NODE && node.nodeValue.indexOf('ngMessage') >= 0) {\n            if (node === commentNode) {\n              index = j;\n              break;\n            }\n            j++;\n          }\n        }\n\n        ngMessages.registerMessage(index, {\n          type: $attrs.ngMessage || $attrs.when,\n          attach: function() {\n            if (!element) {\n              $transclude($scope, function(clone) {\n                $animate.enter(clone, null, $element);\n                element = clone;\n              });\n            }\n          },\n          detach: function(now) {\n            if (element) {\n              $animate.leave(element);\n              element = null;\n            }\n          }\n        });\n      }\n    };\n  }]);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "client/components/angular-messages/bower.json",
    "content": "{\n  \"name\": \"angular-messages\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-messages.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  }\n}\n"
  },
  {
    "path": "client/components/angular-messages/package.json",
    "content": "{\n  \"name\": \"angular-messages\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS module that provides enhanced support for displaying messages within templates\",\n  \"main\": \"angular-messages.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-mocks/.bower.json",
    "content": "{\n  \"name\": \"angular-mocks\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-mocks.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-mocks\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"e5356ca3fa80f824ac7e3d9651156401e6bf2a38\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-mocks.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-mocks\"\n}"
  },
  {
    "path": "client/components/angular-mocks/README.md",
    "content": "# packaged angular-mocks\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-mocks\n```\n\nThe mocks are then available at `node_modules/angular-mocks/angular-mocks.js`.\n\nNote that this package is not in CommonJS format, so doing `require('angular-mocks')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-mocks\n```\n\nThe mocks are then available at `bower_components/angular-mocks/angular-mocks.js`.\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](https://docs.angularjs.org/guide/unit-testing).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-mocks/angular-mocks.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {\n\n'use strict';\n\n/**\n * @ngdoc object\n * @name angular.mock\n * @description\n *\n * Namespace from 'angular-mocks.js' which contains testing related code.\n */\nangular.mock = {};\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n *\n * @description\n * This service is a mock implementation of {@link ng.$browser}. It provides fake\n * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,\n * cookies, etc...\n *\n * The api of this service is the same as that of the real {@link ng.$browser $browser}, except\n * that there are several helper methods available which can be used in tests.\n */\nangular.mock.$BrowserProvider = function() {\n  this.$get = function() {\n    return new angular.mock.$Browser();\n  };\n};\n\nangular.mock.$Browser = function() {\n  var self = this;\n\n  this.isMock = true;\n  self.$$url = \"http://server/\";\n  self.$$lastUrl = self.$$url; // used by url polling fn\n  self.pollFns = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = angular.noop;\n  self.$$incOutstandingRequestCount = angular.noop;\n\n\n  // register url polling fn\n\n  self.onUrlChange = function(listener) {\n    self.pollFns.push(\n      function() {\n        if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) {\n          self.$$lastUrl = self.$$url;\n          self.$$lastState = self.$$state;\n          listener(self.$$url, self.$$state);\n        }\n      }\n    );\n\n    return listener;\n  };\n\n  self.$$checkUrlChange = angular.noop;\n\n  self.cookieHash = {};\n  self.lastCookieHash = {};\n  self.deferredFns = [];\n  self.deferredNextId = 0;\n\n  self.defer = function(fn, delay) {\n    delay = delay || 0;\n    self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});\n    self.deferredFns.sort(function(a, b) { return a.time - b.time;});\n    return self.deferredNextId++;\n  };\n\n\n  /**\n   * @name $browser#defer.now\n   *\n   * @description\n   * Current milliseconds mock time.\n   */\n  self.defer.now = 0;\n\n\n  self.defer.cancel = function(deferId) {\n    var fnIndex;\n\n    angular.forEach(self.deferredFns, function(fn, index) {\n      if (fn.id === deferId) fnIndex = index;\n    });\n\n    if (fnIndex !== undefined) {\n      self.deferredFns.splice(fnIndex, 1);\n      return true;\n    }\n\n    return false;\n  };\n\n\n  /**\n   * @name $browser#defer.flush\n   *\n   * @description\n   * Flushes all pending requests and executes the defer callbacks.\n   *\n   * @param {number=} number of milliseconds to flush. See {@link #defer.now}\n   */\n  self.defer.flush = function(delay) {\n    if (angular.isDefined(delay)) {\n      self.defer.now += delay;\n    } else {\n      if (self.deferredFns.length) {\n        self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;\n      } else {\n        throw new Error('No deferred tasks to be flushed');\n      }\n    }\n\n    while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {\n      self.deferredFns.shift().fn();\n    }\n  };\n\n  self.$$baseHref = '/';\n  self.baseHref = function() {\n    return this.$$baseHref;\n  };\n};\nangular.mock.$Browser.prototype = {\n\n/**\n  * @name $browser#poll\n  *\n  * @description\n  * run all fns in pollFns\n  */\n  poll: function poll() {\n    angular.forEach(this.pollFns, function(pollFn) {\n      pollFn();\n    });\n  },\n\n  addPollFn: function(pollFn) {\n    this.pollFns.push(pollFn);\n    return pollFn;\n  },\n\n  url: function(url, replace, state) {\n    if (angular.isUndefined(state)) {\n      state = null;\n    }\n    if (url) {\n      this.$$url = url;\n      // Native pushState serializes & copies the object; simulate it.\n      this.$$state = angular.copy(state);\n      return this;\n    }\n\n    return this.$$url;\n  },\n\n  state: function() {\n    return this.$$state;\n  },\n\n  cookies:  function(name, value) {\n    if (name) {\n      if (angular.isUndefined(value)) {\n        delete this.cookieHash[name];\n      } else {\n        if (angular.isString(value) &&       //strings only\n            value.length <= 4096) {          //strict cookie storage limits\n          this.cookieHash[name] = value;\n        }\n      }\n    } else {\n      if (!angular.equals(this.cookieHash, this.lastCookieHash)) {\n        this.lastCookieHash = angular.copy(this.cookieHash);\n        this.cookieHash = angular.copy(this.cookieHash);\n      }\n      return this.cookieHash;\n    }\n  },\n\n  notifyWhenNoOutstandingRequests: function(fn) {\n    fn();\n  }\n};\n\n\n/**\n * @ngdoc provider\n * @name $exceptionHandlerProvider\n *\n * @description\n * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors\n * passed to the `$exceptionHandler`.\n */\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n *\n * @description\n * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed\n * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration\n * information.\n *\n *\n * ```js\n *   describe('$exceptionHandlerProvider', function() {\n *\n *     it('should capture log messages and exceptions', function() {\n *\n *       module(function($exceptionHandlerProvider) {\n *         $exceptionHandlerProvider.mode('log');\n *       });\n *\n *       inject(function($log, $exceptionHandler, $timeout) {\n *         $timeout(function() { $log.log(1); });\n *         $timeout(function() { $log.log(2); throw 'banana peel'; });\n *         $timeout(function() { $log.log(3); });\n *         expect($exceptionHandler.errors).toEqual([]);\n *         expect($log.assertEmpty());\n *         $timeout.flush();\n *         expect($exceptionHandler.errors).toEqual(['banana peel']);\n *         expect($log.log.logs).toEqual([[1], [2], [3]]);\n *       });\n *     });\n *   });\n * ```\n */\n\nangular.mock.$ExceptionHandlerProvider = function() {\n  var handler;\n\n  /**\n   * @ngdoc method\n   * @name $exceptionHandlerProvider#mode\n   *\n   * @description\n   * Sets the logging mode.\n   *\n   * @param {string} mode Mode of operation, defaults to `rethrow`.\n   *\n   *   - `rethrow`: If any errors are passed to the handler in tests, it typically means that there\n   *                is a bug in the application or test, so this mock will make these tests fail.\n   *   - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`\n   *            mode stores an array of errors in `$exceptionHandler.errors`, to allow later\n   *            assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and\n   *            {@link ngMock.$log#reset reset()}\n   */\n  this.mode = function(mode) {\n    switch (mode) {\n      case 'rethrow':\n        handler = function(e) {\n          throw e;\n        };\n        break;\n      case 'log':\n        var errors = [];\n\n        handler = function(e) {\n          if (arguments.length == 1) {\n            errors.push(e);\n          } else {\n            errors.push([].slice.call(arguments, 0));\n          }\n        };\n\n        handler.errors = errors;\n        break;\n      default:\n        throw new Error(\"Unknown mode '\" + mode + \"', only 'log'/'rethrow' modes are allowed!\");\n    }\n  };\n\n  this.$get = function() {\n    return handler;\n  };\n\n  this.mode('rethrow');\n};\n\n\n/**\n * @ngdoc service\n * @name $log\n *\n * @description\n * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays\n * (one array per logging level). These arrays are exposed as `logs` property of each of the\n * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.\n *\n */\nangular.mock.$LogProvider = function() {\n  var debug = true;\n\n  function concat(array1, array2, index) {\n    return array1.concat(Array.prototype.slice.call(array2, index));\n  }\n\n  this.debugEnabled = function(flag) {\n    if (angular.isDefined(flag)) {\n      debug = flag;\n      return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = function() {\n    var $log = {\n      log: function() { $log.log.logs.push(concat([], arguments, 0)); },\n      warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },\n      info: function() { $log.info.logs.push(concat([], arguments, 0)); },\n      error: function() { $log.error.logs.push(concat([], arguments, 0)); },\n      debug: function() {\n        if (debug) {\n          $log.debug.logs.push(concat([], arguments, 0));\n        }\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $log#reset\n     *\n     * @description\n     * Reset all of the logging arrays to empty.\n     */\n    $log.reset = function() {\n      /**\n       * @ngdoc property\n       * @name $log#log.logs\n       *\n       * @description\n       * Array of messages logged using {@link ng.$log#log `log()`}.\n       *\n       * @example\n       * ```js\n       * $log.log('Some Log');\n       * var first = $log.log.logs.unshift();\n       * ```\n       */\n      $log.log.logs = [];\n      /**\n       * @ngdoc property\n       * @name $log#info.logs\n       *\n       * @description\n       * Array of messages logged using {@link ng.$log#info `info()`}.\n       *\n       * @example\n       * ```js\n       * $log.info('Some Info');\n       * var first = $log.info.logs.unshift();\n       * ```\n       */\n      $log.info.logs = [];\n      /**\n       * @ngdoc property\n       * @name $log#warn.logs\n       *\n       * @description\n       * Array of messages logged using {@link ng.$log#warn `warn()`}.\n       *\n       * @example\n       * ```js\n       * $log.warn('Some Warning');\n       * var first = $log.warn.logs.unshift();\n       * ```\n       */\n      $log.warn.logs = [];\n      /**\n       * @ngdoc property\n       * @name $log#error.logs\n       *\n       * @description\n       * Array of messages logged using {@link ng.$log#error `error()`}.\n       *\n       * @example\n       * ```js\n       * $log.error('Some Error');\n       * var first = $log.error.logs.unshift();\n       * ```\n       */\n      $log.error.logs = [];\n        /**\n       * @ngdoc property\n       * @name $log#debug.logs\n       *\n       * @description\n       * Array of messages logged using {@link ng.$log#debug `debug()`}.\n       *\n       * @example\n       * ```js\n       * $log.debug('Some Error');\n       * var first = $log.debug.logs.unshift();\n       * ```\n       */\n      $log.debug.logs = [];\n    };\n\n    /**\n     * @ngdoc method\n     * @name $log#assertEmpty\n     *\n     * @description\n     * Assert that all of the logging methods have no logged messages. If any messages are present,\n     * an exception is thrown.\n     */\n    $log.assertEmpty = function() {\n      var errors = [];\n      angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {\n        angular.forEach($log[logLevel].logs, function(log) {\n          angular.forEach(log, function(logItem) {\n            errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\\n' +\n                        (logItem.stack || ''));\n          });\n        });\n      });\n      if (errors.length) {\n        errors.unshift(\"Expected $log to be empty! Either a message was logged unexpectedly, or \" +\n          \"an expected log message was not checked and removed:\");\n        errors.push('');\n        throw new Error(errors.join('\\n---------\\n'));\n      }\n    };\n\n    $log.reset();\n    return $log;\n  };\n};\n\n\n/**\n * @ngdoc service\n * @name $interval\n *\n * @description\n * Mock implementation of the $interval service.\n *\n * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n * time.\n *\n * @param {function()} fn A function that should be called repeatedly.\n * @param {number} delay Number of milliseconds between each function call.\n * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n *   indefinitely.\n * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n * @returns {promise} A promise which will be notified on each iteration.\n */\nangular.mock.$IntervalProvider = function() {\n  this.$get = ['$browser', '$rootScope', '$q', '$$q',\n       function($browser,   $rootScope,   $q,   $$q) {\n    var repeatFns = [],\n        nextRepeatId = 0,\n        now = 0;\n\n    var $interval = function(fn, delay, count, invokeApply) {\n      var iteration = 0,\n          skipApply = (angular.isDefined(invokeApply) && !invokeApply),\n          deferred = (skipApply ? $$q : $q).defer(),\n          promise = deferred.promise;\n\n      count = (angular.isDefined(count)) ? count : 0;\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = nextRepeatId;\n\n      function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          var fnIndex;\n          deferred.resolve(iteration);\n\n          angular.forEach(repeatFns, function(fn, index) {\n            if (fn.id === promise.$$intervalId) fnIndex = index;\n          });\n\n          if (fnIndex !== undefined) {\n            repeatFns.splice(fnIndex, 1);\n          }\n        }\n\n        if (skipApply) {\n          $browser.defer.flush();\n        } else {\n          $rootScope.$apply();\n        }\n      }\n\n      repeatFns.push({\n        nextTime:(now + delay),\n        delay: delay,\n        fn: tick,\n        id: nextRepeatId,\n        deferred: deferred\n      });\n      repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});\n\n      nextRepeatId++;\n      return promise;\n    };\n    /**\n     * @ngdoc method\n     * @name $interval#cancel\n     *\n     * @description\n     * Cancels a task associated with the `promise`.\n     *\n     * @param {promise} promise A promise from calling the `$interval` function.\n     * @returns {boolean} Returns `true` if the task was successfully cancelled.\n     */\n    $interval.cancel = function(promise) {\n      if (!promise) return false;\n      var fnIndex;\n\n      angular.forEach(repeatFns, function(fn, index) {\n        if (fn.id === promise.$$intervalId) fnIndex = index;\n      });\n\n      if (fnIndex !== undefined) {\n        repeatFns[fnIndex].deferred.reject('canceled');\n        repeatFns.splice(fnIndex, 1);\n        return true;\n      }\n\n      return false;\n    };\n\n    /**\n     * @ngdoc method\n     * @name $interval#flush\n     * @description\n     *\n     * Runs interval tasks scheduled to be run in the next `millis` milliseconds.\n     *\n     * @param {number=} millis maximum timeout amount to flush up until.\n     *\n     * @return {number} The amount of time moved forward.\n     */\n    $interval.flush = function(millis) {\n      now += millis;\n      while (repeatFns.length && repeatFns[0].nextTime <= now) {\n        var task = repeatFns[0];\n        task.fn();\n        task.nextTime += task.delay;\n        repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});\n      }\n      return millis;\n    };\n\n    return $interval;\n  }];\n};\n\n\n/* jshint -W101 */\n/* The R_ISO8061_STR regex is never going to fit into the 100 char limit!\n * This directive should go inside the anonymous function but a bug in JSHint means that it would\n * not be enacted early enough to prevent the warning.\n */\nvar R_ISO8061_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?:\\:?(\\d\\d)(?:\\:?(\\d\\d)(?:\\.(\\d{3}))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d)))?$/;\n\nfunction jsonStringToDate(string) {\n  var match;\n  if (match = string.match(R_ISO8061_STR)) {\n    var date = new Date(0),\n        tzHour = 0,\n        tzMin  = 0;\n    if (match[9]) {\n      tzHour = int(match[9] + match[10]);\n      tzMin = int(match[9] + match[11]);\n    }\n    date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));\n    date.setUTCHours(int(match[4] || 0) - tzHour,\n                     int(match[5] || 0) - tzMin,\n                     int(match[6] || 0),\n                     int(match[7] || 0));\n    return date;\n  }\n  return string;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while (num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\n/**\n * @ngdoc type\n * @name angular.mock.TzDate\n * @description\n *\n * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.\n *\n * Mock of the Date type which has its timezone specified via constructor arg.\n *\n * The main purpose is to create Date-like instances with timezone fixed to the specified timezone\n * offset, so that we can test code that depends on local timezone settings without dependency on\n * the time zone settings of the machine where the code is running.\n *\n * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)\n * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*\n *\n * @example\n * !!!! WARNING !!!!!\n * This is not a complete Date object so only methods that were implemented can be called safely.\n * To make matters worse, TzDate instances inherit stuff from Date via a prototype.\n *\n * We do our best to intercept calls to \"unimplemented\" methods, but since the list of methods is\n * incomplete we might be missing some non-standard methods. This can result in errors like:\n * \"Date.prototype.foo called on incompatible Object\".\n *\n * ```js\n * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');\n * newYearInBratislava.getTimezoneOffset() => -60;\n * newYearInBratislava.getFullYear() => 2010;\n * newYearInBratislava.getMonth() => 0;\n * newYearInBratislava.getDate() => 1;\n * newYearInBratislava.getHours() => 0;\n * newYearInBratislava.getMinutes() => 0;\n * newYearInBratislava.getSeconds() => 0;\n * ```\n *\n */\nangular.mock.TzDate = function(offset, timestamp) {\n  var self = new Date(0);\n  if (angular.isString(timestamp)) {\n    var tsStr = timestamp;\n\n    self.origDate = jsonStringToDate(timestamp);\n\n    timestamp = self.origDate.getTime();\n    if (isNaN(timestamp))\n      throw {\n        name: \"Illegal Argument\",\n        message: \"Arg '\" + tsStr + \"' passed into TzDate constructor is not a valid date string\"\n      };\n  } else {\n    self.origDate = new Date(timestamp);\n  }\n\n  var localOffset = new Date(timestamp).getTimezoneOffset();\n  self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;\n  self.date = new Date(timestamp + self.offsetDiff);\n\n  self.getTime = function() {\n    return self.date.getTime() - self.offsetDiff;\n  };\n\n  self.toLocaleDateString = function() {\n    return self.date.toLocaleDateString();\n  };\n\n  self.getFullYear = function() {\n    return self.date.getFullYear();\n  };\n\n  self.getMonth = function() {\n    return self.date.getMonth();\n  };\n\n  self.getDate = function() {\n    return self.date.getDate();\n  };\n\n  self.getHours = function() {\n    return self.date.getHours();\n  };\n\n  self.getMinutes = function() {\n    return self.date.getMinutes();\n  };\n\n  self.getSeconds = function() {\n    return self.date.getSeconds();\n  };\n\n  self.getMilliseconds = function() {\n    return self.date.getMilliseconds();\n  };\n\n  self.getTimezoneOffset = function() {\n    return offset * 60;\n  };\n\n  self.getUTCFullYear = function() {\n    return self.origDate.getUTCFullYear();\n  };\n\n  self.getUTCMonth = function() {\n    return self.origDate.getUTCMonth();\n  };\n\n  self.getUTCDate = function() {\n    return self.origDate.getUTCDate();\n  };\n\n  self.getUTCHours = function() {\n    return self.origDate.getUTCHours();\n  };\n\n  self.getUTCMinutes = function() {\n    return self.origDate.getUTCMinutes();\n  };\n\n  self.getUTCSeconds = function() {\n    return self.origDate.getUTCSeconds();\n  };\n\n  self.getUTCMilliseconds = function() {\n    return self.origDate.getUTCMilliseconds();\n  };\n\n  self.getDay = function() {\n    return self.date.getDay();\n  };\n\n  // provide this method only on browsers that already have it\n  if (self.toISOString) {\n    self.toISOString = function() {\n      return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +\n            padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +\n            padNumber(self.origDate.getUTCDate(), 2) + 'T' +\n            padNumber(self.origDate.getUTCHours(), 2) + ':' +\n            padNumber(self.origDate.getUTCMinutes(), 2) + ':' +\n            padNumber(self.origDate.getUTCSeconds(), 2) + '.' +\n            padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';\n    };\n  }\n\n  //hide all methods not implemented in this mock that the Date prototype exposes\n  var unimplementedMethods = ['getUTCDay',\n      'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',\n      'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',\n      'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',\n      'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',\n      'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];\n\n  angular.forEach(unimplementedMethods, function(methodName) {\n    self[methodName] = function() {\n      throw new Error(\"Method '\" + methodName + \"' is not implemented in the TzDate mock\");\n    };\n  });\n\n  return self;\n};\n\n//make \"tzDateInstance instanceof Date\" return true\nangular.mock.TzDate.prototype = Date.prototype;\n/* jshint +W101 */\n\nangular.mock.animate = angular.module('ngAnimateMock', ['ng'])\n\n  .config(['$provide', function($provide) {\n\n    var reflowQueue = [];\n    $provide.value('$$animateReflow', function(fn) {\n      var index = reflowQueue.length;\n      reflowQueue.push(fn);\n      return function cancel() {\n        reflowQueue.splice(index, 1);\n      };\n    });\n\n    $provide.decorator('$animate', ['$delegate', '$$asyncCallback', '$timeout', '$browser',\n                            function($delegate,   $$asyncCallback,   $timeout,   $browser) {\n      var animate = {\n        queue: [],\n        cancel: $delegate.cancel,\n        enabled: $delegate.enabled,\n        triggerCallbackEvents: function() {\n          $$asyncCallback.flush();\n        },\n        triggerCallbackPromise: function() {\n          $timeout.flush(0);\n        },\n        triggerCallbacks: function() {\n          this.triggerCallbackEvents();\n          this.triggerCallbackPromise();\n        },\n        triggerReflow: function() {\n          angular.forEach(reflowQueue, function(fn) {\n            fn();\n          });\n          reflowQueue = [];\n        }\n      };\n\n      angular.forEach(\n        ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) {\n        animate[method] = function() {\n          animate.queue.push({\n            event: method,\n            element: arguments[0],\n            options: arguments[arguments.length - 1],\n            args: arguments\n          });\n          return $delegate[method].apply($delegate, arguments);\n        };\n      });\n\n      return animate;\n    }]);\n\n  }]);\n\n\n/**\n * @ngdoc function\n * @name angular.mock.dump\n * @description\n *\n * *NOTE*: this is not an injectable instance, just a globally available function.\n *\n * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for\n * debugging.\n *\n * This method is also available on window, where it can be used to display objects on debug\n * console.\n *\n * @param {*} object - any object to turn into string.\n * @return {string} a serialized string of the argument\n */\nangular.mock.dump = function(object) {\n  return serialize(object);\n\n  function serialize(object) {\n    var out;\n\n    if (angular.isElement(object)) {\n      object = angular.element(object);\n      out = angular.element('<div></div>');\n      angular.forEach(object, function(element) {\n        out.append(angular.element(element).clone());\n      });\n      out = out.html();\n    } else if (angular.isArray(object)) {\n      out = [];\n      angular.forEach(object, function(o) {\n        out.push(serialize(o));\n      });\n      out = '[ ' + out.join(', ') + ' ]';\n    } else if (angular.isObject(object)) {\n      if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {\n        out = serializeScope(object);\n      } else if (object instanceof Error) {\n        out = object.stack || ('' + object.name + ': ' + object.message);\n      } else {\n        // TODO(i): this prevents methods being logged,\n        // we should have a better way to serialize objects\n        out = angular.toJson(object, true);\n      }\n    } else {\n      out = String(object);\n    }\n\n    return out;\n  }\n\n  function serializeScope(scope, offset) {\n    offset = offset ||  '  ';\n    var log = [offset + 'Scope(' + scope.$id + '): {'];\n    for (var key in scope) {\n      if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\\$|this)/)) {\n        log.push('  ' + key + ': ' + angular.toJson(scope[key]));\n      }\n    }\n    var child = scope.$$childHead;\n    while (child) {\n      log.push(serializeScope(child, offset + '  '));\n      child = child.$$nextSibling;\n    }\n    log.push('}');\n    return log.join('\\n' + offset);\n  }\n};\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @description\n * Fake HTTP backend implementation suitable for unit testing applications that use the\n * {@link ng.$http $http service}.\n *\n * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less\n * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.\n *\n * During unit testing, we want our unit tests to run quickly and have no external dependencies so\n * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or\n * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is\n * to verify whether a certain request has been sent or not, or alternatively just let the\n * application make requests, respond with pre-trained responses and assert that the end result is\n * what we expect it to be.\n *\n * This mock implementation can be used to respond with static or dynamic responses via the\n * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).\n *\n * When an Angular application needs some data from a server, it calls the $http service, which\n * sends the request to a real server using $httpBackend service. With dependency injection, it is\n * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify\n * the requests and respond with some testing data without sending a request to a real server.\n *\n * There are two ways to specify what test data should be returned as http responses by the mock\n * backend when the code under test makes http requests:\n *\n * - `$httpBackend.expect` - specifies a request expectation\n * - `$httpBackend.when` - specifies a backend definition\n *\n *\n * # Request Expectations vs Backend Definitions\n *\n * Request expectations provide a way to make assertions about requests made by the application and\n * to define responses for those requests. The test will fail if the expected requests are not made\n * or they are made in the wrong order.\n *\n * Backend definitions allow you to define a fake backend for your application which doesn't assert\n * if a particular request was made or not, it just returns a trained response if a request is made.\n * The test will pass whether or not the request gets made during testing.\n *\n *\n * <table class=\"table\">\n *   <tr><th width=\"220px\"></th><th>Request expectations</th><th>Backend definitions</th></tr>\n *   <tr>\n *     <th>Syntax</th>\n *     <td>.expect(...).respond(...)</td>\n *     <td>.when(...).respond(...)</td>\n *   </tr>\n *   <tr>\n *     <th>Typical usage</th>\n *     <td>strict unit tests</td>\n *     <td>loose (black-box) unit testing</td>\n *   </tr>\n *   <tr>\n *     <th>Fulfills multiple requests</th>\n *     <td>NO</td>\n *     <td>YES</td>\n *   </tr>\n *   <tr>\n *     <th>Order of requests matters</th>\n *     <td>YES</td>\n *     <td>NO</td>\n *   </tr>\n *   <tr>\n *     <th>Request required</th>\n *     <td>YES</td>\n *     <td>NO</td>\n *   </tr>\n *   <tr>\n *     <th>Response required</th>\n *     <td>optional (see below)</td>\n *     <td>YES</td>\n *   </tr>\n * </table>\n *\n * In cases where both backend definitions and request expectations are specified during unit\n * testing, the request expectations are evaluated first.\n *\n * If a request expectation has no response specified, the algorithm will search your backend\n * definitions for an appropriate response.\n *\n * If a request didn't match any expectation or if the expectation doesn't have the response\n * defined, the backend definitions are evaluated in sequential order to see if any of them match\n * the request. The response from the first matched definition is returned.\n *\n *\n * # Flushing HTTP requests\n *\n * The $httpBackend used in production always responds to requests asynchronously. If we preserved\n * this behavior in unit testing, we'd have to create async unit tests, which are hard to write,\n * to follow and to maintain. But neither can the testing mock respond synchronously; that would\n * change the execution of the code under test. For this reason, the mock $httpBackend has a\n * `flush()` method, which allows the test to explicitly flush pending requests. This preserves\n * the async api of the backend, while allowing the test to execute synchronously.\n *\n *\n * # Unit testing with mock $httpBackend\n * The following code shows how to setup and use the mock backend when unit testing a controller.\n * First we create the controller under test:\n *\n  ```js\n  // The module code\n  angular\n    .module('MyApp', [])\n    .controller('MyController', MyController);\n\n  // The controller code\n  function MyController($scope, $http) {\n    var authToken;\n\n    $http.get('/auth.py').success(function(data, status, headers) {\n      authToken = headers('A-Token');\n      $scope.user = data;\n    });\n\n    $scope.saveMessage = function(message) {\n      var headers = { 'Authorization': authToken };\n      $scope.status = 'Saving...';\n\n      $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {\n        $scope.status = '';\n      }).error(function() {\n        $scope.status = 'ERROR!';\n      });\n    };\n  }\n  ```\n *\n * Now we setup the mock backend and create the test specs:\n *\n  ```js\n    // testing controller\n    describe('MyController', function() {\n       var $httpBackend, $rootScope, createController, authRequestHandler;\n\n       // Set up the module\n       beforeEach(module('MyApp'));\n\n       beforeEach(inject(function($injector) {\n         // Set up the mock http service responses\n         $httpBackend = $injector.get('$httpBackend');\n         // backend definition common for all tests\n         authRequestHandler = $httpBackend.when('GET', '/auth.py')\n                                .respond({userId: 'userX'}, {'A-Token': 'xxx'});\n\n         // Get hold of a scope (i.e. the root scope)\n         $rootScope = $injector.get('$rootScope');\n         // The $controller service is used to create instances of controllers\n         var $controller = $injector.get('$controller');\n\n         createController = function() {\n           return $controller('MyController', {'$scope' : $rootScope });\n         };\n       }));\n\n\n       afterEach(function() {\n         $httpBackend.verifyNoOutstandingExpectation();\n         $httpBackend.verifyNoOutstandingRequest();\n       });\n\n\n       it('should fetch authentication token', function() {\n         $httpBackend.expectGET('/auth.py');\n         var controller = createController();\n         $httpBackend.flush();\n       });\n\n\n       it('should fail authentication', function() {\n\n         // Notice how you can change the response even after it was set\n         authRequestHandler.respond(401, '');\n\n         $httpBackend.expectGET('/auth.py');\n         var controller = createController();\n         $httpBackend.flush();\n         expect($rootScope.status).toBe('Failed...');\n       });\n\n\n       it('should send msg to server', function() {\n         var controller = createController();\n         $httpBackend.flush();\n\n         // now you don’t care about the authentication, but\n         // the controller will still send the request and\n         // $httpBackend will respond without you having to\n         // specify the expectation and response for this request\n\n         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');\n         $rootScope.saveMessage('message content');\n         expect($rootScope.status).toBe('Saving...');\n         $httpBackend.flush();\n         expect($rootScope.status).toBe('');\n       });\n\n\n       it('should send auth header', function() {\n         var controller = createController();\n         $httpBackend.flush();\n\n         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {\n           // check if the header was send, if it wasn't the expectation won't\n           // match the request and the test will fail\n           return headers['Authorization'] == 'xxx';\n         }).respond(201, '');\n\n         $rootScope.saveMessage('whatever');\n         $httpBackend.flush();\n       });\n    });\n   ```\n */\nangular.mock.$HttpBackendProvider = function() {\n  this.$get = ['$rootScope', createHttpBackendMock];\n};\n\n/**\n * General factory function for $httpBackend mock.\n * Returns instance for unit testing (when no arguments specified):\n *   - passing through is disabled\n *   - auto flushing is disabled\n *\n * Returns instance for e2e testing (when `$delegate` and `$browser` specified):\n *   - passing through (delegating request to real backend) is enabled\n *   - auto flushing is enabled\n *\n * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)\n * @param {Object=} $browser Auto-flushing enabled if specified\n * @return {Object} Instance of $httpBackend mock\n */\nfunction createHttpBackendMock($rootScope, $delegate, $browser) {\n  var definitions = [],\n      expectations = [],\n      responses = [],\n      responsesPush = angular.bind(responses, responses.push),\n      copy = angular.copy;\n\n  function createResponse(status, data, headers, statusText) {\n    if (angular.isFunction(status)) return status;\n\n    return function() {\n      return angular.isNumber(status)\n          ? [status, data, headers, statusText]\n          : [200, status, data, headers];\n    };\n  }\n\n  // TODO(vojta): change params to: method, url, data, headers, callback\n  function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) {\n    var xhr = new MockXhr(),\n        expectation = expectations[0],\n        wasExpected = false;\n\n    function prettyPrint(data) {\n      return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)\n          ? data\n          : angular.toJson(data);\n    }\n\n    function wrapResponse(wrapped) {\n      if (!$browser && timeout && timeout.then) timeout.then(handleTimeout);\n\n      return handleResponse;\n\n      function handleResponse() {\n        var response = wrapped.response(method, url, data, headers);\n        xhr.$$respHeaders = response[2];\n        callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),\n                 copy(response[3] || ''));\n      }\n\n      function handleTimeout() {\n        for (var i = 0, ii = responses.length; i < ii; i++) {\n          if (responses[i] === handleResponse) {\n            responses.splice(i, 1);\n            callback(-1, undefined, '');\n            break;\n          }\n        }\n      }\n    }\n\n    if (expectation && expectation.match(method, url)) {\n      if (!expectation.matchData(data))\n        throw new Error('Expected ' + expectation + ' with different data\\n' +\n            'EXPECTED: ' + prettyPrint(expectation.data) + '\\nGOT:      ' + data);\n\n      if (!expectation.matchHeaders(headers))\n        throw new Error('Expected ' + expectation + ' with different headers\\n' +\n                        'EXPECTED: ' + prettyPrint(expectation.headers) + '\\nGOT:      ' +\n                        prettyPrint(headers));\n\n      expectations.shift();\n\n      if (expectation.response) {\n        responses.push(wrapResponse(expectation));\n        return;\n      }\n      wasExpected = true;\n    }\n\n    var i = -1, definition;\n    while ((definition = definitions[++i])) {\n      if (definition.match(method, url, data, headers || {})) {\n        if (definition.response) {\n          // if $browser specified, we do auto flush all requests\n          ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));\n        } else if (definition.passThrough) {\n          $delegate(method, url, data, callback, headers, timeout, withCredentials);\n        } else throw new Error('No response defined !');\n        return;\n      }\n    }\n    throw wasExpected ?\n        new Error('No response defined !') :\n        new Error('Unexpected request: ' + method + ' ' + url + '\\n' +\n                  (expectation ? 'Expected ' + expectation : 'No more request expected'));\n  }\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#when\n   * @description\n   * Creates a new backend definition.\n   *\n   * @param {string} method HTTP method.\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives\n   *   data string and returns true if the data is as expected.\n   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header\n   *   object and returns true if the headers match the current definition.\n   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   *\n   *  - respond –\n   *      `{function([status,] data[, headers, statusText])\n   *      | function(function(method, url, data, headers)}`\n   *    – The respond method takes a set of static data to be returned or a function that can\n   *    return an array containing response status (number), response data (string), response\n   *    headers (Object), and the text for the status (string). The respond method returns the\n   *    `requestHandler` object for possible overrides.\n   */\n  $httpBackend.when = function(method, url, data, headers) {\n    var definition = new MockHttpExpectation(method, url, data, headers),\n        chain = {\n          respond: function(status, data, headers, statusText) {\n            definition.passThrough = undefined;\n            definition.response = createResponse(status, data, headers, statusText);\n            return chain;\n          }\n        };\n\n    if ($browser) {\n      chain.passThrough = function() {\n        definition.response = undefined;\n        definition.passThrough = true;\n        return chain;\n      };\n    }\n\n    definitions.push(definition);\n    return chain;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenGET\n   * @description\n   * Creates a new backend definition for GET requests. For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(Object|function(Object))=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenHEAD\n   * @description\n   * Creates a new backend definition for HEAD requests. For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(Object|function(Object))=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenDELETE\n   * @description\n   * Creates a new backend definition for DELETE requests. For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(Object|function(Object))=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenPOST\n   * @description\n   * Creates a new backend definition for POST requests. For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives\n   *   data string and returns true if the data is as expected.\n   * @param {(Object|function(Object))=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenPUT\n   * @description\n   * Creates a new backend definition for PUT requests.  For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives\n   *   data string and returns true if the data is as expected.\n   * @param {(Object|function(Object))=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#whenJSONP\n   * @description\n   * Creates a new backend definition for JSONP requests. For more info see `when()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled.\n   */\n  createShortMethods('when');\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expect\n   * @description\n   * Creates a new request expectation.\n   *\n   * @param {string} method HTTP method.\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that\n   *  receives data string and returns true if the data is as expected, or Object if request body\n   *  is in JSON format.\n   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header\n   *   object and returns true if the headers match the current expectation.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *  request is handled. You can save this object for later use and invoke `respond` again in\n   *  order to change how a matched request is handled.\n   *\n   *  - respond –\n   *    `{function([status,] data[, headers, statusText])\n   *    | function(function(method, url, data, headers)}`\n   *    – The respond method takes a set of static data to be returned or a function that can\n   *    return an array containing response status (number), response data (string), response\n   *    headers (Object), and the text for the status (string). The respond method returns the\n   *    `requestHandler` object for possible overrides.\n   */\n  $httpBackend.expect = function(method, url, data, headers) {\n    var expectation = new MockHttpExpectation(method, url, data, headers),\n        chain = {\n          respond: function(status, data, headers, statusText) {\n            expectation.response = createResponse(status, data, headers, statusText);\n            return chain;\n          }\n        };\n\n    expectations.push(expectation);\n    return chain;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectGET\n   * @description\n   * Creates a new request expectation for GET requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   * request is handled. You can save this object for later use and invoke `respond` again in\n   * order to change how a matched request is handled. See #expect for more info.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectHEAD\n   * @description\n   * Creates a new request expectation for HEAD requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectDELETE\n   * @description\n   * Creates a new request expectation for DELETE requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectPOST\n   * @description\n   * Creates a new request expectation for POST requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that\n   *  receives data string and returns true if the data is as expected, or Object if request body\n   *  is in JSON format.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectPUT\n   * @description\n   * Creates a new request expectation for PUT requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that\n   *  receives data string and returns true if the data is as expected, or Object if request body\n   *  is in JSON format.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectPATCH\n   * @description\n   * Creates a new request expectation for PATCH requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that\n   *  receives data string and returns true if the data is as expected, or Object if request body\n   *  is in JSON format.\n   * @param {Object=} headers HTTP headers.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#expectJSONP\n   * @description\n   * Creates a new request expectation for JSONP requests. For more info see `expect()`.\n   *\n   * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n   *   and returns true if the url match the current definition.\n   * @returns {requestHandler} Returns an object with `respond` method that control how a matched\n   *   request is handled. You can save this object for later use and invoke `respond` again in\n   *   order to change how a matched request is handled.\n   */\n  createShortMethods('expect');\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#flush\n   * @description\n   * Flushes all pending requests using the trained responses.\n   *\n   * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,\n   *   all pending requests will be flushed. If there are no pending requests when the flush method\n   *   is called an exception is thrown (as this typically a sign of programming error).\n   */\n  $httpBackend.flush = function(count, digest) {\n    if (digest !== false) $rootScope.$digest();\n    if (!responses.length) throw new Error('No pending request to flush !');\n\n    if (angular.isDefined(count) && count !== null) {\n      while (count--) {\n        if (!responses.length) throw new Error('No more pending request to flush !');\n        responses.shift()();\n      }\n    } else {\n      while (responses.length) {\n        responses.shift()();\n      }\n    }\n    $httpBackend.verifyNoOutstandingExpectation(digest);\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#verifyNoOutstandingExpectation\n   * @description\n   * Verifies that all of the requests defined via the `expect` api were made. If any of the\n   * requests were not made, verifyNoOutstandingExpectation throws an exception.\n   *\n   * Typically, you would call this method following each test case that asserts requests using an\n   * \"afterEach\" clause.\n   *\n   * ```js\n   *   afterEach($httpBackend.verifyNoOutstandingExpectation);\n   * ```\n   */\n  $httpBackend.verifyNoOutstandingExpectation = function(digest) {\n    if (digest !== false) $rootScope.$digest();\n    if (expectations.length) {\n      throw new Error('Unsatisfied requests: ' + expectations.join(', '));\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#verifyNoOutstandingRequest\n   * @description\n   * Verifies that there are no outstanding requests that need to be flushed.\n   *\n   * Typically, you would call this method following each test case that asserts requests using an\n   * \"afterEach\" clause.\n   *\n   * ```js\n   *   afterEach($httpBackend.verifyNoOutstandingRequest);\n   * ```\n   */\n  $httpBackend.verifyNoOutstandingRequest = function() {\n    if (responses.length) {\n      throw new Error('Unflushed requests: ' + responses.length);\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $httpBackend#resetExpectations\n   * @description\n   * Resets all request expectations, but preserves all backend definitions. Typically, you would\n   * call resetExpectations during a multiple-phase test when you want to reuse the same instance of\n   * $httpBackend mock.\n   */\n  $httpBackend.resetExpectations = function() {\n    expectations.length = 0;\n    responses.length = 0;\n  };\n\n  return $httpBackend;\n\n\n  function createShortMethods(prefix) {\n    angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {\n     $httpBackend[prefix + method] = function(url, headers) {\n       return $httpBackend[prefix](method, url, undefined, headers);\n     };\n    });\n\n    angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {\n      $httpBackend[prefix + method] = function(url, data, headers) {\n        return $httpBackend[prefix](method, url, data, headers);\n      };\n    });\n  }\n}\n\nfunction MockHttpExpectation(method, url, data, headers) {\n\n  this.data = data;\n  this.headers = headers;\n\n  this.match = function(m, u, d, h) {\n    if (method != m) return false;\n    if (!this.matchUrl(u)) return false;\n    if (angular.isDefined(d) && !this.matchData(d)) return false;\n    if (angular.isDefined(h) && !this.matchHeaders(h)) return false;\n    return true;\n  };\n\n  this.matchUrl = function(u) {\n    if (!url) return true;\n    if (angular.isFunction(url.test)) return url.test(u);\n    if (angular.isFunction(url)) return url(u);\n    return url == u;\n  };\n\n  this.matchHeaders = function(h) {\n    if (angular.isUndefined(headers)) return true;\n    if (angular.isFunction(headers)) return headers(h);\n    return angular.equals(headers, h);\n  };\n\n  this.matchData = function(d) {\n    if (angular.isUndefined(data)) return true;\n    if (data && angular.isFunction(data.test)) return data.test(d);\n    if (data && angular.isFunction(data)) return data(d);\n    if (data && !angular.isString(data)) {\n      return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d));\n    }\n    return data == d;\n  };\n\n  this.toString = function() {\n    return method + ' ' + url;\n  };\n}\n\nfunction createMockXhr() {\n  return new MockXhr();\n}\n\nfunction MockXhr() {\n\n  // hack for testing $http, $httpBackend\n  MockXhr.$$lastInstance = this;\n\n  this.open = function(method, url, async) {\n    this.$$method = method;\n    this.$$url = url;\n    this.$$async = async;\n    this.$$reqHeaders = {};\n    this.$$respHeaders = {};\n  };\n\n  this.send = function(data) {\n    this.$$data = data;\n  };\n\n  this.setRequestHeader = function(key, value) {\n    this.$$reqHeaders[key] = value;\n  };\n\n  this.getResponseHeader = function(name) {\n    // the lookup must be case insensitive,\n    // that's why we try two quick lookups first and full scan last\n    var header = this.$$respHeaders[name];\n    if (header) return header;\n\n    name = angular.lowercase(name);\n    header = this.$$respHeaders[name];\n    if (header) return header;\n\n    header = undefined;\n    angular.forEach(this.$$respHeaders, function(headerVal, headerName) {\n      if (!header && angular.lowercase(headerName) == name) header = headerVal;\n    });\n    return header;\n  };\n\n  this.getAllResponseHeaders = function() {\n    var lines = [];\n\n    angular.forEach(this.$$respHeaders, function(value, key) {\n      lines.push(key + ': ' + value);\n    });\n    return lines.join('\\n');\n  };\n\n  this.abort = angular.noop;\n}\n\n\n/**\n * @ngdoc service\n * @name $timeout\n * @description\n *\n * This service is just a simple decorator for {@link ng.$timeout $timeout} service\n * that adds a \"flush\" and \"verifyNoPendingTasks\" methods.\n */\n\nangular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) {\n\n  /**\n   * @ngdoc method\n   * @name $timeout#flush\n   * @description\n   *\n   * Flushes the queue of pending tasks.\n   *\n   * @param {number=} delay maximum timeout amount to flush up until\n   */\n  $delegate.flush = function(delay) {\n    $browser.defer.flush(delay);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $timeout#verifyNoPendingTasks\n   * @description\n   *\n   * Verifies that there are no pending tasks that need to be flushed.\n   */\n  $delegate.verifyNoPendingTasks = function() {\n    if ($browser.deferredFns.length) {\n      throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +\n          formatPendingTasksAsString($browser.deferredFns));\n    }\n  };\n\n  function formatPendingTasksAsString(tasks) {\n    var result = [];\n    angular.forEach(tasks, function(task) {\n      result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');\n    });\n\n    return result.join(', ');\n  }\n\n  return $delegate;\n}];\n\nangular.mock.$RAFDecorator = ['$delegate', function($delegate) {\n  var queue = [];\n  var rafFn = function(fn) {\n    var index = queue.length;\n    queue.push(fn);\n    return function() {\n      queue.splice(index, 1);\n    };\n  };\n\n  rafFn.supported = $delegate.supported;\n\n  rafFn.flush = function() {\n    if (queue.length === 0) {\n      throw new Error('No rAF callbacks present');\n    }\n\n    var length = queue.length;\n    for (var i = 0; i < length; i++) {\n      queue[i]();\n    }\n\n    queue = [];\n  };\n\n  return rafFn;\n}];\n\nangular.mock.$AsyncCallbackDecorator = ['$delegate', function($delegate) {\n  var callbacks = [];\n  var addFn = function(fn) {\n    callbacks.push(fn);\n  };\n  addFn.flush = function() {\n    angular.forEach(callbacks, function(fn) {\n      fn();\n    });\n    callbacks = [];\n  };\n  return addFn;\n}];\n\n/**\n *\n */\nangular.mock.$RootElementProvider = function() {\n  this.$get = function() {\n    return angular.element('<div ng-app></div>');\n  };\n};\n\n/**\n * @ngdoc module\n * @name ngMock\n * @packageName angular-mocks\n * @description\n *\n * # ngMock\n *\n * The `ngMock` module provides support to inject and mock Angular services into unit tests.\n * In addition, ngMock also extends various core ng services such that they can be\n * inspected and controlled in a synchronous manner within test code.\n *\n *\n * <div doc-module-components=\"ngMock\"></div>\n *\n */\nangular.module('ngMock', ['ng']).provider({\n  $browser: angular.mock.$BrowserProvider,\n  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,\n  $log: angular.mock.$LogProvider,\n  $interval: angular.mock.$IntervalProvider,\n  $httpBackend: angular.mock.$HttpBackendProvider,\n  $rootElement: angular.mock.$RootElementProvider\n}).config(['$provide', function($provide) {\n  $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);\n  $provide.decorator('$$rAF', angular.mock.$RAFDecorator);\n  $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator);\n  $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);\n}]);\n\n/**\n * @ngdoc module\n * @name ngMockE2E\n * @module ngMockE2E\n * @packageName angular-mocks\n * @description\n *\n * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing.\n * Currently there is only one mock present in this module -\n * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.\n */\nangular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {\n  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);\n}]);\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @module ngMockE2E\n * @description\n * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of\n * applications that use the {@link ng.$http $http service}.\n *\n * *Note*: For fake http backend implementation suitable for unit testing please see\n * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.\n *\n * This implementation can be used to respond with static or dynamic responses via the `when` api\n * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the\n * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch\n * templates from a webserver).\n *\n * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application\n * is being developed with the real backend api replaced with a mock, it is often desirable for\n * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch\n * templates or static files from the webserver). To configure the backend with this behavior\n * use the `passThrough` request handler of `when` instead of `respond`.\n *\n * Additionally, we don't want to manually have to flush mocked out requests like we do during unit\n * testing. For this reason the e2e $httpBackend flushes mocked out requests\n * automatically, closely simulating the behavior of the XMLHttpRequest object.\n *\n * To setup the application to run with this http backend, you have to create a module that depends\n * on the `ngMockE2E` and your application modules and defines the fake backend:\n *\n * ```js\n *   myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);\n *   myAppDev.run(function($httpBackend) {\n *     phones = [{name: 'phone1'}, {name: 'phone2'}];\n *\n *     // returns the current list of phones\n *     $httpBackend.whenGET('/phones').respond(phones);\n *\n *     // adds a new phone to the phones array\n *     $httpBackend.whenPOST('/phones').respond(function(method, url, data) {\n *       var phone = angular.fromJson(data);\n *       phones.push(phone);\n *       return [200, phone, {}];\n *     });\n *     $httpBackend.whenGET(/^\\/templates\\//).passThrough();\n *     //...\n *   });\n * ```\n *\n * Afterwards, bootstrap your app with this new module.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#when\n * @module ngMockE2E\n * @description\n * Creates a new backend definition.\n *\n * @param {string} method HTTP method.\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(string|RegExp)=} data HTTP request body.\n * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header\n *   object and returns true if the headers match the current definition.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n *\n *  - respond –\n *    `{function([status,] data[, headers, statusText])\n *    | function(function(method, url, data, headers)}`\n *    – The respond method takes a set of static data to be returned or a function that can return\n *    an array containing response status (number), response data (string), response headers\n *    (Object), and the text for the status (string).\n *  - passThrough – `{function()}` – Any request matching a backend definition with\n *    `passThrough` handler will be passed through to the real backend (an XHR request will be made\n *    to the server.)\n *  - Both methods return the `requestHandler` object for possible overrides.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenGET\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for GET requests. For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenHEAD\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for HEAD requests. For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenDELETE\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for DELETE requests. For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenPOST\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for POST requests. For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(string|RegExp)=} data HTTP request body.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenPUT\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for PUT requests.  For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(string|RegExp)=} data HTTP request body.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenPATCH\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for PATCH requests.  For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @param {(string|RegExp)=} data HTTP request body.\n * @param {(Object|function(Object))=} headers HTTP headers.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\n\n/**\n * @ngdoc method\n * @name $httpBackend#whenJSONP\n * @module ngMockE2E\n * @description\n * Creates a new backend definition for JSONP requests. For more info see `when()`.\n *\n * @param {string|RegExp|function(string)} url HTTP url or function that receives the url\n *   and returns true if the url match the current definition.\n * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that\n *   control how a matched request is handled. You can save this object for later use and invoke\n *   `respond` or `passThrough` again in order to change how a matched request is handled.\n */\nangular.mock.e2e = {};\nangular.mock.e2e.$httpBackendDecorator =\n  ['$rootScope', '$delegate', '$browser', createHttpBackendMock];\n\n\n/**\n * @ngdoc type\n * @name $rootScope.Scope\n * @module ngMock\n * @description\n * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These\n * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when\n * `ngMock` module is loaded.\n *\n * In addition to all the regular `Scope` methods, the following helper methods are available:\n */\nangular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {\n\n  var $rootScopePrototype = Object.getPrototypeOf($delegate);\n\n  $rootScopePrototype.$countChildScopes = countChildScopes;\n  $rootScopePrototype.$countWatchers = countWatchers;\n\n  return $delegate;\n\n  // ------------------------------------------------------------------------------------------ //\n\n  /**\n   * @ngdoc method\n   * @name $rootScope.Scope#$countChildScopes\n   * @module ngMock\n   * @description\n   * Counts all the direct and indirect child scopes of the current scope.\n   *\n   * The current scope is excluded from the count. The count includes all isolate child scopes.\n   *\n   * @returns {number} Total number of child scopes.\n   */\n  function countChildScopes() {\n    // jshint validthis: true\n    var count = 0; // exclude the current scope\n    var pendingChildHeads = [this.$$childHead];\n    var currentScope;\n\n    while (pendingChildHeads.length) {\n      currentScope = pendingChildHeads.shift();\n\n      while (currentScope) {\n        count += 1;\n        pendingChildHeads.push(currentScope.$$childHead);\n        currentScope = currentScope.$$nextSibling;\n      }\n    }\n\n    return count;\n  }\n\n\n  /**\n   * @ngdoc method\n   * @name $rootScope.Scope#$countWatchers\n   * @module ngMock\n   * @description\n   * Counts all the watchers of direct and indirect child scopes of the current scope.\n   *\n   * The watchers of the current scope are included in the count and so are all the watchers of\n   * isolate child scopes.\n   *\n   * @returns {number} Total number of watchers.\n   */\n  function countWatchers() {\n    // jshint validthis: true\n    var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope\n    var pendingChildHeads = [this.$$childHead];\n    var currentScope;\n\n    while (pendingChildHeads.length) {\n      currentScope = pendingChildHeads.shift();\n\n      while (currentScope) {\n        count += currentScope.$$watchers ? currentScope.$$watchers.length : 0;\n        pendingChildHeads.push(currentScope.$$childHead);\n        currentScope = currentScope.$$nextSibling;\n      }\n    }\n\n    return count;\n  }\n}];\n\n\nif (window.jasmine || window.mocha) {\n\n  var currentSpec = null,\n      isSpecRunning = function() {\n        return !!currentSpec;\n      };\n\n\n  (window.beforeEach || window.setup)(function() {\n    currentSpec = this;\n  });\n\n  (window.afterEach || window.teardown)(function() {\n    var injector = currentSpec.$injector;\n\n    angular.forEach(currentSpec.$modules, function(module) {\n      if (module && module.$$hashKey) {\n        module.$$hashKey = undefined;\n      }\n    });\n\n    currentSpec.$injector = null;\n    currentSpec.$modules = null;\n    currentSpec = null;\n\n    if (injector) {\n      injector.get('$rootElement').off();\n      injector.get('$browser').pollFns.length = 0;\n    }\n\n    // clean up jquery's fragment cache\n    angular.forEach(angular.element.fragments, function(val, key) {\n      delete angular.element.fragments[key];\n    });\n\n    MockXhr.$$lastInstance = null;\n\n    angular.forEach(angular.callbacks, function(val, key) {\n      delete angular.callbacks[key];\n    });\n    angular.callbacks.counter = 0;\n  });\n\n  /**\n   * @ngdoc function\n   * @name angular.mock.module\n   * @description\n   *\n   * *NOTE*: This function is also published on window for easy access.<br>\n   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha\n   *\n   * This function registers a module configuration code. It collects the configuration information\n   * which will be used when the injector is created by {@link angular.mock.inject inject}.\n   *\n   * See {@link angular.mock.inject inject} for usage example\n   *\n   * @param {...(string|Function|Object)} fns any number of modules which are represented as string\n   *        aliases or as anonymous module initialization functions. The modules are used to\n   *        configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an\n   *        object literal is passed they will be registered as values in the module, the key being\n   *        the module name and the value being what is returned.\n   */\n  window.module = angular.mock.module = function() {\n    var moduleFns = Array.prototype.slice.call(arguments, 0);\n    return isSpecRunning() ? workFn() : workFn;\n    /////////////////////\n    function workFn() {\n      if (currentSpec.$injector) {\n        throw new Error('Injector already created, can not register a module!');\n      } else {\n        var modules = currentSpec.$modules || (currentSpec.$modules = []);\n        angular.forEach(moduleFns, function(module) {\n          if (angular.isObject(module) && !angular.isArray(module)) {\n            modules.push(function($provide) {\n              angular.forEach(module, function(value, key) {\n                $provide.value(key, value);\n              });\n            });\n          } else {\n            modules.push(module);\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name angular.mock.inject\n   * @description\n   *\n   * *NOTE*: This function is also published on window for easy access.<br>\n   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha\n   *\n   * The inject function wraps a function into an injectable function. The inject() creates new\n   * instance of {@link auto.$injector $injector} per test, which is then used for\n   * resolving references.\n   *\n   *\n   * ## Resolving References (Underscore Wrapping)\n   * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this\n   * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable\n   * that is declared in the scope of the `describe()` block. Since we would, most likely, want\n   * the variable to have the same name of the reference we have a problem, since the parameter\n   * to the `inject()` function would hide the outer variable.\n   *\n   * To help with this, the injected parameters can, optionally, be enclosed with underscores.\n   * These are ignored by the injector when the reference name is resolved.\n   *\n   * For example, the parameter `_myService_` would be resolved as the reference `myService`.\n   * Since it is available in the function body as _myService_, we can then assign it to a variable\n   * defined in an outer scope.\n   *\n   * ```\n   * // Defined out reference variable outside\n   * var myService;\n   *\n   * // Wrap the parameter in underscores\n   * beforeEach( inject( function(_myService_){\n   *   myService = _myService_;\n   * }));\n   *\n   * // Use myService in a series of tests.\n   * it('makes use of myService', function() {\n   *   myService.doStuff();\n   * });\n   *\n   * ```\n   *\n   * See also {@link angular.mock.module angular.mock.module}\n   *\n   * ## Example\n   * Example of what a typical jasmine tests looks like with the inject method.\n   * ```js\n   *\n   *   angular.module('myApplicationModule', [])\n   *       .value('mode', 'app')\n   *       .value('version', 'v1.0.1');\n   *\n   *\n   *   describe('MyApp', function() {\n   *\n   *     // You need to load modules that you want to test,\n   *     // it loads only the \"ng\" module by default.\n   *     beforeEach(module('myApplicationModule'));\n   *\n   *\n   *     // inject() is used to inject arguments of all given functions\n   *     it('should provide a version', inject(function(mode, version) {\n   *       expect(version).toEqual('v1.0.1');\n   *       expect(mode).toEqual('app');\n   *     }));\n   *\n   *\n   *     // The inject and module method can also be used inside of the it or beforeEach\n   *     it('should override a version and test the new version is injected', function() {\n   *       // module() takes functions or strings (module aliases)\n   *       module(function($provide) {\n   *         $provide.value('version', 'overridden'); // override version here\n   *       });\n   *\n   *       inject(function(version) {\n   *         expect(version).toEqual('overridden');\n   *       });\n   *     });\n   *   });\n   *\n   * ```\n   *\n   * @param {...Function} fns any number of functions which will be injected using the injector.\n   */\n\n\n\n  var ErrorAddingDeclarationLocationStack = function(e, errorForStack) {\n    this.message = e.message;\n    this.name = e.name;\n    if (e.line) this.line = e.line;\n    if (e.sourceId) this.sourceId = e.sourceId;\n    if (e.stack && errorForStack)\n      this.stack = e.stack + '\\n' + errorForStack.stack;\n    if (e.stackArray) this.stackArray = e.stackArray;\n  };\n  ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString;\n\n  window.inject = angular.mock.inject = function() {\n    var blockFns = Array.prototype.slice.call(arguments, 0);\n    var errorForStack = new Error('Declaration Location');\n    return isSpecRunning() ? workFn.call(currentSpec) : workFn;\n    /////////////////////\n    function workFn() {\n      var modules = currentSpec.$modules || [];\n      var strictDi = !!currentSpec.$injectorStrict;\n      modules.unshift('ngMock');\n      modules.unshift('ng');\n      var injector = currentSpec.$injector;\n      if (!injector) {\n        if (strictDi) {\n          // If strictDi is enabled, annotate the providerInjector blocks\n          angular.forEach(modules, function(moduleFn) {\n            if (typeof moduleFn === \"function\") {\n              angular.injector.$$annotate(moduleFn);\n            }\n          });\n        }\n        injector = currentSpec.$injector = angular.injector(modules, strictDi);\n        currentSpec.$injectorStrict = strictDi;\n      }\n      for (var i = 0, ii = blockFns.length; i < ii; i++) {\n        if (currentSpec.$injectorStrict) {\n          // If the injector is strict / strictDi, and the spec wants to inject using automatic\n          // annotation, then annotate the function here.\n          injector.annotate(blockFns[i]);\n        }\n        try {\n          /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */\n          injector.invoke(blockFns[i] || angular.noop, this);\n          /* jshint +W040 */\n        } catch (e) {\n          if (e.stack && errorForStack) {\n            throw new ErrorAddingDeclarationLocationStack(e, errorForStack);\n          }\n          throw e;\n        } finally {\n          errorForStack = null;\n        }\n      }\n    }\n  };\n\n\n  angular.mock.inject.strictDi = function(value) {\n    value = arguments.length ? !!value : true;\n    return isSpecRunning() ? workFn() : workFn;\n\n    function workFn() {\n      if (value !== currentSpec.$injectorStrict) {\n        if (currentSpec.$injector) {\n          throw new Error('Injector already created, can not modify strict annotations');\n        } else {\n          currentSpec.$injectorStrict = value;\n        }\n      }\n    }\n  };\n}\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "client/components/angular-mocks/bower.json",
    "content": "{\n  \"name\": \"angular-mocks\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-mocks.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  }\n}\n"
  },
  {
    "path": "client/components/angular-mocks/package.json",
    "content": "{\n  \"name\": \"angular-mocks\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS mocks for testing\",\n  \"main\": \"angular-mocks.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"mocks\",\n    \"testing\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-touch/.bower.json",
    "content": "{\n  \"name\": \"angular-touch\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-touch.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-touch\",\n  \"_release\": \"1.3.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.3.5\",\n    \"commit\": \"151e7b1f9b624c5d138a49b0acdd1ca1e35458df\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-touch.git\",\n  \"_target\": \"1.3.5\",\n  \"_originalSource\": \"angular-touch\"\n}"
  },
  {
    "path": "client/components/angular-touch/README.md",
    "content": "# packaged angular-touch\n\nThis repo is for distribution on `npm` and `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngTouch).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nYou can install this package either with `npm` or with `bower`.\n\n### npm\n\n```shell\nnpm install angular-touch\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/node_modules/angular-touch/angular-touch.js\"></script>\n```\n\nThen add `ngTouch` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngTouch']);\n```\n\nNote that this package is not in CommonJS format, so doing `require('angular-touch')` will\nreturn `undefined`.\n\n### bower\n\n```shell\nbower install angular-touch\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-touch/angular-touch.js\"></script>\n```\n\nThen add `ngTouch` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngTouch']);\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/api/ngTouch).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-touch/angular-touch.js",
    "content": "/**\n * @license AngularJS v1.3.5\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngTouch\n * @description\n *\n * # ngTouch\n *\n * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.\n * The implementation is based on jQuery Mobile touch event handling\n * ([jquerymobile.com](http://jquerymobile.com/)).\n *\n *\n * See {@link ngTouch.$swipe `$swipe`} for usage.\n *\n * <div doc-module-components=\"ngTouch\"></div>\n *\n */\n\n// define ngTouch module\n/* global -ngTouch */\nvar ngTouch = angular.module('ngTouch', []);\n\n/* global ngTouch: false */\n\n    /**\n     * @ngdoc service\n     * @name $swipe\n     *\n     * @description\n     * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\n     * behavior, to make implementing swipe-related directives more convenient.\n     *\n     * Requires the {@link ngTouch `ngTouch`} module to be installed.\n     *\n     * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by\n     * `ngCarousel` in a separate component.\n     *\n     * # Usage\n     * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\n     * which is to be watched for swipes, and an object with four handler functions. See the\n     * documentation for `bind` below.\n     */\n\nngTouch.factory('$swipe', [function() {\n  // The total distance in any direction before we make the call on swipe vs. scroll.\n  var MOVE_BUFFER_RADIUS = 10;\n\n  var POINTER_EVENTS = {\n    'mouse': {\n      start: 'mousedown',\n      move: 'mousemove',\n      end: 'mouseup'\n    },\n    'touch': {\n      start: 'touchstart',\n      move: 'touchmove',\n      end: 'touchend',\n      cancel: 'touchcancel'\n    }\n  };\n\n  function getCoordinates(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var e = (event.changedTouches && event.changedTouches[0]) ||\n        (event.originalEvent && event.originalEvent.changedTouches &&\n            event.originalEvent.changedTouches[0]) ||\n        touches[0].originalEvent || touches[0];\n\n    return {\n      x: e.clientX,\n      y: e.clientY\n    };\n  }\n\n  function getEvents(pointerTypes, eventType) {\n    var res = [];\n    angular.forEach(pointerTypes, function(pointerType) {\n      var eventName = POINTER_EVENTS[pointerType][eventType];\n      if (eventName) {\n        res.push(eventName);\n      }\n    });\n    return res.join(' ');\n  }\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $swipe#bind\n     *\n     * @description\n     * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\n     * object containing event handlers.\n     * The pointer types that should be used can be specified via the optional\n     * third argument, which is an array of strings `'mouse'` and `'touch'`. By default,\n     * `$swipe` will listen for `mouse` and `touch` events.\n     *\n     * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\n     * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`.\n     *\n     * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is\n     * watching for `touchmove` or `mousemove` events. These events are ignored until the total\n     * distance moved in either dimension exceeds a small threshold.\n     *\n     * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\n     * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\n     * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\n     *   A `cancel` event is sent.\n     *\n     * `move` is called on `mousemove` and `touchmove` after the above logic has determined that\n     * a swipe is in progress.\n     *\n     * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`.\n     *\n     * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling\n     * as described above.\n     *\n     */\n    bind: function(element, eventHandlers, pointerTypes) {\n      // Absolute total movement, used to control swipe vs. scroll.\n      var totalX, totalY;\n      // Coordinates of the start position.\n      var startCoords;\n      // Last event's position.\n      var lastPos;\n      // Whether a swipe is active.\n      var active = false;\n\n      pointerTypes = pointerTypes || ['mouse', 'touch'];\n      element.on(getEvents(pointerTypes, 'start'), function(event) {\n        startCoords = getCoordinates(event);\n        active = true;\n        totalX = 0;\n        totalY = 0;\n        lastPos = startCoords;\n        eventHandlers['start'] && eventHandlers['start'](startCoords, event);\n      });\n      var events = getEvents(pointerTypes, 'cancel');\n      if (events) {\n        element.on(events, function(event) {\n          active = false;\n          eventHandlers['cancel'] && eventHandlers['cancel'](event);\n        });\n      }\n\n      element.on(getEvents(pointerTypes, 'move'), function(event) {\n        if (!active) return;\n\n        // Android will send a touchcancel if it thinks we're starting to scroll.\n        // So when the total distance (+ or - or both) exceeds 10px in either direction,\n        // we either:\n        // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\n        // - On totalY > totalX, we let the browser handle it as a scroll.\n\n        if (!startCoords) return;\n        var coords = getCoordinates(event);\n\n        totalX += Math.abs(coords.x - lastPos.x);\n        totalY += Math.abs(coords.y - lastPos.y);\n\n        lastPos = coords;\n\n        if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\n          return;\n        }\n\n        // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\n        if (totalY > totalX) {\n          // Allow native scrolling to take over.\n          active = false;\n          eventHandlers['cancel'] && eventHandlers['cancel'](event);\n          return;\n        } else {\n          // Prevent the browser from scrolling.\n          event.preventDefault();\n          eventHandlers['move'] && eventHandlers['move'](coords, event);\n        }\n      });\n\n      element.on(getEvents(pointerTypes, 'end'), function(event) {\n        if (!active) return;\n        active = false;\n        eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);\n      });\n    }\n  };\n}]);\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * A more powerful replacement for the default ngClick designed to be used on touchscreen\n * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending\n * the click event. This version handles them immediately, and then prevents the\n * following click event from propagating.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * This directive can fall back to using an ordinary click event, and so works on desktop\n * browsers as well as mobile.\n *\n * This directive also sets the CSS class `ng-click-active` while the element is being held\n * down (by a mouse click or touch) so you can restyle the depressed element if you wish.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate\n * upon tap. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngClickExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n          Increment\n        </button>\n        count: {{ count }}\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngClickExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\nngTouch.config(['$provide', function($provide) {\n  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n    // drop the default ngClick directive\n    $delegate.shift();\n    return $delegate;\n  }]);\n}]);\n\nngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',\n    function($parse, $timeout, $rootElement) {\n  var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.\n  var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.\n  var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click\n  var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.\n\n  var ACTIVE_CLASS_NAME = 'ng-click-active';\n  var lastPreventedTime;\n  var touchCoordinates;\n  var lastLabelClickCoordinates;\n\n\n  // TAP EVENTS AND GHOST CLICKS\n  //\n  // Why tap events?\n  // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're\n  // double-tapping, and then fire a click event.\n  //\n  // This delay sucks and makes mobile apps feel unresponsive.\n  // So we detect touchstart, touchmove, touchcancel and touchend ourselves and determine when\n  // the user has tapped on something.\n  //\n  // What happens when the browser then generates a click event?\n  // The browser, of course, also detects the tap and fires a click after a delay. This results in\n  // tapping/clicking twice. We do \"clickbusting\" to prevent it.\n  //\n  // How does it work?\n  // We attach global touchstart and click handlers, that run during the capture (early) phase.\n  // So the sequence for a tap is:\n  // - global touchstart: Sets an \"allowable region\" at the point touched.\n  // - element's touchstart: Starts a touch\n  // (- touchmove or touchcancel ends the touch, no click follows)\n  // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold\n  //   too long) and fires the user's tap handler. The touchend also calls preventGhostClick().\n  // - preventGhostClick() removes the allowable region the global touchstart created.\n  // - The browser generates a click event.\n  // - The global click handler catches the click, and checks whether it was in an allowable region.\n  //     - If preventGhostClick was called, the region will have been removed, the click is busted.\n  //     - If the region is still there, the click proceeds normally. Therefore clicks on links and\n  //       other elements without ngTap on them work normally.\n  //\n  // This is an ugly, terrible hack!\n  // Yeah, tell me about it. The alternatives are using the slow click events, or making our users\n  // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular\n  // encapsulates this ugly logic away from the user.\n  //\n  // Why not just put click handlers on the element?\n  // We do that too, just to be sure. If the tap event caused the DOM to change,\n  // it is possible another element is now in that position. To take account for these possibly\n  // distinct elements, the handlers are global and care only about coordinates.\n\n  // Checks if the coordinates are close enough to be within the region.\n  function hit(x1, y1, x2, y2) {\n    return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;\n  }\n\n  // Checks a list of allowable regions against a click location.\n  // Returns true if the click should be allowed.\n  // Splices out the allowable region from the list after it has been used.\n  function checkAllowableRegions(touchCoordinates, x, y) {\n    for (var i = 0; i < touchCoordinates.length; i += 2) {\n      if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {\n        touchCoordinates.splice(i, i + 2);\n        return true; // allowable region\n      }\n    }\n    return false; // No allowable region; bust it.\n  }\n\n  // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick\n  // was called recently.\n  function onClick(event) {\n    if (Date.now() - lastPreventedTime > PREVENT_DURATION) {\n      return; // Too old.\n    }\n\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label\n    // and on the input element). Depending on the exact browser, this second click we don't want\n    // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label\n    // click event\n    if (x < 1 && y < 1) {\n      return; // offscreen\n    }\n    if (lastLabelClickCoordinates &&\n        lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {\n      return; // input click triggered by label click\n    }\n    // reset label click coordinates on first subsequent click\n    if (lastLabelClickCoordinates) {\n      lastLabelClickCoordinates = null;\n    }\n    // remember label click coordinates to prevent click busting of trigger click event on input\n    if (event.target.tagName.toLowerCase() === 'label') {\n      lastLabelClickCoordinates = [x, y];\n    }\n\n    // Look for an allowable region containing this click.\n    // If we find one, that means it was created by touchstart and not removed by\n    // preventGhostClick, so we don't bust it.\n    if (checkAllowableRegions(touchCoordinates, x, y)) {\n      return;\n    }\n\n    // If we didn't find an allowable region, bust the click.\n    event.stopPropagation();\n    event.preventDefault();\n\n    // Blur focused form elements\n    event.target && event.target.blur();\n  }\n\n\n  // Global touchstart handler that creates an allowable region for a click event.\n  // This allowable region can be removed by preventGhostClick if we want to bust it.\n  function onTouchStart(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    touchCoordinates.push(x, y);\n\n    $timeout(function() {\n      // Remove the allowable region.\n      for (var i = 0; i < touchCoordinates.length; i += 2) {\n        if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {\n          touchCoordinates.splice(i, i + 2);\n          return;\n        }\n      }\n    }, PREVENT_DURATION, false);\n  }\n\n  // On the first call, attaches some event handlers. Then whenever it gets called, it creates a\n  // zone around the touchstart where clicks will get busted.\n  function preventGhostClick(x, y) {\n    if (!touchCoordinates) {\n      $rootElement[0].addEventListener('click', onClick, true);\n      $rootElement[0].addEventListener('touchstart', onTouchStart, true);\n      touchCoordinates = [];\n    }\n\n    lastPreventedTime = Date.now();\n\n    checkAllowableRegions(touchCoordinates, x, y);\n  }\n\n  // Actual linking function.\n  return function(scope, element, attr) {\n    var clickHandler = $parse(attr.ngClick),\n        tapping = false,\n        tapElement,  // Used to blur the element after a tap.\n        startTime,   // Used to check if the tap was held too long.\n        touchStartX,\n        touchStartY;\n\n    function resetState() {\n      tapping = false;\n      element.removeClass(ACTIVE_CLASS_NAME);\n    }\n\n    element.on('touchstart', function(event) {\n      tapping = true;\n      tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.\n      // Hack for Safari, which can target text nodes instead of containers.\n      if (tapElement.nodeType == 3) {\n        tapElement = tapElement.parentNode;\n      }\n\n      element.addClass(ACTIVE_CLASS_NAME);\n\n      startTime = Date.now();\n\n      var touches = event.touches && event.touches.length ? event.touches : [event];\n      var e = touches[0].originalEvent || touches[0];\n      touchStartX = e.clientX;\n      touchStartY = e.clientY;\n    });\n\n    element.on('touchmove', function(event) {\n      resetState();\n    });\n\n    element.on('touchcancel', function(event) {\n      resetState();\n    });\n\n    element.on('touchend', function(event) {\n      var diff = Date.now() - startTime;\n\n      var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches :\n          ((event.touches && event.touches.length) ? event.touches : [event]);\n      var e = touches[0].originalEvent || touches[0];\n      var x = e.clientX;\n      var y = e.clientY;\n      var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));\n\n      if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {\n        // Call preventGhostClick so the clickbuster will catch the corresponding click.\n        preventGhostClick(x, y);\n\n        // Blur the focused element (the button, probably) before firing the callback.\n        // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.\n        // I couldn't get anything to work reliably on Android Chrome.\n        if (tapElement) {\n          tapElement.blur();\n        }\n\n        if (!angular.isDefined(attr.disabled) || attr.disabled === false) {\n          element.triggerHandler('click', [event]);\n        }\n      }\n\n      resetState();\n    });\n\n    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n    // something else nearby.\n    element.onclick = function(event) { };\n\n    // Actual click handler.\n    // There are three different kinds of clicks, only two of which reach this point.\n    // - On desktop browsers without touch events, their clicks will always come here.\n    // - On mobile browsers, the simulated \"fast\" click will call this.\n    // - But the browser's follow-up slow click will be \"busted\" before it reaches this handler.\n    // Therefore it's safe to use this directive on both mobile and desktop.\n    element.on('click', function(event, touchend) {\n      scope.$apply(function() {\n        clickHandler(scope, {$event: (touchend || event)});\n      });\n    });\n\n    element.on('mousedown', function(event) {\n      element.addClass(ACTIVE_CLASS_NAME);\n    });\n\n    element.on('mousemove mouseup', function(event) {\n      element.removeClass(ACTIVE_CLASS_NAME);\n    });\n\n  };\n}]);\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngSwipeLeft\n *\n * @description\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to\n * the `ng-swipe-left` or `ng-swipe-right` DOM Element.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\n * upon left swipe. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngSwipeLeftExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngSwipeLeftExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSwipeRight\n *\n * @description\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\n * upon right swipe. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngSwipeRightExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngSwipeRightExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\nfunction makeSwipeDirective(directiveName, direction, eventName) {\n  ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\n    // The maximum vertical delta for a swipe should be less than 75px.\n    var MAX_VERTICAL_DISTANCE = 75;\n    // Vertical distance should not be more than a fraction of the horizontal distance.\n    var MAX_VERTICAL_RATIO = 0.3;\n    // At least a 30px lateral motion is necessary for a swipe.\n    var MIN_HORIZONTAL_DISTANCE = 30;\n\n    return function(scope, element, attr) {\n      var swipeHandler = $parse(attr[directiveName]);\n\n      var startCoords, valid;\n\n      function validSwipe(coords) {\n        // Check that it's within the coordinates.\n        // Absolute vertical distance must be within tolerances.\n        // Horizontal distance, we take the current X - the starting X.\n        // This is negative for leftward swipes and positive for rightward swipes.\n        // After multiplying by the direction (-1 for left, +1 for right), legal swipes\n        // (ie. same direction as the directive wants) will have a positive delta and\n        // illegal ones a negative delta.\n        // Therefore this delta must be positive, and larger than the minimum.\n        if (!startCoords) return false;\n        var deltaY = Math.abs(coords.y - startCoords.y);\n        var deltaX = (coords.x - startCoords.x) * direction;\n        return valid && // Short circuit for already-invalidated swipes.\n            deltaY < MAX_VERTICAL_DISTANCE &&\n            deltaX > 0 &&\n            deltaX > MIN_HORIZONTAL_DISTANCE &&\n            deltaY / deltaX < MAX_VERTICAL_RATIO;\n      }\n\n      var pointerTypes = ['touch'];\n      if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {\n        pointerTypes.push('mouse');\n      }\n      $swipe.bind(element, {\n        'start': function(coords, event) {\n          startCoords = coords;\n          valid = true;\n        },\n        'cancel': function(event) {\n          valid = false;\n        },\n        'end': function(coords, event) {\n          if (validSwipe(coords)) {\n            scope.$apply(function() {\n              element.triggerHandler(eventName);\n              swipeHandler(scope, {$event: event});\n            });\n          }\n        }\n      }, pointerTypes);\n    };\n  }]);\n}\n\n// Left is negative X-coordinate, right is positive.\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\n\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "client/components/angular-touch/bower.json",
    "content": "{\n  \"name\": \"angular-touch\",\n  \"version\": \"1.3.5\",\n  \"main\": \"./angular-touch.js\",\n  \"ignore\": [],\n  \"dependencies\": {\n    \"angular\": \"1.3.5\"\n  }\n}\n"
  },
  {
    "path": "client/components/angular-touch/package.json",
    "content": "{\n  \"name\": \"angular-touch\",\n  \"version\": \"1.3.5\",\n  \"description\": \"AngularJS module for touch events and helpers for touch-enabled devices\",\n  \"main\": \"angular-touch.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/angular/angular.js.git\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"framework\",\n    \"browser\",\n    \"touch\",\n    \"client-side\"\n  ],\n  \"author\": \"Angular Core Team <angular-core+npm@google.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/angular.js/issues\"\n  },\n  \"homepage\": \"http://angularjs.org\"\n}\n"
  },
  {
    "path": "client/components/angular-ui-router/.bower.json",
    "content": "{\n  \"name\": \"angular-ui-router\",\n  \"version\": \"0.2.13\",\n  \"main\": \"./release/angular-ui-router.js\",\n  \"dependencies\": {\n    \"angular\": \">= 1.0.8\"\n  },\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"component.json\",\n    \"package.json\",\n    \"lib\",\n    \"config\",\n    \"sample\",\n    \"test\",\n    \"tests\",\n    \"ngdoc_assets\",\n    \"Gruntfile.js\",\n    \"files.js\"\n  ],\n  \"homepage\": \"https://github.com/angular-ui/ui-router\",\n  \"_release\": \"0.2.13\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.2.13\",\n    \"commit\": \"c3d543aae43d4600512520a0d70723ac31f2cb62\"\n  },\n  \"_source\": \"git://github.com/angular-ui/ui-router.git\",\n  \"_target\": \"~0.2.13\",\n  \"_originalSource\": \"angular-ui-router\"\n}"
  },
  {
    "path": "client/components/angular-ui-router/CHANGELOG.md",
    "content": "<a name=\"0.2.13\"></a>\n### 0.2.13 (2014-11-20)\n\nThis release primarily fixes issues reported against 0.2.12\n\n#### Bug Fixes\n\n* **$state:** fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma ([19715d15](https://github.com/angular-ui/ui-router/commit/19715d15e3cbfff724519e9febedd05b49c75baa), closes [#1513](https://github.com/angular-ui/ui-router/issues/1513))\n  * Avoid re-synchronizing from url after .transitionTo ([b267ecd3](https://github.com/angular-ui/ui-router/commit/b267ecd348e5c415233573ef95ebdbd051875f52), closes [#1573](https://github.com/angular-ui/ui-router/issues/1573))\n* **$urlMatcherFactory:**\n  * Built-in date type uses local time zone ([d726bedc](https://github.com/angular-ui/ui-router/commit/d726bedcbb5f70a5660addf43fd52ec730790293))\n  * make date type fn check .is before running ([aa94ce3b](https://github.com/angular-ui/ui-router/commit/aa94ce3b86632ad05301530a2213099da73a3dc0), closes [#1564](https://github.com/angular-ui/ui-router/issues/1564))\n  * early binding of array handler bypasses type resolution ([ada4bc27](https://github.com/angular-ui/ui-router/commit/ada4bc27df5eff3ba3ab0de94a09bd91b0f7a28c))\n  * add 'any' Type for non-encoding non-url params ([3bfd75ab](https://github.com/angular-ui/ui-router/commit/3bfd75ab445ee2f1dd55275465059ed116b10b27), closes [#1562](https://github.com/angular-ui/ui-router/issues/1562))\n  * fix encoding slashes in params ([0c983a08](https://github.com/angular-ui/ui-router/commit/0c983a08e2947f999683571477debd73038e95cf), closes [#1119](https://github.com/angular-ui/ui-router/issues/1119))\n  * fix mixed path/query params ordering problem ([a479fbd0](https://github.com/angular-ui/ui-router/commit/a479fbd0b8eb393a94320973e5b9a62d83912ee2), closes [#1543](https://github.com/angular-ui/ui-router/issues/1543))\n* **ArrayType:**\n  * specify empty array mapping corner case ([74aa6091](https://github.com/angular-ui/ui-router/commit/74aa60917e996b0b4e27bbb4eb88c3c03832021d), closes [#1511](https://github.com/angular-ui/ui-router/issues/1511))\n  * fix .equals for array types ([5e6783b7](https://github.com/angular-ui/ui-router/commit/5e6783b77af9a90ddff154f990b43dbb17eeda6e), closes [#1538](https://github.com/angular-ui/ui-router/issues/1538))\n* **Param:** fix default value shorthand declaration ([831d812a](https://github.com/angular-ui/ui-router/commit/831d812a524524c71f0ee1c9afaf0487a5a66230), closes [#1554](https://github.com/angular-ui/ui-router/issues/1554))\n* **common:** fixed the _.filter clone to not create sparse arrays ([750f5cf5](https://github.com/angular-ui/ui-router/commit/750f5cf5fd91f9ada96f39e50d39aceb2caf22b6), closes [#1563](https://github.com/angular-ui/ui-router/issues/1563))\n* **ie8:** fix calls to indexOf and filter ([dcb31b84](https://github.com/angular-ui/ui-router/commit/dcb31b843391b3e61dee4de13f368c109541813e), closes [#1556](https://github.com/angular-ui/ui-router/issues/1556))\n\n\n#### Features\n\n* add json parameter Type ([027f1fcf](https://github.com/angular-ui/ui-router/commit/027f1fcf9c0916cea651e88981345da6f9ff214a))\n\n\n<a name=\"0.2.12\"></a>\n### 0.2.12 (2014-11-13)\n\n#### Bug Fixes\n\n* **$resolve:** use resolve fn result, not parent resolved value of same name ([67f5e00c](https://github.com/angular-ui/ui-router/commit/67f5e00cc9aa006ce3fe6cde9dff261c28eab70a), closes [#1317], [#1353])\n* **$state:**\n  * populate default params in .transitionTo. ([3f60fbe6](https://github.com/angular-ui/ui-router/commit/3f60fbe6d65ebeca8d97952c05aa1d269f1b7ba1), closes [#1396])\n  * reload() now reinvokes controllers ([73443420](https://github.com/angular-ui/ui-router/commit/7344342018847902594dc1fc62d30a5c30f01763), closes [#582])\n  * do not emit $viewContentLoading if notify: false ([74255feb](https://github.com/angular-ui/ui-router/commit/74255febdf48ae082a02ca1e735165f2c369a463), closes [#1387](https://github.com/angular-ui/ui-router/issues/1387))\n  * register states at config-time ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a))\n  * handle parent.name when parent is obj ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a))\n* **$urlMatcherFactory:**\n  * register types at config ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a), closes [#1476])\n  * made path params default value \"\" for backwards compat ([8f998e71](https://github.com/angular-ui/ui-router/commit/8f998e71e43a0b31293331c981f5db0f0097b8ba))\n  * Pre-replace certain param values for better mapping ([6374a3e2](https://github.com/angular-ui/ui-router/commit/6374a3e29ab932014a7c77d2e1ab884cc841a2e3))\n  * fixed ParamSet.$$keys() ordering ([9136fecb](https://github.com/angular-ui/ui-router/commit/9136fecbc2bfd4fda748a9914f0225a46c933860))\n  * empty string policy now respected in Param.value() ([db12c85c](https://github.com/angular-ui/ui-router/commit/db12c85c16f2d105415f9bbbdeb11863f64728e0))\n  * \"string\" type now encodes/decodes slashes ([3045e415](https://github.com/angular-ui/ui-router/commit/3045e41577a8b8b8afc6039f42adddf5f3c061ec), closes [#1119])\n  * allow arrays in both path and query params ([fdd2f2c1](https://github.com/angular-ui/ui-router/commit/fdd2f2c191c4a67c874fdb9ec9a34f8dde9ad180), closes [#1073], [#1045], [#1486], [#1394])\n  * typed params in search ([8d4cab69](https://github.com/angular-ui/ui-router/commit/8d4cab69dd67058e1a716892cc37b7d80a57037f), closes [#1488](https://github.com/angular-ui/ui-router/issues/1488))\n  * no longer generate unroutable urls ([cb9fd9d8](https://github.com/angular-ui/ui-router/commit/cb9fd9d8943cb26c7223f6990db29c82ae8740f8), closes [#1487](https://github.com/angular-ui/ui-router/issues/1487))\n  * handle optional parameter followed by required parameter in url format. ([efc72106](https://github.com/angular-ui/ui-router/commit/efc72106ddcc4774b48ea176a505ef9e95193b41))\n  * default to parameter string coersion. ([13a468a7](https://github.com/angular-ui/ui-router/commit/13a468a7d54c2fb0751b94c0c1841d580b71e6dc), closes [#1414](https://github.com/angular-ui/ui-router/issues/1414))\n  * concat respects strictMode/caseInsensitive ([dd72e103](https://github.com/angular-ui/ui-router/commit/dd72e103edb342d9cf802816fe127e1bbd68fd5f), closes [#1395])\n* **ui-sref:**\n  * Allow sref state options to take a scope object ([b5f7b596](https://github.com/angular-ui/ui-router/commit/b5f7b59692ce4933e2d63eb5df3f50a4ba68ccc0))\n  * replace raw href modification with attrs. ([08c96782](https://github.com/angular-ui/ui-router/commit/08c96782faf881b0c7ab00afc233ee6729548fa0))\n  * nagivate to state when url is \"\" fix($state.href): generate href for state with  ([656b5aab](https://github.com/angular-ui/ui-router/commit/656b5aab906e5749db9b5a080c6a83b95f50fd91), closes [#1363](https://github.com/angular-ui/ui-router/issues/1363))\n  * Check that state is defined in isMatch() ([92aebc75](https://github.com/angular-ui/ui-router/commit/92aebc7520f88babdc6e266536086e07263514c3), closes [#1314](https://github.com/angular-ui/ui-router/issues/1314), [#1332](https://github.com/angular-ui/ui-router/issues/1332))\n* **uiView:**\n  * allow inteprolated ui-view names ([81f6a19a](https://github.com/angular-ui/ui-router/commit/81f6a19a432dac9198fd33243855bfd3b4fea8c0), closes [#1324](https://github.com/angular-ui/ui-router/issues/1324))\n  * Made anim work with angular 1.3 ([c3bb7ad9](https://github.com/angular-ui/ui-router/commit/c3bb7ad903da1e1f3c91019cfd255be8489ff4ef), closes [#1367](https://github.com/angular-ui/ui-router/issues/1367), [#1345](https://github.com/angular-ui/ui-router/issues/1345))\n* **urlRouter:** html5Mode accepts an object from angular v1.3.0-rc.3 ([7fea1e9d](https://github.com/angular-ui/ui-router/commit/7fea1e9d0d8c6e09cc6c895ecb93d4221e9adf48))\n* **stateFilters:** mark state filters as stateful. ([a00b353e](https://github.com/angular-ui/ui-router/commit/a00b353e3036f64a81245c4e7898646ba218f833), closes [#1479])\n* **ui-router:** re-add IE8 compatibility for map/filter/keys ([8ce69d9f](https://github.com/angular-ui/ui-router/commit/8ce69d9f7c886888ab53eca7e53536f36b428aae), closes [#1518], [#1383])\n* **package:** point 'main' to a valid filename ([ac903350](https://github.com/angular-ui/ui-router/commit/ac9033501debb63364539d91fbf3a0cba4579f8e))\n* **travis:** make CI build faster ([0531de05](https://github.com/angular-ui/ui-router/commit/0531de052e414a8d839fbb4e7635e923e94865b3))\n\n\n#### Features\n\n##### Default and Typed params\n\nThis release includes a lot of bug fixes around default/optional and typed parameters.  As such, 0.2.12 is the first release where we recommend those features be used.\n\n* **$state:**\n  * add state params validation ([b1379e6a](https://github.com/angular-ui/ui-router/commit/b1379e6a4d38f7ed7436e05873932d7c279af578), closes [#1433](https://github.com/angular-ui/ui-router/issues/1433))\n  * is/includes/get work on relative stateOrName ([232e94b3](https://github.com/angular-ui/ui-router/commit/232e94b3c2ca2c764bb9510046e4b61690c87852))\n  * .reload() returns state transition promise ([639e0565](https://github.com/angular-ui/ui-router/commit/639e0565dece9d5544cc93b3eee6e11c99bd7373))\n* **$templateFactory:** request templateURL as text/html ([ccd60769](https://github.com/angular-ui/ui-router/commit/ccd6076904a4b801d77b47f6e2de4c06ce9962f8), closes [#1287])\n* **$urlMatcherFactory:** Made a Params and ParamSet class ([0cc1e6cc](https://github.com/angular-ui/ui-router/commit/0cc1e6cc461a4640618e2bb594566551c54834e2))\n\n\n\n<a name=\"0.2.11\"></a>\n### 0.2.11 (2014-08-26)\n\n\n#### Bug Fixes\n\n* **$resolve:** Resolves only inherit from immediate parent fixes #702 ([df34e20c](https://github.com/angular-ui/ui-router/commit/df34e20c576299e7a3c8bd4ebc68d42341c0ace9))\n* **$state:**\n  * change $state.href default options.inherit to true ([deea695f](https://github.com/angular-ui/ui-router/commit/deea695f5cacc55de351ab985144fd233c02a769))\n  * sanity-check state lookups ([456fd5ae](https://github.com/angular-ui/ui-router/commit/456fd5aec9ea507518927bfabd62b4afad4cf714), closes [#980](https://github.com/angular-ui/ui-router/issues/980))\n  * didn't comply to inherit parameter ([09836781](https://github.com/angular-ui/ui-router/commit/09836781f126c1c485b06551eb9cfd4fa0f45c35))\n  * allow view content loading broadcast ([7b78edee](https://github.com/angular-ui/ui-router/commit/7b78edeeb52a74abf4d3f00f79534033d5a08d1a))\n* **$urlMatcherFactory:**\n  * detect injected functions ([91f75ae6](https://github.com/angular-ui/ui-router/commit/91f75ae66c4d129f6f69e53bd547594e9661f5d5))\n  * syntax ([1ebed370](https://github.com/angular-ui/ui-router/commit/1ebed37069bae8614d41541d56521f5c45f703f3))\n* **UrlMatcher:**\n  * query param function defaults ([f9c20530](https://github.com/angular-ui/ui-router/commit/f9c205304f10d8a4ebe7efe9025e642016479a51))\n  * don't decode default values ([63607bdb](https://github.com/angular-ui/ui-router/commit/63607bdbbcb432d3fb37856a1cb3da0cd496804e))\n* **travis:** update Node version to fix build ([d6b95ef2](https://github.com/angular-ui/ui-router/commit/d6b95ef23d9dacb4eba08897f5190a0bcddb3a48))\n* **uiSref:**\n  * Generate an href for states with a blank url. closes #1293 ([691745b1](https://github.com/angular-ui/ui-router/commit/691745b12fa05d3700dd28f0c8d25f8a105074ad))\n  * should inherit params by default ([b973dad1](https://github.com/angular-ui/ui-router/commit/b973dad155ad09a7975e1476bd096f7b2c758eeb))\n  * cancel transition if preventDefault() has been called ([2e6d9167](https://github.com/angular-ui/ui-router/commit/2e6d9167d3afbfbca6427e53e012f94fb5fb8022))\n* **uiView:** Fixed infinite loop when is called .go() from a controller. ([e13988b8](https://github.com/angular-ui/ui-router/commit/e13988b8cd6231d75c78876ee9d012cc87f4a8d9), closes [#1194](https://github.com/angular-ui/ui-router/issues/1194))\n* **docs:**\n  * Fixed link to milestones ([6c0ae500](https://github.com/angular-ui/ui-router/commit/6c0ae500cc238ea9fc95adcc15415c55fc9e1f33))\n  * fix bug in decorator example ([4bd00af5](https://github.com/angular-ui/ui-router/commit/4bd00af50b8b88a49d1545a76290731cb8e0feb1))\n  * Removed an incorrect semi-colon ([af97cef8](https://github.com/angular-ui/ui-router/commit/af97cef8b967f2e32177e539ef41450dca131a7d))\n  * Explain return value of rule as function ([5e887890](https://github.com/angular-ui/ui-router/commit/5e8878900a6ffe59a81aed531a3925e34a297377))\n\n\n#### Features\n\n* **$state:**\n  * allow parameters to pass unharmed ([8939d057](https://github.com/angular-ui/ui-router/commit/8939d0572ab1316e458ef016317ecff53131a822))\n    * **BREAKING CHANGE**: state parameters are no longer automatically coerced to strings, and unspecified parameter values are now set to undefined rather than null.\n  * allow prevent syncUrl on failure ([753060b9](https://github.com/angular-ui/ui-router/commit/753060b910d5d2da600a6fa0757976e401c33172))\n* **typescript:** Add typescript definitions for component builds ([521ceb3f](https://github.com/angular-ui/ui-router/commit/521ceb3fd7850646422f411921e21ce5e7d82e0f))\n* **uiSref:** extend syntax for ui-sref ([71cad3d6](https://github.com/angular-ui/ui-router/commit/71cad3d636508b5a9fe004775ad1f1adc0c80c3e))\n* **uiSrefActive:** \n  * Also activate for child states. ([bf163ad6](https://github.com/angular-ui/ui-router/commit/bf163ad6ce176ce28792696c8302d7cdf5c05a01), closes [#818](https://github.com/angular-ui/ui-router/issues/818))\n    * **BREAKING CHANGE** Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance.\n\n  * uiSrefActiveEq: new directive with old ui-sref-active behavior\n* **$urlRouter:**\n  * defer URL change interception ([c72d8ce1](https://github.com/angular-ui/ui-router/commit/c72d8ce11916d0ac22c81b409c9e61d7048554d7))\n  * force URLs to have valid params ([d48505cd](https://github.com/angular-ui/ui-router/commit/d48505cd328d83e39d5706e085ba319715f999a6))\n  * abstract $location handling ([08b4636b](https://github.com/angular-ui/ui-router/commit/08b4636b294611f08db35f00641eb5211686fb50))\n* **$urlMatcherFactory:**\n  * fail on bad parameters ([d8f124c1](https://github.com/angular-ui/ui-router/commit/d8f124c10d00c7e5dde88c602d966db261aea221))\n  * date type support ([b7f074ff](https://github.com/angular-ui/ui-router/commit/b7f074ff65ca150a3cdbda4d5ad6cb17107300eb))\n  * implement type support ([450b1f0e](https://github.com/angular-ui/ui-router/commit/450b1f0e8e03c738174ff967f688b9a6373290f4))\n* **UrlMatcher:**\n  * handle query string arrays ([9cf764ef](https://github.com/angular-ui/ui-router/commit/9cf764efab45fa9309368688d535ddf6e96d6449), closes [#373](https://github.com/angular-ui/ui-router/issues/373))\n  * injectable functions as defaults ([00966ecd](https://github.com/angular-ui/ui-router/commit/00966ecd91fb745846039160cab707bfca8b3bec))\n  * default values & type decoding for query params ([a472b301](https://github.com/angular-ui/ui-router/commit/a472b301389fbe84d1c1fa9f24852b492a569d11))\n  * allow shorthand definitions ([5b724304](https://github.com/angular-ui/ui-router/commit/5b7243049793505e44b6608ea09878c37c95b1f5))\n  * validates whole interface ([32b27db1](https://github.com/angular-ui/ui-router/commit/32b27db173722e9194ef1d5c0ea7d93f25a98d11))\n  * implement non-strict matching ([a3e21366](https://github.com/angular-ui/ui-router/commit/a3e21366bee0475c9795a1ec76f70eec41c5b4e3))\n  * add per-param config support ([07b3029f](https://github.com/angular-ui/ui-router/commit/07b3029f4d409cf955780113df92e36401b47580))\n    * **BREAKING CHANGE**: the `params` option in state configurations must now be an object keyed by parameter name.\n\n### 0.2.10 (2014-03-12)\n\n\n#### Bug Fixes\n\n* **$state:** use $browser.baseHref() when generating urls with .href() ([cbcc8488](https://github.com/angular-ui/ui-router/commit/cbcc84887d6b6d35258adabb97c714cd9c1e272d))\n* **bower.json:** JS files should not be ignored ([ccdab193](https://github.com/angular-ui/ui-router/commit/ccdab193315f304eb3be5f5b97c47a926c79263e))\n* **dev:** karma:background task is missing, can't run grunt:dev. ([d9f7b898](https://github.com/angular-ui/ui-router/commit/d9f7b898e8e3abb8c846b0faa16a382913d7b22b))\n* **sample:** Contacts menu button not staying active when navigating to detail states. Need t ([2fcb8443](https://github.com/angular-ui/ui-router/commit/2fcb84437cb43ade12682a92b764f13cac77dfe7))\n* **uiSref:** support mock-clicks/events with no data ([717d3ff7](https://github.com/angular-ui/ui-router/commit/717d3ff7d0ba72d239892dee562b401cdf90e418))\n* **uiView:**\n  * Do NOT autoscroll when autoscroll attr is missing ([affe5bd7](https://github.com/angular-ui/ui-router/commit/affe5bd785cdc3f02b7a9f64a52e3900386ec3a0), closes [#807](https://github.com/angular-ui/ui-router/issues/807))\n  * Refactoring uiView directive to copy ngView logic ([548fab6a](https://github.com/angular-ui/ui-router/commit/548fab6ab9debc9904c5865c8bc68b4fc3271dd0), closes [#857](https://github.com/angular-ui/ui-router/issues/857), [#552](https://github.com/angular-ui/ui-router/issues/552))\n\n\n#### Features\n\n* **$state:** includes() allows glob patterns for state matching. ([2d5f6b37](https://github.com/angular-ui/ui-router/commit/2d5f6b37191a3135f4a6d9e8f344c54edcdc065b))\n* **UrlMatcher:** Add support for case insensitive url matching ([642d5247](https://github.com/angular-ui/ui-router/commit/642d524799f604811e680331002feec7199a1fb5))\n* **uiSref:** add support for transition options ([2ed7a728](https://github.com/angular-ui/ui-router/commit/2ed7a728cee6854b38501fbc1df6139d3de5b28a))\n* **uiView:** add controllerAs config with function ([1ee7334a](https://github.com/angular-ui/ui-router/commit/1ee7334a73efeccc9b95340e315cdfd59944762d))\n\n\n### 0.2.9 (2014-01-17)\n\n\nThis release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower.\n\n\n### 0.2.8 (2014-01-16)\n\n\n#### Bug Fixes\n\n* **$state:** allow null to be passed as 'params' param ([094dc30e](https://github.com/angular-ui/ui-router/commit/094dc30e883e1bd14e50a475553bafeaade3b178))\n* **$state.go:** param inheritance shouldn't inherit from siblings ([aea872e0](https://github.com/angular-ui/ui-router/commit/aea872e0b983cb433436ce5875df10c838fccedb))\n* **bower.json:** fixes bower.json ([eed3cc4d](https://github.com/angular-ui/ui-router/commit/eed3cc4d4dfef1d3ef84b9fd063127538ebf59d3))\n* **uiSrefActive:** annotate controller injection ([85921422](https://github.com/angular-ui/ui-router/commit/85921422ff7fb0effed358136426d616cce3d583), closes [#671](https://github.com/angular-ui/ui-router/issues/671))\n* **uiView:**\n  * autoscroll tests pass on 1.2.4 & 1.1.5 ([86eacac0](https://github.com/angular-ui/ui-router/commit/86eacac09ca5e9000bd3b9c7ba6e2cc95d883a3a))\n  * don't animate initial load ([83b6634d](https://github.com/angular-ui/ui-router/commit/83b6634d27942ca74766b2b1244a7fc52c5643d9))\n  * test pass against 1.0.8 and 1.2.4 ([a402415a](https://github.com/angular-ui/ui-router/commit/a402415a2a28b360c43b9fe8f4f54c540f6c33de))\n  * it should autoscroll when expr is missing. ([8bb9e27a](https://github.com/angular-ui/ui-router/commit/8bb9e27a2986725f45daf44c4c9f846385095aff))\n\n\n#### Features\n\n* **uiSref:** add target attribute behaviour ([c12bf9a5](https://github.com/angular-ui/ui-router/commit/c12bf9a520d30d70294e3d82de7661900f8e394e))\n* **uiView:**\n  * merge autoscroll expression test. ([b89e0f87](https://github.com/angular-ui/ui-router/commit/b89e0f871d5cc35c10925ede986c10684d5c9252))\n  * cache and test autoscroll expression ([ee262282](https://github.com/angular-ui/ui-router/commit/ee2622828c2ce83807f006a459ac4e11406d9258))\n"
  },
  {
    "path": "client/components/angular-ui-router/CONTRIBUTING.md",
    "content": "\n# Report an Issue\n\nHelp us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure\nit hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues)\nto see if someone's reported one similar to yours.\n\nIf not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code\nas possible: the more minimalist, the faster we can debug it).\n\nNext, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem,\nand provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to\nthat plunkr you created!\n\n**Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure\nis a bug, it's best to talk it out on\n[StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This\nkeeps development streamlined, and helps us focus on building great software.\n\n\nIssues only! |\n-------------|\nPlease keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). |\n\n####Purple Labels\nA purple label means that **you** need to take some further action.  \n - ![Not Actionable - Need Info](http://angular-ui.github.io/ui-router/images/notactionable.png): Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue.\n - ![Plunkr Please](http://angular-ui.github.io/ui-router/images/plunkrplease.png): Please [create a plunkr](http://bit.ly/UIR-Plunk)\n - ![StackOverflow](http://angular-ui.github.io/ui-router/images/stackoverflow.png): We suspect your issue is really a help request, or could be answered by the community.  Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router).  If you determine that is an actual issue, please explain why.\n \nIf your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately.\n\n# Contribute\n\n**(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine.\n\n**(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed.\n\n**(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea.\n\n**(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules:\n\n- *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests\n- Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one\n- Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release.\n- Changes should always respect the coding style of the project\n\n\n\n# Developing\n\nUI-Router uses <code>grunt >= 0.4.x</code>. Make sure to upgrade your environment and read the\n[Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4).\n\nDependencies for building from source and running tests:\n\n* [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli`\n* Then, install the development dependencies by running `$ npm install` from the project directory\n\nThere are a number of targets in the gruntfile that are used to generating different builds:\n\n* `grunt`: Perform a normal build, runs jshint and karma tests\n* `grunt build`: Perform a normal build\n* `grunt dist`: Perform a clean build and generate documentation\n* `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes.\n"
  },
  {
    "path": "client/components/angular-ui-router/LICENSE",
    "content": "The MIT License\n\nCopyright (c) 2014 The AngularUI Team, Karsten Sperling\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "client/components/angular-ui-router/README.md",
    "content": "# AngularUI Router &nbsp;[![Build Status](https://travis-ci.org/angular-ui/ui-router.svg?branch=master)](https://travis-ci.org/angular-ui/ui-router)\n\n#### The de-facto solution to flexible routing with nested views\n---\n**[Download 0.2.11](http://angular-ui.github.io/ui-router/release/angular-ui-router.js)** (or **[Minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js)**) **|**\n**[Guide](https://github.com/angular-ui/ui-router/wiki) |**\n**[API](http://angular-ui.github.io/ui-router/site) |**\n**[Sample](http://angular-ui.github.com/ui-router/sample/) ([Src](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) |**\n**[FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) |**\n**[Resources](#resources) |**\n**[Report an Issue](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#report-an-issue) |**\n**[Contribute](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#contribute) |**\n**[Help!](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) |**\n**[Discuss](https://groups.google.com/forum/#!categories/angular-ui/router)**\n\n---\n\nAngularUI Router is a routing framework for [AngularJS](http://angularjs.org), which allows you to organize the\nparts of your interface into a [*state machine*](https://en.wikipedia.org/wiki/Finite-state_machine). Unlike the\n[`$route` service](http://docs.angularjs.org/api/ngRoute.$route) in the Angular ngRoute module, which is organized around URL\nroutes, UI-Router is organized around [*states*](https://github.com/angular-ui/ui-router/wiki),\nwhich may optionally have routes, as well as other behavior, attached.\n\nStates are bound to *named*, *nested* and *parallel views*, allowing you to powerfully manage your application's interface.\n\nCheck out the sample app: http://angular-ui.github.io/ui-router/sample/\n\n-\n**Note:** *UI-Router is under active development. As such, while this library is well-tested, the API may change. Consider using it in production applications only if you're comfortable following a changelog and updating your usage accordingly.*\n\n\n## Get Started\n\n**(1)** Get UI-Router in one of the following ways:\n - clone & [build](CONTRIBUTING.md#developing) this repository\n - [download the release](http://angular-ui.github.io/ui-router/release/angular-ui-router.js) (or [minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js))\n - via **[Bower](http://bower.io/)**: by running `$ bower install angular-ui-router` from your console\n - or via **[npm](https://www.npmjs.org/)**: by running `$ npm install angular-ui-router` from your console\n - or via **[Component](https://github.com/component/component)**: by running `$ component install angular-ui/ui-router` from your console\n\n**(2)** Include `angular-ui-router.js` (or `angular-ui-router.min.js`) in your `index.html`, after including Angular itself (For Component users: ignore this step)\n\n**(3)** Add `'ui.router'` to your main module's list of dependencies (For Component users: replace `'ui.router'` with `require('angular-ui-router')`)\n\nWhen you're done, your setup should look similar to the following:\n\n>\n```html\n<!doctype html>\n<html ng-app=\"myApp\">\n<head>\n    <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js\"></script>\n    <script src=\"js/angular-ui-router.min.js\"></script>\n    <script>\n        var myApp = angular.module('myApp', ['ui.router']);\n        // For Component users, it should look like this:\n        // var myApp = angular.module('myApp', [require('angular-ui-router')]);\n    </script>\n    ...\n</head>\n<body>\n    ...\n</body>\n</html>\n```\n\n### [Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)\n\nThe majority of UI-Router's power is in its ability to nest states & views.\n\n**(1)** First, follow the [setup](#get-started) instructions detailed above.\n\n**(2)** Then, add a [`ui-view` directive](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-view) to the `<body />` of your app.\n\n>\n```html\n<!-- index.html -->\n<body>\n    <div ui-view></div>\n    <!-- We'll also add some navigation: -->\n    <a ui-sref=\"state1\">State 1</a>\n    <a ui-sref=\"state2\">State 2</a>\n</body>\n```\n\n**(3)** You'll notice we also added some links with [`ui-sref` directives](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref). In addition to managing state transitions, this directive auto-generates the `href` attribute of the `<a />` element it's attached to, if the corresponding state has a URL. Next we'll add some templates. These will plug into the `ui-view` within `index.html`. Notice that they have their own `ui-view` as well! That is the key to nesting states and views.\n\n>\n```html\n<!-- partials/state1.html -->\n<h1>State 1</h1>\n<hr/>\n<a ui-sref=\"state1.list\">Show List</a>\n<div ui-view></div>\n```\n```html\n<!-- partials/state2.html -->\n<h1>State 2</h1>\n<hr/>\n<a ui-sref=\"state2.list\">Show List</a>\n<div ui-view></div>\n```\n\n**(4)** Next, we'll add some child templates. *These* will get plugged into the `ui-view` of their parent state templates.\n\n>\n```html\n<!-- partials/state1.list.html -->\n<h3>List of State 1 Items</h3>\n<ul>\n  <li ng-repeat=\"item in items\">{{ item }}</li>\n</ul>\n```\n\n>\n```html\n<!-- partials/state2.list.html -->\n<h3>List of State 2 Things</h3>\n<ul>\n  <li ng-repeat=\"thing in things\">{{ thing }}</li>\n</ul>\n```\n\n**(5)** Finally, we'll wire it all up with `$stateProvider`. Set up your states in the module config, as in the following:\n\n\n>\n```javascript\nmyApp.config(function($stateProvider, $urlRouterProvider) {\n  //\n  // For any unmatched url, redirect to /state1\n  $urlRouterProvider.otherwise(\"/state1\");\n  //\n  // Now set up the states\n  $stateProvider\n    .state('state1', {\n      url: \"/state1\",\n      templateUrl: \"partials/state1.html\"\n    })\n    .state('state1.list', {\n      url: \"/list\",\n      templateUrl: \"partials/state1.list.html\",\n      controller: function($scope) {\n        $scope.items = [\"A\", \"List\", \"Of\", \"Items\"];\n      }\n    })\n    .state('state2', {\n      url: \"/state2\",\n      templateUrl: \"partials/state2.html\"\n    })\n    .state('state2.list', {\n      url: \"/list\",\n      templateUrl: \"partials/state2.list.html\",\n      controller: function($scope) {\n        $scope.things = [\"A\", \"Set\", \"Of\", \"Things\"];\n      }\n    });\n});\n```\n\n**(6)** See this quick start example in action.\n>**[Go to Quick Start Plunker for Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)**\n\n**(7)** This only scratches the surface\n>**[Dive Deeper!](https://github.com/angular-ui/ui-router/wiki)**\n\n\n### [Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)\n\nAnother great feature is the ability to have multiple `ui-view`s view per template.\n\n**Pro Tip:** *While multiple parallel views are a powerful feature, you'll often be able to manage your\ninterfaces more effectively by nesting your views, and pairing those views with nested states.*\n\n**(1)** Follow the [setup](#get-started) instructions detailed above.\n\n**(2)** Add one or more `ui-view` to your app, give them names.\n>\n```html\n<!-- index.html -->\n<body>\n    <div ui-view=\"viewA\"></div>\n    <div ui-view=\"viewB\"></div>\n    <!-- Also a way to navigate -->\n    <a ui-sref=\"route1\">Route 1</a>\n    <a ui-sref=\"route2\">Route 2</a>\n</body>\n```\n\n**(3)** Set up your states in the module config:\n>\n```javascript\nmyApp.config(function($stateProvider) {\n  $stateProvider\n    .state('index', {\n      url: \"\",\n      views: {\n        \"viewA\": { template: \"index.viewA\" },\n        \"viewB\": { template: \"index.viewB\" }\n      }\n    })\n    .state('route1', {\n      url: \"/route1\",\n      views: {\n        \"viewA\": { template: \"route1.viewA\" },\n        \"viewB\": { template: \"route1.viewB\" }\n      }\n    })\n    .state('route2', {\n      url: \"/route2\",\n      views: {\n        \"viewA\": { template: \"route2.viewA\" },\n        \"viewB\": { template: \"route2.viewB\" }\n      }\n    })\n});\n```\n\n**(4)** See this quick start example in action.\n>**[Go to Quick Start Plunker for Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)**\n\n\n## Resources\n\n* [In-Depth Guide](https://github.com/angular-ui/ui-router/wiki)\n* [API Reference](http://angular-ui.github.io/ui-router/site)\n* [Sample App](http://angular-ui.github.com/ui-router/sample/) ([Source](https://github.com/angular-ui/ui-router/tree/gh-pages/sample))\n* [FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions)\n* [Slides comparing ngRoute to ui-router](http://slid.es/timkindberg/ui-router#/)\n* [UI-Router Extras / Addons](http://christopherthielen.github.io/ui-router-extras/#/home) (@christopherthielen)\n \n### Videos\n\n* [Introduction Video](https://egghead.io/lessons/angularjs-introduction-ui-router) (egghead.io)\n* [Tim Kindberg on Angular UI-Router](https://www.youtube.com/watch?v=lBqiZSemrqg)\n* [Activating States](https://egghead.io/lessons/angularjs-ui-router-activating-states) (egghead.io)\n* [Learn Angular.js using UI-Router](http://youtu.be/QETUuZ27N0w) (LearnCode.academy)\n\n\n\n## Reporting issues and Contributing\n\nPlease read our [Contributor guidelines](CONTRIBUTING.md) before reporting an issue or creating a pull request.\n"
  },
  {
    "path": "client/components/angular-ui-router/api/angular-ui-router.d.ts",
    "content": "// Type definitions for Angular JS 1.1.5+ (ui.router module)\n// Project: https://github.com/angular-ui/ui-router\n// Definitions by: Michel Salib <https://github.com/michelsalib>\n// Definitions: https://github.com/borisyankov/DefinitelyTyped\n\ndeclare module ng.ui {\n\n    interface IState {\n        name?: string;\n        template?: string;\n        templateUrl?: any; // string || () => string\n        templateProvider?: any; // () => string || IPromise<string>\n        controller?: any;\n        controllerAs?: string;    \n        controllerProvider?: any;\n        resolve?: {};\n        url?: string;\n        params?: any;\n        views?: {};\n        abstract?: boolean;\n        onEnter?: (...args: any[]) => void;\n        onExit?: (...args: any[]) => void;\n        data?: any;\n        reloadOnSearch?: boolean;\n    }\n\n    interface ITypedState<T> extends IState {\n        data?: T;\n    }\n\n    interface IStateProvider extends IServiceProvider {\n        state(name: string, config: IState): IStateProvider;\n        state(config: IState): IStateProvider;\n        decorator(name?: string, decorator?: (state: IState, parent: Function) => any): any;\n    }\n\n    interface IUrlMatcher {\n        concat(pattern: string): IUrlMatcher;\n        exec(path: string, searchParams: {}): {};\n        parameters(): string[];\n        format(values: {}): string;\n    }\n\n    interface IUrlMatcherFactory {\n        compile(pattern: string): IUrlMatcher;\n        isMatcher(o: any): boolean;\n    }\n\n    interface IUrlRouterProvider extends IServiceProvider {\n        when(whenPath: RegExp, handler: Function): IUrlRouterProvider;\n        when(whenPath: RegExp, handler: any[]): IUrlRouterProvider;\n        when(whenPath: RegExp, toPath: string): IUrlRouterProvider;\n        when(whenPath: IUrlMatcher, hanlder: Function): IUrlRouterProvider;\n        when(whenPath: IUrlMatcher, handler: any[]): IUrlRouterProvider;\n        when(whenPath: IUrlMatcher, toPath: string): IUrlRouterProvider;\n        when(whenPath: string, handler: Function): IUrlRouterProvider;\n        when(whenPath: string, handler: any[]): IUrlRouterProvider;\n        when(whenPath: string, toPath: string): IUrlRouterProvider;\n        otherwise(handler: Function): IUrlRouterProvider;\n        otherwise(handler: any[]): IUrlRouterProvider;\n        otherwise(path: string): IUrlRouterProvider;\n        rule(handler: Function): IUrlRouterProvider;\n        rule(handler: any[]): IUrlRouterProvider;\n    }\n\n    interface IStateOptions {\n        location?: any;\n        inherit?: boolean;\n        relative?: IState;\n        notify?: boolean;\n        reload?: boolean;\n    }\n\n    interface IHrefOptions {\n        lossy?: boolean;\n        inherit?: boolean;\n        relative?: IState;\n        absolute?: boolean;\n    }\n\n    interface IStateService {\n        go(to: string, params?: {}, options?: IStateOptions): IPromise<any>;\n        transitionTo(state: string, params?: {}, updateLocation?: boolean): void;\n        transitionTo(state: string, params?: {}, options?: IStateOptions): void;\n        includes(state: string, params?: {}): boolean;\n        is(state:string, params?: {}): boolean;\n        is(state: IState, params?: {}): boolean;\n        href(state: IState, params?: {}, options?: IHrefOptions): string;\n        href(state: string, params?: {}, options?: IHrefOptions): string;\n        get(state: string): IState;\n        get(): IState[];\n        current: IState;\n        params: any;\n        reload(): void;\n    }\n\n    interface IStateParamsService {\n        [key: string]: any;\n    }\n\n    interface IStateParams {\n        [key: string]: any;\n    }\n\n    interface IUrlRouterService {\n        /*\n         * Triggers an update; the same update that happens when the address bar\n         * url changes, aka $locationChangeSuccess.\n         *\n         * This method is useful when you need to use preventDefault() on the\n         * $locationChangeSuccess event, perform some custom logic (route protection,\n         * auth, config, redirection, etc) and then finally proceed with the transition\n         * by calling $urlRouter.sync().\n         *\n         */\n        sync(): void;\n    }\n\n    interface IUiViewScrollProvider {\n        /*\n         * Reverts back to using the core $anchorScroll service for scrolling \n         * based on the url anchor.\n         */\n        useAnchorScroll(): void;\n    }\n}\n"
  },
  {
    "path": "client/components/angular-ui-router/bower.json",
    "content": "{\n  \"name\": \"angular-ui-router\",\n  \"version\": \"0.2.13\",\n  \"main\": \"./release/angular-ui-router.js\",\n  \"dependencies\": {\n    \"angular\": \">= 1.0.8\"\n  },\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"component.json\",\n    \"package.json\",\n    \"lib\",\n    \"config\",\n    \"sample\",\n    \"test\",\n    \"tests\",\n    \"ngdoc_assets\",\n    \"Gruntfile.js\",\n    \"files.js\"\n  ]\n}\n"
  },
  {
    "path": "client/components/angular-ui-router/release/angular-ui-router.js",
    "content": "/**\n * State-based routing for AngularJS\n * @version v0.2.13\n * @link http://angular-ui.github.com/\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n\n/* commonjs package manager support (eg componentjs) */\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports){\n  module.exports = 'ui.router';\n}\n\n(function (window, angular, undefined) {\n/*jshint globalstrict:true*/\n/*global angular:false*/\n'use strict';\n\nvar isDefined = angular.isDefined,\n    isFunction = angular.isFunction,\n    isString = angular.isString,\n    isObject = angular.isObject,\n    isArray = angular.isArray,\n    forEach = angular.forEach,\n    extend = angular.extend,\n    copy = angular.copy;\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, { prototype: parent }))(), extra);\n}\n\nfunction merge(dst) {\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        if (!dst.hasOwnProperty(key)) dst[key] = value;\n      });\n    }\n  });\n  return dst;\n}\n\n/**\n * Finds the common ancestor path between two states.\n *\n * @param {Object} first The first state.\n * @param {Object} second The second state.\n * @return {Array} Returns an array of state names in descending order, not including the root.\n */\nfunction ancestors(first, second) {\n  var path = [];\n\n  for (var n in first.path) {\n    if (first.path[n] !== second.path[n]) break;\n    path.push(first.path[n]);\n  }\n  return path;\n}\n\n/**\n * IE8-safe wrapper for `Object.keys()`.\n *\n * @param {Object} object A JavaScript object.\n * @return {Array} Returns the keys of the object as an array.\n */\nfunction objectKeys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n  var result = [];\n\n  angular.forEach(object, function(val, key) {\n    result.push(key);\n  });\n  return result;\n}\n\n/**\n * IE8-safe wrapper for `Array.prototype.indexOf()`.\n *\n * @param {Array} array A JavaScript array.\n * @param {*} value A value to search the array for.\n * @return {Number} Returns the array index value of `value`, or `-1` if not present.\n */\nfunction indexOf(array, value) {\n  if (Array.prototype.indexOf) {\n    return array.indexOf(value, Number(arguments[2]) || 0);\n  }\n  var len = array.length >>> 0, from = Number(arguments[2]) || 0;\n  from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n\n  if (from < 0) from += len;\n\n  for (; from < len; from++) {\n    if (from in array && array[from] === value) return from;\n  }\n  return -1;\n}\n\n/**\n * Merges a set of parameters with all parameters inherited between the common parents of the\n * current state and a given destination state.\n *\n * @param {Object} currentParams The value of the current state parameters ($stateParams).\n * @param {Object} newParams The set of parameters which will be composited with inherited params.\n * @param {Object} $current Internal definition of object representing the current state.\n * @param {Object} $to Internal definition of object representing state to transition to.\n */\nfunction inheritParams(currentParams, newParams, $current, $to) {\n  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];\n\n  for (var i in parents) {\n    if (!parents[i].params) continue;\n    parentParams = objectKeys(parents[i].params);\n    if (!parentParams.length) continue;\n\n    for (var j in parentParams) {\n      if (indexOf(inheritList, parentParams[j]) >= 0) continue;\n      inheritList.push(parentParams[j]);\n      inherited[parentParams[j]] = currentParams[parentParams[j]];\n    }\n  }\n  return extend({}, inherited, newParams);\n}\n\n/**\n * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.\n *\n * @param {Object} a The first object.\n * @param {Object} b The second object.\n * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,\n *                     it defaults to the list of keys in `a`.\n * @return {Boolean} Returns `true` if the keys match, otherwise `false`.\n */\nfunction equalForKeys(a, b, keys) {\n  if (!keys) {\n    keys = [];\n    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility\n  }\n\n  for (var i=0; i<keys.length; i++) {\n    var k = keys[i];\n    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized\n  }\n  return true;\n}\n\n/**\n * Returns the subset of an object, based on a list of keys.\n *\n * @param {Array} keys\n * @param {Object} values\n * @return {Boolean} Returns a subset of `values`.\n */\nfunction filterByKeys(keys, values) {\n  var filtered = {};\n\n  forEach(keys, function (name) {\n    filtered[name] = values[name];\n  });\n  return filtered;\n}\n\n// like _.indexBy\n// when you know that your index values will be unique, or you want last-one-in to win\nfunction indexBy(array, propName) {\n  var result = {};\n  forEach(array, function(item) {\n    result[item[propName]] = item;\n  });\n  return result;\n}\n\n// extracted from underscore.js\n// Return a copy of the object only containing the whitelisted properties.\nfunction pick(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  forEach(keys, function(key) {\n    if (key in obj) copy[key] = obj[key];\n  });\n  return copy;\n}\n\n// extracted from underscore.js\n// Return a copy of the object omitting the blacklisted properties.\nfunction omit(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  for (var key in obj) {\n    if (indexOf(keys, key) == -1) copy[key] = obj[key];\n  }\n  return copy;\n}\n\nfunction pluck(collection, key) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = isFunction(key) ? key(val) : val[key];\n  });\n  return result;\n}\n\nfunction filter(collection, callback) {\n  var array = isArray(collection);\n  var result = array ? [] : {};\n  forEach(collection, function(val, i) {\n    if (callback(val, i)) {\n      result[array ? result.length : i] = val;\n    }\n  });\n  return result;\n}\n\nfunction map(collection, callback) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = callback(val, i);\n  });\n  return result;\n}\n\n/**\n * @ngdoc overview\n * @name ui.router.util\n *\n * @description\n * # ui.router.util sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n *\n */\nangular.module('ui.router.util', ['ng']);\n\n/**\n * @ngdoc overview\n * @name ui.router.router\n * \n * @requires ui.router.util\n *\n * @description\n * # ui.router.router sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n */\nangular.module('ui.router.router', ['ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router.state\n * \n * @requires ui.router.router\n * @requires ui.router.util\n *\n * @description\n * # ui.router.state sub-module\n *\n * This module is a dependency of the main ui.router module. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n * \n */\nangular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router\n *\n * @requires ui.router.state\n *\n * @description\n * # ui.router\n * \n * ## The main module for ui.router \n * There are several sub-modules included with the ui.router module, however only this module is needed\n * as a dependency within your angular app. The other modules are for organization purposes. \n *\n * The modules are:\n * * ui.router - the main \"umbrella\" module\n * * ui.router.router - \n * \n * *You'll need to include **only** this module as the dependency within your angular app.*\n * \n * <pre>\n * <!doctype html>\n * <html ng-app=\"myApp\">\n * <head>\n *   <script src=\"js/angular.js\"></script>\n *   <!-- Include the ui-router script -->\n *   <script src=\"js/angular-ui-router.min.js\"></script>\n *   <script>\n *     // ...and add 'ui.router' as a dependency\n *     var myApp = angular.module('myApp', ['ui.router']);\n *   </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * </pre>\n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n\n/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve(  $q,    $injector) {\n  \n  var VISIT_IN_PROGRESS = 1,\n      VISIT_DONE = 2,\n      NOTHING = {},\n      NO_DEPENDENCIES = [],\n      NO_LOCALS = NOTHING,\n      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n  \n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#study\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Studies a set of invocables that are likely to be used multiple times.\n   * <pre>\n   * $resolve.study(invocables)(locals, parent, self)\n   * </pre>\n   * is equivalent to\n   * <pre>\n   * $resolve.resolve(invocables, locals, parent, self)\n   * </pre>\n   * but the former is more efficient (in fact `resolve` just calls `study` \n   * internally).\n   *\n   * @param {object} invocables Invocable objects\n   * @return {function} a function to pass in locals, parent and self\n   */\n  this.study = function (invocables) {\n    if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n    var invocableKeys = objectKeys(invocables || {});\n    \n    // Perform a topological sort of invocables to build an ordered plan\n    var plan = [], cycle = [], visited = {};\n    function visit(value, key) {\n      if (visited[key] === VISIT_DONE) return;\n      \n      cycle.push(key);\n      if (visited[key] === VISIT_IN_PROGRESS) {\n        cycle.splice(0, indexOf(cycle, key));\n        throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n      }\n      visited[key] = VISIT_IN_PROGRESS;\n      \n      if (isString(value)) {\n        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n      } else {\n        var params = $injector.annotate(value);\n        forEach(params, function (param) {\n          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n        });\n        plan.push(key, value, params);\n      }\n      \n      cycle.pop();\n      visited[key] = VISIT_DONE;\n    }\n    forEach(invocables, visit);\n    invocables = cycle = visited = null; // plan is all that's required\n    \n    function isResolve(value) {\n      return isObject(value) && value.then && value.$$promises;\n    }\n    \n    return function (locals, parent, self) {\n      if (isResolve(locals) && self === undefined) {\n        self = parent; parent = locals; locals = null;\n      }\n      if (!locals) locals = NO_LOCALS;\n      else if (!isObject(locals)) {\n        throw new Error(\"'locals' must be an object\");\n      }       \n      if (!parent) parent = NO_PARENT;\n      else if (!isResolve(parent)) {\n        throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n      }\n      \n      // To complete the overall resolution, we have to wait for the parent\n      // promise and for the promise for each invokable in our plan.\n      var resolution = $q.defer(),\n          result = resolution.promise,\n          promises = result.$$promises = {},\n          values = extend({}, locals),\n          wait = 1 + plan.length/3,\n          merged = false;\n          \n      function done() {\n        // Merge parent values we haven't got yet and publish our own $$values\n        if (!--wait) {\n          if (!merged) merge(values, parent.$$values); \n          result.$$values = values;\n          result.$$promises = result.$$promises || true; // keep for isResolve()\n          delete result.$$inheritedValues;\n          resolution.resolve(values);\n        }\n      }\n      \n      function fail(reason) {\n        result.$$failure = reason;\n        resolution.reject(reason);\n      }\n\n      // Short-circuit if parent has already failed\n      if (isDefined(parent.$$failure)) {\n        fail(parent.$$failure);\n        return result;\n      }\n      \n      if (parent.$$inheritedValues) {\n        merge(values, omit(parent.$$inheritedValues, invocableKeys));\n      }\n\n      // Merge parent values if the parent has already resolved, or merge\n      // parent promises and wait if the parent resolve is still in progress.\n      extend(promises, parent.$$promises);\n      if (parent.$$values) {\n        merged = merge(values, omit(parent.$$values, invocableKeys));\n        result.$$inheritedValues = omit(parent.$$values, invocableKeys);\n        done();\n      } else {\n        if (parent.$$inheritedValues) {\n          result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);\n        }        \n        parent.then(done, fail);\n      }\n      \n      // Process each invocable in the plan, but ignore any where a local of the same name exists.\n      for (var i=0, ii=plan.length; i<ii; i+=3) {\n        if (locals.hasOwnProperty(plan[i])) done();\n        else invoke(plan[i], plan[i+1], plan[i+2]);\n      }\n      \n      function invoke(key, invocable, params) {\n        // Create a deferred for this invocation. Failures will propagate to the resolution as well.\n        var invocation = $q.defer(), waitParams = 0;\n        function onfailure(reason) {\n          invocation.reject(reason);\n          fail(reason);\n        }\n        // Wait for any parameter that we have a promise for (either from parent or from this\n        // resolve; in that case study() will have made sure it's ordered before us in the plan).\n        forEach(params, function (dep) {\n          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {\n            waitParams++;\n            promises[dep].then(function (result) {\n              values[dep] = result;\n              if (!(--waitParams)) proceed();\n            }, onfailure);\n          }\n        });\n        if (!waitParams) proceed();\n        function proceed() {\n          if (isDefined(result.$$failure)) return;\n          try {\n            invocation.resolve($injector.invoke(invocable, self, values));\n            invocation.promise.then(function (result) {\n              values[key] = result;\n              done();\n            }, onfailure);\n          } catch (e) {\n            onfailure(e);\n          }\n        }\n        // Publish promise synchronously; invocations further down in the plan may depend on it.\n        promises[key] = invocation.promise;\n      }\n      \n      return result;\n    };\n  };\n  \n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#resolve\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Resolves a set of invocables. An invocable is a function to be invoked via \n   * `$injector.invoke()`, and can have an arbitrary number of dependencies. \n   * An invocable can either return a value directly,\n   * or a `$q` promise. If a promise is returned it will be resolved and the \n   * resulting value will be used instead. Dependencies of invocables are resolved \n   * (in this order of precedence)\n   *\n   * - from the specified `locals`\n   * - from another invocable that is part of this `$resolve` call\n   * - from an invocable that is inherited from a `parent` call to `$resolve` \n   *   (or recursively\n   * - from any ancestor `$resolve` of that parent).\n   *\n   * The return value of `$resolve` is a promise for an object that contains \n   * (in this order of precedence)\n   *\n   * - any `locals` (if specified)\n   * - the resolved return values of all injectables\n   * - any values inherited from a `parent` call to `$resolve` (if specified)\n   *\n   * The promise will resolve after the `parent` promise (if any) and all promises \n   * returned by injectables have been resolved. If any invocable \n   * (or `$injector.invoke`) throws an exception, or if a promise returned by an \n   * invocable is rejected, the `$resolve` promise is immediately rejected with the \n   * same error. A rejection of a `parent` promise (if specified) will likewise be \n   * propagated immediately. Once the `$resolve` promise has been rejected, no \n   * further invocables will be called.\n   * \n   * Cyclic dependencies between invocables are not permitted and will caues `$resolve`\n   * to throw an error. As a special case, an injectable can depend on a parameter \n   * with the same name as the injectable, which will be fulfilled from the `parent` \n   * injectable of the same name. This allows inherited values to be decorated. \n   * Note that in this case any other injectable in the same `$resolve` with the same\n   * dependency would see the decorated value, not the inherited value.\n   *\n   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an \n   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) \n   * exception.\n   *\n   * Invocables are invoked eagerly as soon as all dependencies are available. \n   * This is true even for dependencies inherited from a `parent` call to `$resolve`.\n   *\n   * As a special case, an invocable can be a string, in which case it is taken to \n   * be a service name to be passed to `$injector.get()`. This is supported primarily \n   * for backwards-compatibility with the `resolve` property of `$routeProvider` \n   * routes.\n   *\n   * @param {object} invocables functions to invoke or \n   * `$injector` services to fetch.\n   * @param {object} locals  values to make available to the injectables\n   * @param {object} parent  a promise returned by another call to `$resolve`.\n   * @param {object} self  the `this` for the invoked methods\n   * @return {object} Promise for an object that contains the resolved return value\n   * of all invocables, as well as any inherited and local values.\n   */\n  this.resolve = function (invocables, locals, parent, self) {\n    return this.study(invocables)(locals, parent, self);\n  };\n}\n\nangular.module('ui.router.util').service('$resolve', $Resolve);\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$templateFactory\n *\n * @requires $http\n * @requires $templateCache\n * @requires $injector\n *\n * @description\n * Service. Manages loading of templates.\n */\n$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];\nfunction $TemplateFactory(  $http,   $templateCache,   $injector) {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromConfig\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a configuration object. \n   *\n   * @param {object} config Configuration object for which to load a template. \n   * The following properties are search in the specified order, and the first one \n   * that is defined is used to create the template:\n   *\n   * @param {string|object} config.template html string template or function to \n   * load via {@link ui.router.util.$templateFactory#fromString fromString}.\n   * @param {string|object} config.templateUrl url to load or a function returning \n   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.\n   * @param {Function} config.templateProvider function to invoke via \n   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.\n   * @param {object} params  Parameters to pass to the template function.\n   * @param {object} locals Locals to pass to `invoke` if the template is loaded \n   * via a `templateProvider`. Defaults to `{ params: params }`.\n   *\n   * @return {string|object}  The template html as a string, or a promise for \n   * that string,or `null` if no template is configured.\n   */\n  this.fromConfig = function (config, params, locals) {\n    return (\n      isDefined(config.template) ? this.fromString(config.template, params) :\n      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :\n      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :\n      null\n    );\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromString\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a string or a function returning a string.\n   *\n   * @param {string|object} template html template as a string or function that \n   * returns an html template as a string.\n   * @param {object} params Parameters to pass to the template function.\n   *\n   * @return {string|object} The template html as a string, or a promise for that \n   * string.\n   */\n  this.fromString = function (template, params) {\n    return isFunction(template) ? template(params) : template;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   * \n   * @description\n   * Loads a template from the a URL via `$http` and `$templateCache`.\n   *\n   * @param {string|Function} url url of the template to load, or a function \n   * that returns a url.\n   * @param {Object} params Parameters to pass to the url function.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromUrl = function (url, params) {\n    if (isFunction(url)) url = url(params);\n    if (url == null) return null;\n    else return $http\n        .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})\n        .then(function(response) { return response.data; });\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromProvider\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template by invoking an injectable provider function.\n   *\n   * @param {Function} provider Function to invoke via `$injector.invoke`\n   * @param {Object} params Parameters for the template.\n   * @param {Object} locals Locals to pass to `invoke`. Defaults to \n   * `{ params: params }`.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromProvider = function (provider, params, locals) {\n    return $injector.invoke(provider, null, locals || { params: params });\n  };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n\nvar $$UMFP; // reference to $UrlMatcherFactoryProvider\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n * \n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the\n *   regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon \n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n * \n * Examples:\n * \n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n *   trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n *   parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n *   path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n *   in the built-in  `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n * @param {string} pattern  The pattern to compile into a matcher.\n * @param {Object} config  A configuration object hash:\n * @param {Object=} parentMatcher Used to concatenate the pattern/config onto\n *   an existing UrlMatcher\n *\n * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.\n * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.\n *\n * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any\n *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n *   non-null) will start with this prefix.\n *\n * @property {string} source  The pattern that was passed into the constructor\n *\n * @property {string} sourcePath  The path portion of the source property\n *\n * @property {string} sourceSearch  The search portion of the source property\n *\n * @property {string} regex  The constructed regex that will be used to match against the url when \n *   it is time to determine which url will match.\n *\n * @returns {Object}  New `UrlMatcher` object\n */\nfunction UrlMatcher(pattern, config, parentMatcher) {\n  config = extend({ params: {} }, isObject(config) ? config : {});\n\n  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n  //   '*' name\n  //   ':' name\n  //   '{' name '}'\n  //   '{' name ':' regexp '}'\n  // The regular expression is somewhat complicated due to the need to allow curly braces\n  // inside the regular expression. The placeholder regexp breaks down as follows:\n  //    ([:*])([\\w\\[\\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)\n  //    \\{([\\w\\[\\]]+)(?:\\:( ... ))?\\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case\n  //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either\n  //    [^{}\\\\]+                       - anything other than curly braces or backslash\n  //    \\\\.                            - a backslash escape\n  //    \\{(?:[^{}\\\\]+|\\\\.)*\\}          - a matched set of curly braces containing other atoms\n  var placeholder       = /([:*])([\\w\\[\\]]+)|\\{([\\w\\[\\]]+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      searchPlaceholder = /([:]?)([\\w\\[\\]-]+)|\\{([\\w\\[\\]-]+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      compiled = '^', last = 0, m,\n      segments = this.segments = [],\n      parentParams = parentMatcher ? parentMatcher.params : {},\n      params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),\n      paramNames = [];\n\n  function addParameter(id, type, config, location) {\n    paramNames.push(id);\n    if (parentParams[id]) return parentParams[id];\n    if (!/^\\w+(-+\\w+)*(?:\\[\\])?$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    if (params[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    params[id] = new $$UMFP.Param(id, type, config, location);\n    return params[id];\n  }\n\n  function quoteRegExp(string, pattern, squash) {\n    var surroundPattern = ['',''], result = string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n    if (!pattern) return result;\n    switch(squash) {\n      case false: surroundPattern = ['(', ')'];   break;\n      case true:  surroundPattern = ['?(', ')?']; break;\n      default:    surroundPattern = ['(' + squash + \"|\", ')?'];  break;\n    }\n    return result + surroundPattern[0] + pattern + surroundPattern[1];\n  }\n\n  this.source = pattern;\n\n  // Split into static segments separated by path parameter placeholders.\n  // The number of segments is always 1 more than the number of parameters.\n  function matchDetails(m, isSearch) {\n    var id, regexp, segment, type, cfg, arrayMode;\n    id          = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n    cfg         = config.params[id];\n    segment     = pattern.substring(last, m.index);\n    regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);\n    type        = $$UMFP.type(regexp || \"string\") || inherit($$UMFP.type(\"string\"), { pattern: new RegExp(regexp) });\n    return {\n      id: id, regexp: regexp, segment: segment, type: type, cfg: cfg\n    };\n  }\n\n  var p, param, segment;\n  while ((m = placeholder.exec(pattern))) {\n    p = matchDetails(m, false);\n    if (p.segment.indexOf('?') >= 0) break; // we're into the search part\n\n    param = addParameter(p.id, p.type, p.cfg, \"path\");\n    compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash);\n    segments.push(p.segment);\n    last = placeholder.lastIndex;\n  }\n  segment = pattern.substring(last);\n\n  // Find any search parameter names and remove them from the last segment\n  var i = segment.indexOf('?');\n\n  if (i >= 0) {\n    var search = this.sourceSearch = segment.substring(i);\n    segment = segment.substring(0, i);\n    this.sourcePath = pattern.substring(0, last + i);\n\n    if (search.length > 0) {\n      last = 0;\n      while ((m = searchPlaceholder.exec(search))) {\n        p = matchDetails(m, true);\n        param = addParameter(p.id, p.type, p.cfg, \"search\");\n        last = placeholder.lastIndex;\n        // check if ?&\n      }\n    }\n  } else {\n    this.sourcePath = pattern;\n    this.sourceSearch = '';\n  }\n\n  compiled += quoteRegExp(segment) + (config.strict === false ? '\\/?' : '') + '$';\n  segments.push(segment);\n\n  this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);\n  this.prefix = segments[0];\n  this.$$paramNames = paramNames;\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n * <pre>\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * </pre>\n *\n * @param {string} pattern  The pattern to append.\n * @param {Object} config  An object hash of the configuration for the matcher.\n * @returns {UrlMatcher}  A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern, config) {\n  // Because order of search parameters is irrelevant, we can add our own search\n  // parameters to the end of the new pattern. Parse the new pattern by itself\n  // and then join the bits together, but it's much easier to do this on a string level.\n  var defaultConfig = {\n    caseInsensitive: $$UMFP.caseInsensitive(),\n    strict: $$UMFP.strictMode(),\n    squash: $$UMFP.defaultSquashPolicy()\n  };\n  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);\n};\n\nUrlMatcher.prototype.toString = function () {\n  return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {\n *   x: '1', q: 'hello'\n * });\n * // returns { id: 'bob', q: 'hello', r: null }\n * </pre>\n *\n * @param {string} path  The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.\n * @returns {Object}  The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n  var m = this.regexp.exec(path);\n  if (!m) return null;\n  searchParams = searchParams || {};\n\n  var paramNames = this.parameters(), nTotal = paramNames.length,\n    nPath = this.segments.length - 1,\n    values = {}, i, j, cfg, paramName;\n\n  if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n  function decodePathArray(string) {\n    function reverseString(str) { return str.split(\"\").reverse().join(\"\"); }\n    function unquoteDashes(str) { return str.replace(/\\\\-/, \"-\"); }\n\n    var split = reverseString(string).split(/-(?!\\\\)/);\n    var allReversed = map(split, reverseString);\n    return map(allReversed, unquoteDashes).reverse();\n  }\n\n  for (i = 0; i < nPath; i++) {\n    paramName = paramNames[i];\n    var param = this.params[paramName];\n    var paramVal = m[i+1];\n    // if the param value matches a pre-replace pair, replace the value before decoding.\n    for (j = 0; j < param.replace; j++) {\n      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n    }\n    if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);\n    values[paramName] = param.value(paramVal);\n  }\n  for (/**/; i < nTotal; i++) {\n    paramName = paramNames[i];\n    values[paramName] = this.params[paramName].value(searchParams[paramName]);\n  }\n\n  return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n * \n * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the\n *    pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function (param) {\n  if (!isDefined(param)) return this.$$paramNames;\n  return this.params[param] || null;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#validate\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Checks an object hash of parameters to validate their correctness according to the parameter\n * types of this `UrlMatcher`.\n *\n * @param {Object} params The object hash of parameters to validate.\n * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.\n */\nUrlMatcher.prototype.validates = function (params) {\n  return this.params.$$validates(params);\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * </pre>\n *\n * @param {Object} values  the values to substitute for the parameters in this pattern.\n * @returns {string}  the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n  values = values || {};\n  var segments = this.segments, params = this.parameters(), paramset = this.params;\n  if (!this.validates(values)) return null;\n\n  var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];\n\n  function encodeDashes(str) { // Replace dashes with encoded \"\\-\"\n    return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });\n  }\n\n  for (i = 0; i < nTotal; i++) {\n    var isPathParam = i < nPath;\n    var name = params[i], param = paramset[name], value = param.value(values[name]);\n    var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);\n    var squash = isDefaultValue ? param.squash : false;\n    var encoded = param.type.encode(value);\n\n    if (isPathParam) {\n      var nextSegment = segments[i + 1];\n      if (squash === false) {\n        if (encoded != null) {\n          if (isArray(encoded)) {\n            result += map(encoded, encodeDashes).join(\"-\");\n          } else {\n            result += encodeURIComponent(encoded);\n          }\n        }\n        result += nextSegment;\n      } else if (squash === true) {\n        var capture = result.match(/\\/$/) ? /\\/?(.*)/ : /(.*)/;\n        result += nextSegment.match(capture)[1];\n      } else if (isString(squash)) {\n        result += squash + nextSegment;\n      }\n    } else {\n      if (encoded == null || (isDefaultValue && squash !== false)) continue;\n      if (!isArray(encoded)) encoded = [ encoded ];\n      encoded = map(encoded, encodeURIComponent).join('&' + name + '=');\n      result += (search ? '&' : '?') + (name + '=' + encoded);\n      search = true;\n    }\n  }\n\n  return result;\n};\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:Type\n *\n * @description\n * Implements an interface to define custom parameter types that can be decoded from and encoded to\n * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}\n * objects when matching or formatting URLs, or comparing or validating parameter values.\n *\n * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more\n * information on registering custom types.\n *\n * @param {Object} config  A configuration object which contains the custom type definition.  The object's\n *        properties will override the default methods and/or pattern in `Type`'s public interface.\n * @example\n * <pre>\n * {\n *   decode: function(val) { return parseInt(val, 10); },\n *   encode: function(val) { return val && val.toString(); },\n *   equals: function(a, b) { return this.is(a) && a === b; },\n *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },\n *   pattern: /\\d+/\n * }\n * </pre>\n *\n * @property {RegExp} pattern The regular expression pattern used to match values of this type when\n *           coming from a substring of a URL.\n *\n * @returns {Object}  Returns a new `Type` object.\n */\nfunction Type(config) {\n  extend(this, config);\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#is\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Detects whether a value is of a particular type. Accepts a native (decoded) value\n * and determines whether it matches the current `Type` object.\n *\n * @param {*} val  The value to check.\n * @param {string} key  Optional. If the type check is happening in the context of a specific\n *        {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the\n *        parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.\n * @returns {Boolean}  Returns `true` if the value matches the type, otherwise `false`.\n */\nType.prototype.is = function(val, key) {\n  return true;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#encode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the\n * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it\n * only needs to be a representation of `val` that has been coerced to a string.\n *\n * @param {*} val  The value to encode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {string}  Returns a string representation of `val` that can be encoded in a URL.\n */\nType.prototype.encode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#decode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Converts a parameter value (from URL string or transition param) to a custom/native value.\n *\n * @param {string} val  The URL parameter value to decode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {*}  Returns a custom representation of the URL parameter value.\n */\nType.prototype.decode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#equals\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Determines whether two decoded values are equivalent.\n *\n * @param {*} a  A value to compare against.\n * @param {*} b  A value to compare against.\n * @returns {Boolean}  Returns `true` if the values are equivalent/equal, otherwise `false`.\n */\nType.prototype.equals = function(a, b) {\n  return a == b;\n};\n\nType.prototype.$subPattern = function() {\n  var sub = this.pattern.toString();\n  return sub.substr(1, sub.length - 2);\n};\n\nType.prototype.pattern = /.*/;\n\nType.prototype.toString = function() { return \"{Type:\" + this.name + \"}\"; };\n\n/*\n * Wraps an existing custom Type as an array of Type, depending on 'mode'.\n * e.g.:\n * - urlmatcher pattern \"/path?{queryParam[]:int}\"\n * - url: \"/path?queryParam=1&queryParam=2\n * - $stateParams.queryParam will be [1, 2]\n * if `mode` is \"auto\", then\n * - url: \"/path?queryParam=1 will create $stateParams.queryParam: 1\n * - url: \"/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]\n */\nType.prototype.$asArray = function(mode, isSearch) {\n  if (!mode) return this;\n  if (mode === \"auto\" && !isSearch) throw new Error(\"'auto' array mode is for query parameters only\");\n  return new ArrayType(this, mode);\n\n  function ArrayType(type, mode) {\n    function bindTo(type, callbackName) {\n      return function() {\n        return type[callbackName].apply(type, arguments);\n      };\n    }\n\n    // Wrap non-array value as array\n    function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }\n    // Unwrap array value for \"auto\" mode. Return undefined for empty array.\n    function arrayUnwrap(val) {\n      switch(val.length) {\n        case 0: return undefined;\n        case 1: return mode === \"auto\" ? val[0] : val;\n        default: return val;\n      }\n    }\n    function falsey(val) { return !val; }\n\n    // Wraps type (.is/.encode/.decode) functions to operate on each value of an array\n    function arrayHandler(callback, allTruthyMode) {\n      return function handleArray(val) {\n        val = arrayWrap(val);\n        var result = map(val, callback);\n        if (allTruthyMode === true)\n          return filter(result, falsey).length === 0;\n        return arrayUnwrap(result);\n      };\n    }\n\n    // Wraps type (.equals) functions to operate on each value of an array\n    function arrayEqualsHandler(callback) {\n      return function handleArray(val1, val2) {\n        var left = arrayWrap(val1), right = arrayWrap(val2);\n        if (left.length !== right.length) return false;\n        for (var i = 0; i < left.length; i++) {\n          if (!callback(left[i], right[i])) return false;\n        }\n        return true;\n      };\n    }\n\n    this.encode = arrayHandler(bindTo(type, 'encode'));\n    this.decode = arrayHandler(bindTo(type, 'decode'));\n    this.is     = arrayHandler(bindTo(type, 'is'), true);\n    this.equals = arrayEqualsHandler(bindTo(type, 'equals'));\n    this.pattern = type.pattern;\n    this.$arrayMode = mode;\n  }\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory\n * is also available to providers under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n  $$UMFP = this;\n\n  var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;\n\n  function valToString(val) { return val != null ? val.toString().replace(/\\//g, \"%2F\") : val; }\n  function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, \"/\") : val; }\n//  TODO: in 1.0, make string .is() return false if value is undefined by default.\n//  function regexpMatches(val) { /*jshint validthis:true */ return isDefined(val) && this.pattern.test(val); }\n  function regexpMatches(val) { /*jshint validthis:true */ return this.pattern.test(val); }\n\n  var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {\n    string: {\n      encode: valToString,\n      decode: valFromString,\n      is: regexpMatches,\n      pattern: /[^/]*/\n    },\n    int: {\n      encode: valToString,\n      decode: function(val) { return parseInt(val, 10); },\n      is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },\n      pattern: /\\d+/\n    },\n    bool: {\n      encode: function(val) { return val ? 1 : 0; },\n      decode: function(val) { return parseInt(val, 10) !== 0; },\n      is: function(val) { return val === true || val === false; },\n      pattern: /0|1/\n    },\n    date: {\n      encode: function (val) {\n        if (!this.is(val))\n          return undefined;\n        return [ val.getFullYear(),\n          ('0' + (val.getMonth() + 1)).slice(-2),\n          ('0' + val.getDate()).slice(-2)\n        ].join(\"-\");\n      },\n      decode: function (val) {\n        if (this.is(val)) return val;\n        var match = this.capture.exec(val);\n        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;\n      },\n      is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },\n      equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },\n      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,\n      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/\n    },\n    json: {\n      encode: angular.toJson,\n      decode: angular.fromJson,\n      is: angular.isObject,\n      equals: angular.equals,\n      pattern: /[^/]*/\n    },\n    any: { // does not encode/decode\n      encode: angular.identity,\n      decode: angular.identity,\n      is: angular.identity,\n      equals: angular.equals,\n      pattern: /.*/\n    }\n  };\n\n  function getDefaultConfig() {\n    return {\n      strict: isStrictMode,\n      caseInsensitive: isCaseInsensitive\n    };\n  }\n\n  function isInjectable(value) {\n    return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));\n  }\n\n  /**\n   * [Internal] Get the default value of a parameter, which may be an injectable function.\n   */\n  $UrlMatcherFactory.$$getDefaultValue = function(config) {\n    if (!isInjectable(config.value)) return config.value;\n    if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n    return injector.invoke(config.value);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#caseInsensitive\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URL matching should be case sensitive (the default behavior), or not.\n   *\n   * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;\n   * @returns {boolean} the current value of caseInsensitive\n   */\n  this.caseInsensitive = function(value) {\n    if (isDefined(value))\n      isCaseInsensitive = value;\n    return isCaseInsensitive;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#strictMode\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URLs should match trailing slashes, or not (the default behavior).\n   *\n   * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.\n   * @returns {boolean} the current value of strictMode\n   */\n  this.strictMode = function(value) {\n    if (isDefined(value))\n      isStrictMode = value;\n    return isStrictMode;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Sets the default behavior when generating or matching URLs with default parameter values.\n   *\n   * @param {string} value A string that defines the default parameter URL squashing behavior.\n   *    `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL\n   *    `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the\n   *             parameter is surrounded by slashes, squash (remove) one slash from the URL\n   *    any other string, e.g. \"~\": When generating an href with a default parameter value, squash (remove)\n   *             the parameter value from the URL and replace it with this string.\n   */\n  this.defaultSquashPolicy = function(value) {\n    if (!isDefined(value)) return defaultSquashPolicy;\n    if (value !== true && value !== false && !isString(value))\n      throw new Error(\"Invalid squash policy: \" + value + \". Valid policies: false, true, arbitrary-string\");\n    defaultSquashPolicy = value;\n    return value;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#compile\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.\n   *\n   * @param {string} pattern  The URL pattern.\n   * @param {Object} config  The config object hash.\n   * @returns {UrlMatcher}  The UrlMatcher.\n   */\n  this.compile = function (pattern, config) {\n    return new UrlMatcher(pattern, extend(getDefaultConfig(), config));\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#isMatcher\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Returns true if the specified object is a `UrlMatcher`, or false otherwise.\n   *\n   * @param {Object} object  The object to perform the type check against.\n   * @returns {Boolean}  Returns `true` if the object matches the `UrlMatcher` interface, by\n   *          implementing all the same methods.\n   */\n  this.isMatcher = function (o) {\n    if (!isObject(o)) return false;\n    var result = true;\n\n    forEach(UrlMatcher.prototype, function(val, name) {\n      if (isFunction(val)) {\n        result = result && (isDefined(o[name]) && isFunction(o[name]));\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#type\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to\n   * generate URLs with typed parameters.\n   *\n   * @param {string} name  The type name.\n   * @param {Object|Function} definition   The type definition. See\n   *        {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   * @param {Object|Function} definitionFn (optional) A function that is injected before the app\n   *        runtime starts.  The result of this function is merged into the existing `definition`.\n   *        See {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   *\n   * @returns {Object}  Returns `$urlMatcherFactoryProvider`.\n   *\n   * @example\n   * This is a simple example of a custom type that encodes and decodes items from an\n   * array, using the array index as the URL-encoded value:\n   *\n   * <pre>\n   * var list = ['John', 'Paul', 'George', 'Ringo'];\n   *\n   * $urlMatcherFactoryProvider.type('listItem', {\n   *   encode: function(item) {\n   *     // Represent the list item in the URL using its corresponding index\n   *     return list.indexOf(item);\n   *   },\n   *   decode: function(item) {\n   *     // Look up the list item by index\n   *     return list[parseInt(item, 10)];\n   *   },\n   *   is: function(item) {\n   *     // Ensure the item is valid by checking to see that it appears\n   *     // in the list\n   *     return list.indexOf(item) > -1;\n   *   }\n   * });\n   *\n   * $stateProvider.state('list', {\n   *   url: \"/list/{item:listItem}\",\n   *   controller: function($scope, $stateParams) {\n   *     console.log($stateParams.item);\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * // Changes URL to '/list/3', logs \"Ringo\" to the console\n   * $state.go('list', { item: \"Ringo\" });\n   * </pre>\n   *\n   * This is a more complex example of a type that relies on dependency injection to\n   * interact with services, and uses the parameter name from the URL to infer how to\n   * handle encoding and decoding parameter values:\n   *\n   * <pre>\n   * // Defines a custom type that gets a value from a service,\n   * // where each service gets different types of values from\n   * // a backend API:\n   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {\n   *\n   *   // Matches up services to URL parameter names\n   *   var services = {\n   *     user: Users,\n   *     post: Posts\n   *   };\n   *\n   *   return {\n   *     encode: function(object) {\n   *       // Represent the object in the URL using its unique ID\n   *       return object.id;\n   *     },\n   *     decode: function(value, key) {\n   *       // Look up the object by ID, using the parameter\n   *       // name (key) to call the correct service\n   *       return services[key].findById(value);\n   *     },\n   *     is: function(object, key) {\n   *       // Check that object is a valid dbObject\n   *       return angular.isObject(object) && object.id && services[key];\n   *     }\n   *     equals: function(a, b) {\n   *       // Check the equality of decoded objects by comparing\n   *       // their unique IDs\n   *       return a.id === b.id;\n   *     }\n   *   };\n   * });\n   *\n   * // In a config() block, you can then attach URLs with\n   * // type-annotated parameters:\n   * $stateProvider.state('users', {\n   *   url: \"/users\",\n   *   // ...\n   * }).state('users.item', {\n   *   url: \"/{user:dbObject}\",\n   *   controller: function($scope, $stateParams) {\n   *     // $stateParams.user will now be an object returned from\n   *     // the Users service\n   *   },\n   *   // ...\n   * });\n   * </pre>\n   */\n  this.type = function (name, definition, definitionFn) {\n    if (!isDefined(definition)) return $types[name];\n    if ($types.hasOwnProperty(name)) throw new Error(\"A type named '\" + name + \"' has already been defined.\");\n\n    $types[name] = new Type(extend({ name: name }, definition));\n    if (definitionFn) {\n      typeQueue.push({ name: name, def: definitionFn });\n      if (!enqueue) flushTypeQueue();\n    }\n    return this;\n  };\n\n  // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s\n  function flushTypeQueue() {\n    while(typeQueue.length) {\n      var type = typeQueue.shift();\n      if (type.pattern) throw new Error(\"You cannot override a type's .pattern at runtime.\");\n      angular.extend($types[type.name], injector.invoke(type.def));\n    }\n  }\n\n  // Register default types. Store them in the prototype of $types.\n  forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });\n  $types = inherit($types, {});\n\n  /* No need to document $get, since it returns this */\n  this.$get = ['$injector', function ($injector) {\n    injector = $injector;\n    enqueue = false;\n    flushTypeQueue();\n\n    forEach(defaultTypes, function(type, name) {\n      if (!$types[name]) $types[name] = new Type(type);\n    });\n    return this;\n  }];\n\n  this.Param = function Param(id, type, config, location) {\n    var self = this;\n    config = unwrapShorthand(config);\n    type = getType(config, type, location);\n    var arrayMode = getArrayMode();\n    type = arrayMode ? type.$asArray(arrayMode, location === \"search\") : type;\n    if (type.name === \"string\" && !arrayMode && location === \"path\" && config.value === undefined)\n      config.value = \"\"; // for 0.2.x; in 0.3.0+ do not automatically default to \"\"\n    var isOptional = config.value !== undefined;\n    var squash = getSquashPolicy(config, isOptional);\n    var replace = getReplace(config, arrayMode, isOptional, squash);\n\n    function unwrapShorthand(config) {\n      var keys = isObject(config) ? objectKeys(config) : [];\n      var isShorthand = indexOf(keys, \"value\") === -1 && indexOf(keys, \"type\") === -1 &&\n                        indexOf(keys, \"squash\") === -1 && indexOf(keys, \"array\") === -1;\n      if (isShorthand) config = { value: config };\n      config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };\n      return config;\n    }\n\n    function getType(config, urlType, location) {\n      if (config.type && urlType) throw new Error(\"Param '\"+id+\"' has two type configurations.\");\n      if (urlType) return urlType;\n      if (!config.type) return (location === \"config\" ? $types.any : $types.string);\n      return config.type instanceof Type ? config.type : new Type(config.type);\n    }\n\n    // array config: param name (param[]) overrides default settings.  explicit config overrides param name.\n    function getArrayMode() {\n      var arrayDefaults = { array: (location === \"search\" ? \"auto\" : false) };\n      var arrayParamNomenclature = id.match(/\\[\\]$/) ? { array: true } : {};\n      return extend(arrayDefaults, arrayParamNomenclature, config).array;\n    }\n\n    /**\n     * returns false, true, or the squash value to indicate the \"default parameter url squash policy\".\n     */\n    function getSquashPolicy(config, isOptional) {\n      var squash = config.squash;\n      if (!isOptional || squash === false) return false;\n      if (!isDefined(squash) || squash == null) return defaultSquashPolicy;\n      if (squash === true || isString(squash)) return squash;\n      throw new Error(\"Invalid squash policy: '\" + squash + \"'. Valid policies: false, true, or arbitrary string\");\n    }\n\n    function getReplace(config, arrayMode, isOptional, squash) {\n      var replace, configuredKeys, defaultPolicy = [\n        { from: \"\",   to: (isOptional || arrayMode ? undefined : \"\") },\n        { from: null, to: (isOptional || arrayMode ? undefined : \"\") }\n      ];\n      replace = isArray(config.replace) ? config.replace : [];\n      if (isString(squash))\n        replace.push({ from: squash, to: undefined });\n      configuredKeys = map(replace, function(item) { return item.from; } );\n      return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);\n    }\n\n    /**\n     * [Internal] Get the default value of a parameter, which may be an injectable function.\n     */\n    function $$getDefaultValue() {\n      if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n      return injector.invoke(config.$$fn);\n    }\n\n    /**\n     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the\n     * default value, which may be the result of an injectable function.\n     */\n    function $value(value) {\n      function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }\n      function $replace(value) {\n        var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });\n        return replacement.length ? replacement[0] : value;\n      }\n      value = $replace(value);\n      return isDefined(value) ? self.type.decode(value) : $$getDefaultValue();\n    }\n\n    function toString() { return \"{Param:\" + id + \" \" + type + \" squash: '\" + squash + \"' optional: \" + isOptional + \"}\"; }\n\n    extend(this, {\n      id: id,\n      type: type,\n      location: location,\n      array: arrayMode,\n      squash: squash,\n      replace: replace,\n      isOptional: isOptional,\n      value: $value,\n      dynamic: undefined,\n      config: config,\n      toString: toString\n    });\n  };\n\n  function ParamSet(params) {\n    extend(this, params || {});\n  }\n\n  ParamSet.prototype = {\n    $$new: function() {\n      return inherit(this, extend(new ParamSet(), { $$parent: this}));\n    },\n    $$keys: function () {\n      var keys = [], chain = [], parent = this,\n        ignore = objectKeys(ParamSet.prototype);\n      while (parent) { chain.push(parent); parent = parent.$$parent; }\n      chain.reverse();\n      forEach(chain, function(paramset) {\n        forEach(objectKeys(paramset), function(key) {\n            if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);\n        });\n      });\n      return keys;\n    },\n    $$values: function(paramValues) {\n      var values = {}, self = this;\n      forEach(self.$$keys(), function(key) {\n        values[key] = self[key].value(paramValues && paramValues[key]);\n      });\n      return values;\n    },\n    $$equals: function(paramValues1, paramValues2) {\n      var equal = true, self = this;\n      forEach(self.$$keys(), function(key) {\n        var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];\n        if (!self[key].type.equals(left, right)) equal = false;\n      });\n      return equal;\n    },\n    $$validates: function $$validate(paramValues) {\n      var result = true, isOptional, val, param, self = this;\n\n      forEach(this.$$keys(), function(key) {\n        param = self[key];\n        val = paramValues[key];\n        isOptional = !val && param.isOptional;\n        result = result && (isOptional || !!param.type.is(val));\n      });\n      return result;\n    },\n    $$parent: undefined\n  };\n\n  this.ParamSet = ParamSet;\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\nangular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);\n\n/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider(   $locationProvider,   $urlMatcherFactory) {\n  var rules = [], otherwise = null, interceptDeferred = false, listener;\n\n  // Returns a string that is a prefix of all strings matching the RegExp\n  function regExpPrefix(re) {\n    var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n    return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n  }\n\n  // Interpolates matched values into a String.replace()-style pattern\n  function interpolate(pattern, match) {\n    return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n      return match[what === '$' ? 0 : Number(what)];\n    });\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#rule\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines rules that are used by `$urlRouterProvider` to find matches for\n   * specific URLs.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {object} rule Handler function that takes `$injector` and `$location`\n   * services as arguments. You can use them to return a valid path as a string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.rule = function (rule) {\n    if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    rules.push(rule);\n    return this;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouterProvider#otherwise\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines a path that is used when an invalid route is requested.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     return '/a/valid/url';\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} rule The url path you want to redirect to or a function \n   * rule that returns the url path. The function version is passed two params: \n   * `$injector` and `$location` services, and must return a url string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.otherwise = function (rule) {\n    if (isString(rule)) {\n      var redirect = rule;\n      rule = function () { return redirect; };\n    }\n    else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    otherwise = rule;\n    return this;\n  };\n\n\n  function handleIfMatch($injector, handler, match) {\n    if (!match) return false;\n    var result = $injector.invoke(handler, handler, { $match: match });\n    return isDefined(result) ? result : true;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#when\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Registers a handler for a given url matching. if handle is a string, it is\n   * treated as a redirect, and is interpolated according to the syntax of match\n   * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).\n   *\n   * If the handler is a function, it is injectable. It gets invoked if `$location`\n   * matches. You have the option of inject the match object as `$match`.\n   *\n   * The handler can return\n   *\n   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n   *   will continue trying to find another one that matches.\n   * - **string** which is treated as a redirect and passed to `$location.url()`\n   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} what The incoming path that you want to redirect.\n   * @param {string|object} handler The path you want to redirect your user to.\n   */\n  this.when = function (what, handler) {\n    var redirect, handlerIsString = isString(handler);\n    if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n    if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n      throw new Error(\"invalid 'handler' in when()\");\n\n    var strategies = {\n      matcher: function (what, handler) {\n        if (handlerIsString) {\n          redirect = $urlMatcherFactory.compile(handler);\n          handler = ['$match', function ($match) { return redirect.format($match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n        }, {\n          prefix: isString(what.prefix) ? what.prefix : ''\n        });\n      },\n      regex: function (what, handler) {\n        if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n        if (handlerIsString) {\n          redirect = handler;\n          handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path()));\n        }, {\n          prefix: regExpPrefix(what)\n        });\n      }\n    };\n\n    var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n    for (var n in check) {\n      if (check[n]) return this.rule(strategies[n](what, handler));\n    }\n\n    throw new Error(\"invalid 'what' in when()\");\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#deferIntercept\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Disables (or enables) deferring location change interception.\n   *\n   * If you wish to customize the behavior of syncing the URL (for example, if you wish to\n   * defer a transition but maintain the current URL), call this method at configuration time.\n   * Then, at run time, call `$urlRouter.listen()` after you have configured your own\n   * `$locationChangeSuccess` event handler.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *\n   *   // Prevent $urlRouter from automatically intercepting URL changes;\n   *   // this allows you to configure custom behavior in between\n   *   // location changes and route synchronization:\n   *   $urlRouterProvider.deferIntercept();\n   *\n   * }).run(function ($rootScope, $urlRouter, UserService) {\n   *\n   *   $rootScope.$on('$locationChangeSuccess', function(e) {\n   *     // UserService is an example service for managing user state\n   *     if (UserService.isLoggedIn()) return;\n   *\n   *     // Prevent $urlRouter's default handler from firing\n   *     e.preventDefault();\n   *\n   *     UserService.handleLogin().then(function() {\n   *       // Once the user has logged in, sync the current URL\n   *       // to the router:\n   *       $urlRouter.sync();\n   *     });\n   *   });\n   *\n   *   // Configures $urlRouter's listener *after* your custom listener\n   *   $urlRouter.listen();\n   * });\n   * </pre>\n   *\n   * @param {boolean} defer Indicates whether to defer location change interception. Passing\n            no parameter is equivalent to `true`.\n   */\n  this.deferIntercept = function (defer) {\n    if (defer === undefined) defer = true;\n    interceptDeferred = defer;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouter\n   *\n   * @requires $location\n   * @requires $rootScope\n   * @requires $injector\n   * @requires $browser\n   *\n   * @description\n   *\n   */\n  this.$get = $get;\n  $get.$inject = ['$location', '$rootScope', '$injector', '$browser'];\n  function $get(   $location,   $rootScope,   $injector,   $browser) {\n\n    var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;\n\n    function appendBasePath(url, isHtml5, absolute) {\n      if (baseHref === '/') return url;\n      if (isHtml5) return baseHref.slice(0, -1) + url;\n      if (absolute) return baseHref.slice(1) + url;\n      return url;\n    }\n\n    // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n    function update(evt) {\n      if (evt && evt.defaultPrevented) return;\n      var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;\n      lastPushedUrl = undefined;\n      if (ignoreUpdate) return true;\n\n      function check(rule) {\n        var handled = rule($injector, $location);\n\n        if (!handled) return false;\n        if (isString(handled)) $location.replace().url(handled);\n        return true;\n      }\n      var n = rules.length, i;\n\n      for (i = 0; i < n; i++) {\n        if (check(rules[i])) return;\n      }\n      // always check otherwise last to allow dynamic updates to the set of rules\n      if (otherwise) check(otherwise);\n    }\n\n    function listen() {\n      listener = listener || $rootScope.$on('$locationChangeSuccess', update);\n      return listener;\n    }\n\n    if (!interceptDeferred) listen();\n\n    return {\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#sync\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n       * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,\n       * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed\n       * with the transition by calling `$urlRouter.sync()`.\n       *\n       * @example\n       * <pre>\n       * angular.module('app', ['ui.router'])\n       *   .run(function($rootScope, $urlRouter) {\n       *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n       *       // Halt state change from even starting\n       *       evt.preventDefault();\n       *       // Perform custom logic\n       *       var meetsRequirement = ...\n       *       // Continue with the update and state transition if logic allows\n       *       if (meetsRequirement) $urlRouter.sync();\n       *     });\n       * });\n       * </pre>\n       */\n      sync: function() {\n        update();\n      },\n\n      listen: function() {\n        return listen();\n      },\n\n      update: function(read) {\n        if (read) {\n          location = $location.url();\n          return;\n        }\n        if ($location.url() === location) return;\n\n        $location.url(location);\n        $location.replace();\n      },\n\n      push: function(urlMatcher, params, options) {\n        $location.url(urlMatcher.format(params || {}));\n        lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;\n        if (options && options.replace) $location.replace();\n      },\n\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#href\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * A URL generation method that returns the compiled URL for a given\n       * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.\n       *\n       * @example\n       * <pre>\n       * $bob = $urlRouter.href(new UrlMatcher(\"/about/:person\"), {\n       *   person: \"bob\"\n       * });\n       * // $bob == \"/about/bob\";\n       * </pre>\n       *\n       * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.\n       * @param {object=} params An object of parameter values to fill the matcher's required parameters.\n       * @param {object=} options Options object. The options are:\n       *\n       * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n       *\n       * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n       */\n      href: function(urlMatcher, params, options) {\n        if (!urlMatcher.validates(params)) return null;\n\n        var isHtml5 = $locationProvider.html5Mode();\n        if (angular.isObject(isHtml5)) {\n          isHtml5 = isHtml5.enabled;\n        }\n        \n        var url = urlMatcher.format(params);\n        options = options || {};\n\n        if (!isHtml5 && url !== null) {\n          url = \"#\" + $locationProvider.hashPrefix() + url;\n        }\n        url = appendBasePath(url, isHtml5, options.absolute);\n\n        if (!options.absolute || !url) {\n          return url;\n        }\n\n        var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();\n        port = (port === 80 || port === 443 ? '' : ':' + port);\n\n        return [$location.protocol(), '://', $location.host(), port, slash, url].join('');\n      }\n    };\n  }\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];\nfunction $StateProvider(   $urlRouterProvider,   $urlMatcherFactory) {\n\n  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n  // Builds state properties from definition passed to registerState()\n  var stateBuilder = {\n\n    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n    // state.children = [];\n    // if (parent) parent.children.push(state);\n    parent: function(state) {\n      if (isDefined(state.parent) && state.parent) return findState(state.parent);\n      // regex matches any valid composite state name\n      // would match \"contact.list\" but not \"contacts\"\n      var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n      return compositeName ? findState(compositeName[1]) : root;\n    },\n\n    // inherit 'data' from parent and override by own values (if any)\n    data: function(state) {\n      if (state.parent && state.parent.data) {\n        state.data = state.self.data = extend({}, state.parent.data, state.data);\n      }\n      return state.data;\n    },\n\n    // Build a URLMatcher if necessary, either via a relative or absolute URL\n    url: function(state) {\n      var url = state.url, config = { params: state.params || {} };\n\n      if (isString(url)) {\n        if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);\n        return (state.parent.navigable || root).url.concat(url, config);\n      }\n\n      if (!url || $urlMatcherFactory.isMatcher(url)) return url;\n      throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n    },\n\n    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n    navigable: function(state) {\n      return state.url ? state : (state.parent ? state.parent.navigable : null);\n    },\n\n    // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params\n    ownParams: function(state) {\n      var params = state.url && state.url.params || new $$UMFP.ParamSet();\n      forEach(state.params || {}, function(config, id) {\n        if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, \"config\");\n      });\n      return params;\n    },\n\n    // Derive parameters for this state and ensure they're a super-set of parent's parameters\n    params: function(state) {\n      return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet();\n    },\n\n    // If there is no explicit multi-view configuration, make one up so we don't have\n    // to handle both cases in the view directive later. Note that having an explicit\n    // 'views' property will mean the default unnamed view properties are ignored. This\n    // is also a good time to resolve view names to absolute names, so everything is a\n    // straight lookup at link time.\n    views: function(state) {\n      var views = {};\n\n      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n        if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n        views[name] = view;\n      });\n      return views;\n    },\n\n    // Keep a full path from the root down to this state as this is needed for state activation.\n    path: function(state) {\n      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n    },\n\n    // Speed up $state.contains() as it's used a lot\n    includes: function(state) {\n      var includes = state.parent ? extend({}, state.parent.includes) : {};\n      includes[state.name] = true;\n      return includes;\n    },\n\n    $delegates: {}\n  };\n\n  function isRelative(stateName) {\n    return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n  }\n\n  function findState(stateOrName, base) {\n    if (!stateOrName) return undefined;\n\n    var isStr = isString(stateOrName),\n        name  = isStr ? stateOrName : stateOrName.name,\n        path  = isRelative(name);\n\n    if (path) {\n      if (!base) throw new Error(\"No reference point given for path '\"  + name + \"'\");\n      base = findState(base);\n      \n      var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n      for (; i < pathLength; i++) {\n        if (rel[i] === \"\" && i === 0) {\n          current = base;\n          continue;\n        }\n        if (rel[i] === \"^\") {\n          if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n          current = current.parent;\n          continue;\n        }\n        break;\n      }\n      rel = rel.slice(i).join(\".\");\n      name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n    }\n    var state = states[name];\n\n    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n      return state;\n    }\n    return undefined;\n  }\n\n  function queueState(parentName, state) {\n    if (!queue[parentName]) {\n      queue[parentName] = [];\n    }\n    queue[parentName].push(state);\n  }\n\n  function flushQueuedChildren(parentName) {\n    var queued = queue[parentName] || [];\n    while(queued.length) {\n      registerState(queued.shift());\n    }\n  }\n\n  function registerState(state) {\n    // Wrap a new object around the state so we can store our private details easily.\n    state = inherit(state, {\n      self: state,\n      resolve: state.resolve || {},\n      toString: function() { return this.name; }\n    });\n\n    var name = state.name;\n    if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n    if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"'' is already defined\");\n\n    // Get parent name\n    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n        : (isString(state.parent)) ? state.parent\n        : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name\n        : '';\n\n    // If parent is not registered yet, add state to queue and register later\n    if (parentName && !states[parentName]) {\n      return queueState(parentName, state.self);\n    }\n\n    for (var key in stateBuilder) {\n      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n    }\n    states[name] = state;\n\n    // Register the state in the global state list and with $urlRouter if necessary.\n    if (!state[abstractKey] && state.url) {\n      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n          $state.transitionTo(state, $match, { inherit: true, location: false });\n        }\n      }]);\n    }\n\n    // Register any queued children\n    flushQueuedChildren(name);\n\n    return state;\n  }\n\n  // Checks text to see if it looks like a glob.\n  function isGlob (text) {\n    return text.indexOf('*') > -1;\n  }\n\n  // Returns true if glob matches current $state name.\n  function doesStateMatchGlob (glob) {\n    var globSegments = glob.split('.'),\n        segments = $state.$current.name.split('.');\n\n    //match greedy starts\n    if (globSegments[0] === '**') {\n       segments = segments.slice(indexOf(segments, globSegments[1]));\n       segments.unshift('**');\n    }\n    //match greedy ends\n    if (globSegments[globSegments.length - 1] === '**') {\n       segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n       segments.push('**');\n    }\n\n    if (globSegments.length != segments.length) {\n      return false;\n    }\n\n    //match single stars\n    for (var i = 0, l = globSegments.length; i < l; i++) {\n      if (globSegments[i] === '*') {\n        segments[i] = '*';\n      }\n    }\n\n    return segments.join('') === globSegments.join('');\n  }\n\n\n  // Implicit root state that is always active\n  root = registerState({\n    name: '',\n    url: '^',\n    views: null,\n    'abstract': true\n  });\n  root.navigable = null;\n\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#decorator\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Allows you to extend (carefully) or override (at your own peril) the \n   * `stateBuilder` object used internally by `$stateProvider`. This can be used \n   * to add custom functionality to ui-router, for example inferring templateUrl \n   * based on the state name.\n   *\n   * When passing only a name, it returns the current (original or decorated) builder\n   * function that matches `name`.\n   *\n   * The builder functions that can be decorated are listed below. Though not all\n   * necessarily have a good use case for decoration, that is up to you to decide.\n   *\n   * In addition, users can attach custom decorators, which will generate new \n   * properties within the state's internal definition. There is currently no clear \n   * use-case for this beyond accessing internal states (i.e. $state.$current), \n   * however, expect this to become increasingly relevant as we introduce additional \n   * meta-programming features.\n   *\n   * **Warning**: Decorators should not be interdependent because the order of \n   * execution of the builder functions in non-deterministic. Builder functions \n   * should only be dependent on the state definition object and super function.\n   *\n   *\n   * Existing builder functions and current return values:\n   *\n   * - **parent** `{object}` - returns the parent state object.\n   * - **data** `{object}` - returns state data, including any inherited data that is not\n   *   overridden by own values (if any).\n   * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}\n   *   or `null`.\n   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n   *   navigable).\n   * - **params** `{object}` - returns an array of state params that are ensured to \n   *   be a super-set of parent's params.\n   * - **views** `{object}` - returns a views object where each key is an absolute view \n   *   name (i.e. \"viewName@stateName\") and each value is the config object \n   *   (template, controller) for the view. Even when you don't use the views object \n   *   explicitly on a state config, one is still created for you internally.\n   *   So by decorating this builder function you have access to decorating template \n   *   and controller properties.\n   * - **ownParams** `{object}` - returns an array of params that belong to the state, \n   *   not including any params defined by ancestor states.\n   * - **path** `{string}` - returns the full path from the root down to this state. \n   *   Needed for state activation.\n   * - **includes** `{object}` - returns an object that includes every state that \n   *   would pass a `$state.includes()` test.\n   *\n   * @example\n   * <pre>\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function (state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(views, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * </pre>\n   *\n   * @param {string} name The name of the builder function to decorate. \n   * @param {object} func A function that is responsible for decorating the original \n   * builder function. The function receives two parameters:\n   *\n   *   - `{object}` - state - The state config object.\n   *   - `{object}` - super - The original builder function.\n   *\n   * @return {object} $stateProvider - $stateProvider instance\n   */\n  this.decorator = decorator;\n  function decorator(name, func) {\n    /*jshint validthis: true */\n    if (isString(name) && !isDefined(func)) {\n      return stateBuilder[name];\n    }\n    if (!isFunction(func) || !isString(name)) {\n      return this;\n    }\n    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n      stateBuilder.$delegates[name] = stateBuilder[name];\n    }\n    stateBuilder[name] = func;\n    return this;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#state\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Registers a state configuration under a given state name. The stateConfig object\n   * has the following acceptable properties.\n   *\n   * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\".\n   * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n   * @param {object} stateConfig State configuration object.\n   * @param {string|function=} stateConfig.template\n   * <a id='template'></a>\n   *   html template as a string or a function that returns\n   *   an html template as a string which should be used by the uiView directives. This property \n   *   takes precedence over templateUrl.\n   *   \n   *   If `template` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by\n   *     applying the current state\n   *\n   * <pre>template:\n   *   \"<h1>inline template definition</h1>\" +\n   *   \"<div ui-view></div>\"</pre>\n   * <pre>template: function(params) {\n   *       return \"<h1>generated template</h1>\"; }</pre>\n   * </div>\n   *\n   * @param {string|function=} stateConfig.templateUrl\n   * <a id='templateUrl'></a>\n   *\n   *   path or function that returns a path to an html\n   *   template that should be used by uiView.\n   *   \n   *   If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by \n   *     applying the current state\n   *\n   * <pre>templateUrl: \"home.html\"</pre>\n   * <pre>templateUrl: function(params) {\n   *     return myTemplates[params.pageId]; }</pre>\n   *\n   * @param {function=} stateConfig.templateProvider\n   * <a id='templateProvider'></a>\n   *    Provider function that returns HTML content string.\n   * <pre> templateProvider:\n   *       function(MyTemplateService, params) {\n   *         return MyTemplateService.getTemplate(params.pageId);\n   *       }</pre>\n   *\n   * @param {string|function=} stateConfig.controller\n   * <a id='controller'></a>\n   *\n   *  Controller fn that should be associated with newly\n   *   related scope or the name of a registered controller if passed as a string.\n   *   Optionally, the ControllerAs may be declared here.\n   * <pre>controller: \"MyRegisteredController\"</pre>\n   * <pre>controller:\n   *     \"MyRegisteredController as fooCtrl\"}</pre>\n   * <pre>controller: function($scope, MyService) {\n   *     $scope.data = MyService.getData(); }</pre>\n   *\n   * @param {function=} stateConfig.controllerProvider\n   * <a id='controllerProvider'></a>\n   *\n   * Injectable provider function that returns the actual controller or string.\n   * <pre>controllerProvider:\n   *   function(MyResolveData) {\n   *     if (MyResolveData.foo)\n   *       return \"FooCtrl\"\n   *     else if (MyResolveData.bar)\n   *       return \"BarCtrl\";\n   *     else return function($scope) {\n   *       $scope.baz = \"Qux\";\n   *     }\n   *   }</pre>\n   *\n   * @param {string=} stateConfig.controllerAs\n   * <a id='controllerAs'></a>\n   * \n   * A controller alias name. If present the controller will be\n   *   published to scope under the controllerAs name.\n   * <pre>controllerAs: \"myCtrl\"</pre>\n   *\n   * @param {object=} stateConfig.resolve\n   * <a id='resolve'></a>\n   *\n   * An optional map&lt;string, function&gt; of dependencies which\n   *   should be injected into the controller. If any of these dependencies are promises, \n   *   the router will wait for them all to be resolved before the controller is instantiated.\n   *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired\n   *   and the values of the resolved promises are injected into any controllers that reference them.\n   *   If any  of the promises are rejected the $stateChangeError event is fired.\n   *\n   *   The map object is:\n   *   \n   *   - key - {string}: name of dependency to be injected into controller\n   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n   *     it is injected and return value it treated as dependency. If result is a promise, it is \n   *     resolved before its value is injected into controller.\n   *\n   * <pre>resolve: {\n   *     myResolve1:\n   *       function($http, $stateParams) {\n   *         return $http.get(\"/api/foos/\"+stateParams.fooID);\n   *       }\n   *     }</pre>\n   *\n   * @param {string=} stateConfig.url\n   * <a id='url'></a>\n   *\n   *   A url fragment with optional parameters. When a state is navigated or\n   *   transitioned to, the `$stateParams` service will be populated with any \n   *   parameters that were passed.\n   *\n   * examples:\n   * <pre>url: \"/home\"\n   * url: \"/users/:userid\"\n   * url: \"/books/{bookid:[a-zA-Z_-]}\"\n   * url: \"/books/{categoryid:int}\"\n   * url: \"/books/{publishername:string}/{categoryid:int}\"\n   * url: \"/messages?before&after\"\n   * url: \"/messages?{before:date}&{after:date}\"</pre>\n   * url: \"/messages/:mailboxid?{before:date}&{after:date}\"\n   *\n   * @param {object=} stateConfig.views\n   * <a id='views'></a>\n   * an optional map&lt;string, object&gt; which defined multiple views, or targets views\n   * manually/explicitly.\n   *\n   * Examples:\n   *\n   * Targets three named `ui-view`s in the parent state's template\n   * <pre>views: {\n   *     header: {\n   *       controller: \"headerCtrl\",\n   *       templateUrl: \"header.html\"\n   *     }, body: {\n   *       controller: \"bodyCtrl\",\n   *       templateUrl: \"body.html\"\n   *     }, footer: {\n   *       controller: \"footCtrl\",\n   *       templateUrl: \"footer.html\"\n   *     }\n   *   }</pre>\n   *\n   * Targets named `ui-view=\"header\"` from grandparent state 'top''s template, and named `ui-view=\"body\" from parent state's template.\n   * <pre>views: {\n   *     'header@top': {\n   *       controller: \"msgHeaderCtrl\",\n   *       templateUrl: \"msgHeader.html\"\n   *     }, 'body': {\n   *       controller: \"messagesCtrl\",\n   *       templateUrl: \"messages.html\"\n   *     }\n   *   }</pre>\n   *\n   * @param {boolean=} [stateConfig.abstract=false]\n   * <a id='abstract'></a>\n   * An abstract state will never be directly activated,\n   *   but can provide inherited properties to its common children states.\n   * <pre>abstract: true</pre>\n   *\n   * @param {function=} stateConfig.onEnter\n   * <a id='onEnter'></a>\n   *\n   * Callback function for when a state is entered. Good way\n   *   to trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explictly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onEnter: function(MyService, $stateParams) {\n   *     MyService.foo($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {function=} stateConfig.onExit\n   * <a id='onExit'></a>\n   *\n   * Callback function for when a state is exited. Good way to\n   *   trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explictly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onExit: function(MyService, $stateParams) {\n   *     MyService.cleanup($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {boolean=} [stateConfig.reloadOnSearch=true]\n   * <a id='reloadOnSearch'></a>\n   *\n   * If `false`, will not retrigger the same state\n   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). \n   *   Useful for when you'd like to modify $location.search() without triggering a reload.\n   * <pre>reloadOnSearch: false</pre>\n   *\n   * @param {object=} stateConfig.data\n   * <a id='data'></a>\n   *\n   * Arbitrary data object, useful for custom configuration.  The parent state's `data` is\n   *   prototypally inherited.  In other words, adding a data property to a state adds it to\n   *   the entire subtree via prototypal inheritance.\n   *\n   * <pre>data: {\n   *     requiredRole: 'foo'\n   * } </pre>\n   *\n   * @param {object=} stateConfig.params\n   * <a id='params'></a>\n   *\n   * A map which optionally configures parameters declared in the `url`, or\n   *   defines additional non-url parameters.  For each parameter being\n   *   configured, add a configuration object keyed to the name of the parameter.\n   *\n   *   Each parameter configuration object may contain the following properties:\n   *\n   *   - ** value ** - {object|function=}: specifies the default value for this\n   *     parameter.  This implicitly sets this parameter as optional.\n   *\n   *     When UI-Router routes to a state and no value is\n   *     specified for this parameter in the URL or transition, the\n   *     default value will be used instead.  If `value` is a function,\n   *     it will be injected and invoked, and the return value used.\n   *\n   *     *Note*: `undefined` is treated as \"no default value\" while `null`\n   *     is treated as \"the default value is `null`\".\n   *\n   *     *Shorthand*: If you only need to configure the default value of the\n   *     parameter, you may use a shorthand syntax.   In the **`params`**\n   *     map, instead mapping the param name to a full parameter configuration\n   *     object, simply set map it to the default parameter value, e.g.:\n   *\n   * <pre>// define a parameter's default value\n   * params: {\n   *     param1: { value: \"defaultValue\" }\n   * }\n   * // shorthand default values\n   * params: {\n   *     param1: \"defaultValue\",\n   *     param2: \"param2Default\"\n   * }</pre>\n   *\n   *   - ** array ** - {boolean=}: *(default: false)* If true, the param value will be\n   *     treated as an array of values.  If you specified a Type, the value will be\n   *     treated as an array of the specified Type.  Note: query parameter values\n   *     default to a special `\"auto\"` mode.\n   *\n   *     For query parameters in `\"auto\"` mode, if multiple  values for a single parameter\n   *     are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values\n   *     are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`).  However, if\n   *     only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single\n   *     value (e.g.: `{ foo: '1' }`).\n   *\n   * <pre>params: {\n   *     param1: { array: true }\n   * }</pre>\n   *\n   *   - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when\n   *     the current parameter value is the same as the default value. If `squash` is not set, it uses the\n   *     configured default squash policy.\n   *     (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})\n   *\n   *   There are three squash settings:\n   *\n   *     - false: The parameter's default value is not squashed.  It is encoded and included in the URL\n   *     - true: The parameter's default value is omitted from the URL.  If the parameter is preceeded and followed\n   *       by slashes in the state's `url` declaration, then one of those slashes are omitted.\n   *       This can allow for cleaner looking URLs.\n   *     - `\"<arbitrary string>\"`: The parameter's default value is replaced with an arbitrary placeholder of  your choice.\n   *\n   * <pre>params: {\n   *     param1: {\n   *       value: \"defaultId\",\n   *       squash: true\n   * } }\n   * // squash \"defaultValue\" to \"~\"\n   * params: {\n   *     param1: {\n   *       value: \"defaultValue\",\n   *       squash: \"~\"\n   * } }\n   * </pre>\n   *\n   *\n   * @example\n   * <pre>\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the\n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * </pre>\n   *\n   */\n  this.state = state;\n  function state(name, definition) {\n    /*jshint validthis: true */\n    if (isObject(name)) definition = name;\n    else definition.name = name;\n    registerState(definition);\n    return this;\n  }\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$state\n   *\n   * @requires $rootScope\n   * @requires $q\n   * @requires ui.router.state.$view\n   * @requires $injector\n   * @requires ui.router.util.$resolve\n   * @requires ui.router.state.$stateParams\n   * @requires ui.router.router.$urlRouter\n   *\n   * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n   * you'd like to test against the current active state.\n   * @property {object} current A reference to the state's config object. However \n   * you passed it in. Useful for accessing custom data.\n   * @property {object} transition Currently pending transition. A promise that'll \n   * resolve or reject.\n   *\n   * @description\n   * `$state` service is responsible for representing states as well as transitioning\n   * between them. It also provides interfaces to ask for current state or even states\n   * you're coming from.\n   */\n  this.$get = $get;\n  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];\n  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $urlRouter,   $location,   $urlMatcherFactory) {\n\n    var TransitionSuperseded = $q.reject(new Error('transition superseded'));\n    var TransitionPrevented = $q.reject(new Error('transition prevented'));\n    var TransitionAborted = $q.reject(new Error('transition aborted'));\n    var TransitionFailed = $q.reject(new Error('transition failed'));\n\n    // Handles the case where a state which is the target of a transition is not found, and the user\n    // can optionally retry or defer the transition\n    function handleRedirect(redirect, state, params, options) {\n      /**\n       * @ngdoc event\n       * @name ui.router.state.$state#$stateNotFound\n       * @eventOf ui.router.state.$state\n       * @eventType broadcast on root scope\n       * @description\n       * Fired when a requested state **cannot be found** using the provided state name during transition.\n       * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n       * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n       * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n       * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n       *\n       * @param {Object} event Event object.\n       * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n       * @param {State} fromState Current state object.\n       * @param {Object} fromParams Current state params.\n       *\n       * @example\n       *\n       * <pre>\n       * // somewhere, assume lazy.state has not been defined\n       * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n       *\n       * // somewhere else\n       * $scope.$on('$stateNotFound',\n       * function(event, unfoundState, fromState, fromParams){\n       *     console.log(unfoundState.to); // \"lazy.state\"\n       *     console.log(unfoundState.toParams); // {a:1, b:2}\n       *     console.log(unfoundState.options); // {inherit:false} + default options\n       * })\n       * </pre>\n       */\n      var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);\n\n      if (evt.defaultPrevented) {\n        $urlRouter.update();\n        return TransitionAborted;\n      }\n\n      if (!evt.retry) {\n        return null;\n      }\n\n      // Allow the handler to return a promise to defer state lookup retry\n      if (options.$retry) {\n        $urlRouter.update();\n        return TransitionFailed;\n      }\n      var retryTransition = $state.transition = $q.when(evt.retry);\n\n      retryTransition.then(function() {\n        if (retryTransition !== $state.transition) return TransitionSuperseded;\n        redirect.options.$retry = true;\n        return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n      }, function() {\n        return TransitionAborted;\n      });\n      $urlRouter.update();\n\n      return retryTransition;\n    }\n\n    root.locals = { resolve: null, globals: { $stateParams: {} } };\n\n    $state = {\n      params: {},\n      current: root.self,\n      $current: root,\n      transition: null\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#reload\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, \n     * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon).\n     *\n     * @example\n     * <pre>\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * </pre>\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.reload = function reload() {\n      return $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: true });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#go\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Convenience method for transitioning to a new state. `$state.go` calls \n     * `$state.transitionTo` internally but automatically sets options to \n     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n     * This allows you to easily use an absolute or relative to path and specify \n     * only the parameters you'd like to update (while letting unspecified parameters \n     * inherit from the currently active ancestor states).\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * </pre>\n     * <img src='../ngdoc_assets/StateGoExamples.png'/>\n     *\n     * @param {string} to Absolute state name or relative state path. Some examples:\n     *\n     * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n     * - `$state.go('^')` - will go to a parent state\n     * - `$state.go('^.sibling')` - will go to a sibling state\n     * - `$state.go('.child.grandchild')` - will go to grandchild state\n     *\n     * @param {object=} params A map of the parameters that will be sent to the state, \n     * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n     * defined parameters. This allows, for example, going to a sibling state that shares parameters\n     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n     * will get you all current parameters, etc.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition.\n     *\n     * Possible success values:\n     *\n     * - $state.current\n     *\n     * <br/>Possible rejection values:\n     *\n     * - 'transition superseded' - when a newer transition has been started after this one\n     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n     *   when a `$stateNotFound` `event.retry` promise errors.\n     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n     * - *resolve error* - when an error has occurred with a `resolve`\n     *\n     */\n    $state.go = function go(to, params, options) {\n      return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#transitionTo\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n     * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * </pre>\n     *\n     * @param {string} to State name.\n     * @param {object=} toParams A map of the parameters that will be sent to the state,\n     * will populate $stateParams.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.transitionTo = function transitionTo(to, toParams, options) {\n      toParams = toParams || {};\n      options = extend({\n        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n      }, options || {});\n\n      var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n      var evt, toState = findState(to, options.relative);\n\n      if (!isDefined(toState)) {\n        var redirect = { to: to, toParams: toParams, options: options };\n        var redirectResult = handleRedirect(redirect, from.self, fromParams, options);\n\n        if (redirectResult) {\n          return redirectResult;\n        }\n\n        // Always retry once if the $stateNotFound was not prevented\n        // (handles either redirect changed or state lazy-definition)\n        to = redirect.to;\n        toParams = redirect.toParams;\n        options = redirect.options;\n        toState = findState(to, options.relative);\n\n        if (!isDefined(toState)) {\n          if (!options.relative) throw new Error(\"No such state '\" + to + \"'\");\n          throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n        }\n      }\n      if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n      if (!toState.params.$$validates(toParams)) return TransitionFailed;\n\n      toParams = toState.params.$$values(toParams);\n      to = toState;\n\n      var toPath = to.path;\n\n      // Starting from the root of the path, keep all levels that haven't changed\n      var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];\n\n      if (!options.reload) {\n        while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {\n          locals = toLocals[keep] = state.locals;\n          keep++;\n          state = toPath[keep];\n        }\n      }\n\n      // If we're going to the same state and all locals are kept, we've got nothing to do.\n      // But clear 'transition', as we still want to cancel any other pending transitions.\n      // TODO: We may not want to bump 'transition' if we're called from a location change\n      // that we've initiated ourselves, because we might accidentally abort a legitimate\n      // transition initiated from code?\n      if (shouldTriggerReload(to, from, locals, options)) {\n        if (to.self.reloadOnSearch !== false) $urlRouter.update();\n        $state.transition = null;\n        return $q.when($state.current);\n      }\n\n      // Filter parameters before we pass them to event handlers etc.\n      toParams = filterByKeys(to.params.$$keys(), toParams || {});\n\n      // Broadcast start event and cancel the transition if requested\n      if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeStart\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when the state transition **begins**. You can use `event.preventDefault()`\n         * to prevent the transition from happening and then the transition promise will be\n         * rejected with a `'transition prevented'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         *\n         * @example\n         *\n         * <pre>\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * </pre>\n         */\n        if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) {\n          $urlRouter.update();\n          return TransitionPrevented;\n        }\n      }\n\n      // Resolve locals for the remaining states, but don't update any global state just\n      // yet -- if anything fails to resolve the current state needs to remain untouched.\n      // We also set up an inheritance chain for the locals here. This allows the view directive\n      // to quickly look up the correct definition for each view in the current state. Even\n      // though we create the locals object itself outside resolveState(), it is initially\n      // empty and gets filled asynchronously. We need to keep track of the promise for the\n      // (fully resolved) current locals, and pass this down the chain.\n      var resolved = $q.when(locals);\n\n      for (var l = keep; l < toPath.length; l++, state = toPath[l]) {\n        locals = toLocals[l] = inherit(locals);\n        resolved = resolveState(state, toParams, state === to, resolved, locals, options);\n      }\n\n      // Once everything is resolved, we are ready to perform the actual transition\n      // and return a promise for the new state. We also keep track of what the\n      // current promise is, so that we can detect overlapping transitions and\n      // keep only the outcome of the last transition.\n      var transition = $state.transition = resolved.then(function () {\n        var l, entering, exiting;\n\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Exit 'from' states not kept\n        for (l = fromPath.length - 1; l >= keep; l--) {\n          exiting = fromPath[l];\n          if (exiting.self.onExit) {\n            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n          }\n          exiting.locals = null;\n        }\n\n        // Enter 'to' states not kept\n        for (l = keep; l < toPath.length; l++) {\n          entering = toPath[l];\n          entering.locals = toLocals[l];\n          if (entering.self.onEnter) {\n            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n          }\n        }\n\n        // Run it again, to catch any transitions in callbacks\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Update globals in $state\n        $state.$current = to;\n        $state.current = to.self;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        $state.transition = null;\n\n        if (options.location && to.navigable) {\n          $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {\n            $$avoidResync: true, replace: options.location === 'replace'\n          });\n        }\n\n        if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeSuccess\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired once the state transition is **complete**.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         */\n          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n        }\n        $urlRouter.update(true);\n\n        return $state.current;\n      }, function (error) {\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        $state.transition = null;\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeError\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when an **error occurs** during transition. It's important to note that if you\n         * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n         * they will not throw traditionally. You must listen for this $stateChangeError event to\n         * catch **ALL** errors.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         * @param {Error} error The resolve error object.\n         */\n        evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n\n        if (!evt.defaultPrevented) {\n            $urlRouter.update();\n        }\n\n        return $q.reject(error);\n      });\n\n      return transition;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#is\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n     * but only checks for the full state name. If params is supplied then it will be\n     * tested for strict equality against the current active params object, so all params\n     * must match with none missing and no extras.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // absolute name\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // relative name (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.is('.item')}\">Item</div>\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like\n     * to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object} -  If `stateOrName` is a relative state name and `options.relative` is set, .is will\n     * test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it is the state.\n     */\n    $state.is = function is(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) { return undefined; }\n      if ($state.$current !== state) { return false; }\n      return params ? equalForKeys(state.params.$$values(params), $stateParams) : true;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#includes\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method to determine if the current active state is equal to or is the child of the\n     * state stateName. If any params are passed then they will be tested for a match as well.\n     * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n     *\n     * @example\n     * Partial and relative names\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // Using partial names\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     *\n     * // Using relative names (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.includes('.item')}\">Item</div>\n     * </pre>\n     *\n     * Basic globbing patterns\n     * <pre>\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * </pre>\n     *\n     * @param {string} stateOrName A partial name, relative name, or glob pattern\n     * to be searched for within the current state name.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`,\n     * that you'd like to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object=} -  If `stateOrName` is a relative state reference and `options.relative` is set,\n     * .includes will test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it does include the state\n     */\n    $state.includes = function includes(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      if (isString(stateOrName) && isGlob(stateOrName)) {\n        if (!doesStateMatchGlob(stateOrName)) {\n          return false;\n        }\n        stateOrName = $state.$current.name;\n      }\n\n      var state = findState(stateOrName, options.relative);\n      if (!isDefined(state)) { return undefined; }\n      if (!isDefined($state.$current.includes[state.name])) { return false; }\n      return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true;\n    };\n\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#href\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A url generation method that returns the compiled url for the given state populated with the given params.\n     *\n     * @example\n     * <pre>\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n     * @param {object=} params An object of parameter values to fill the state's required parameters.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the\n     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n     *    ancestor with a valid url).\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n     * \n     * @returns {string} compiled state url\n     */\n    $state.href = function href(stateOrName, params, options) {\n      options = extend({\n        lossy:    true,\n        inherit:  true,\n        absolute: false,\n        relative: $state.$current\n      }, options || {});\n\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) return null;\n      if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);\n      \n      var nav = (state && options.lossy) ? state.navigable : state;\n\n      if (!nav || nav.url === undefined || nav.url === null) {\n        return null;\n      }\n      return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys(), params || {}), {\n        absolute: options.absolute\n      });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#get\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Returns the state configuration object for any specific state or all states.\n     *\n     * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for\n     * the requested state. If not provided, returns an array of ALL state configs.\n     * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.\n     * @returns {Object|Array} State configuration object or array of all objects.\n     */\n    $state.get = function (stateOrName, context) {\n      if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });\n      var state = findState(stateOrName, context || $state.$current);\n      return (state && state.self) ? state.self : null;\n    };\n\n    function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {\n      // Make a restricted $stateParams with only the parameters that apply to this state if\n      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n      // we also need $stateParams to be available for any $injector calls we make during the\n      // dependency resolution process.\n      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);\n      var locals = { $stateParams: $stateParams };\n\n      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n      // We're also including $stateParams in this; that way the parameters are restricted\n      // to the set that should be visible to the state, and are independent of when we update\n      // the global $state and $stateParams values.\n      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n      var promises = [dst.resolve.then(function (globals) {\n        dst.globals = globals;\n      })];\n      if (inherited) promises.push(inherited);\n\n      // Resolve template and dependencies for all views.\n      forEach(state.views, function (view, name) {\n        var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n        injectables.$template = [ function () {\n          return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: options.notify }) || '';\n        }];\n\n        promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) {\n          // References to the controller (only instantiated at link time)\n          if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n            var injectLocals = angular.extend({}, injectables, locals);\n            result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n          } else {\n            result.$$controller = view.controller;\n          }\n          // Provide access to the state itself for internal use\n          result.$$state = state;\n          result.$$controllerAs = view.controllerAs;\n          dst[name] = result;\n        }));\n      });\n\n      // Wait for all the promises and then return the activation object\n      return $q.all(promises).then(function (values) {\n        return dst;\n      });\n    }\n\n    return $state;\n  }\n\n  function shouldTriggerReload(to, from, locals, options) {\n    if (to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false))) {\n      return true;\n    }\n  }\n}\n\nangular.module('ui.router.state')\n  .value('$stateParams', {})\n  .provider('$state', $StateProvider);\n\n\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n  this.$get = $get;\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$view\n   *\n   * @requires ui.router.util.$templateFactory\n   * @requires $rootScope\n   *\n   * @description\n   *\n   */\n  $get.$inject = ['$rootScope', '$templateFactory'];\n  function $get(   $rootScope,   $templateFactory) {\n    return {\n      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n      /**\n       * @ngdoc function\n       * @name ui.router.state.$view#load\n       * @methodOf ui.router.state.$view\n       *\n       * @description\n       *\n       * @param {string} name name\n       * @param {object} options option object.\n       */\n      load: function load(name, options) {\n        var result, defaults = {\n          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n        };\n        options = extend(defaults, options);\n\n        if (options.view) {\n          result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n        }\n        if (result && options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$viewContentLoading\n         * @eventOf ui.router.state.$view\n         * @eventType broadcast on root scope\n         * @description\n         *\n         * Fired once the view **begins loading**, *before* the DOM is rendered.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} viewConfig The view config properties (template, controller, etc).\n         *\n         * @example\n         *\n         * <pre>\n         * $scope.$on('$viewContentLoading',\n         * function(event, viewConfig){\n         *     // Access to all the view config properties.\n         *     // and one special property 'targetView'\n         *     // viewConfig.targetView\n         * });\n         * </pre>\n         */\n          $rootScope.$broadcast('$viewContentLoading', options);\n        }\n        return result;\n      }\n    };\n  }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n  var useAnchorScroll = false;\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n   * @methodOf ui.router.state.$uiViewScrollProvider\n   *\n   * @description\n   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n   * scrolling based on the url anchor.\n   */\n  this.useAnchorScroll = function () {\n    useAnchorScroll = true;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$uiViewScroll\n   *\n   * @requires $anchorScroll\n   * @requires $timeout\n   *\n   * @description\n   * When called with a jqLite element, it scrolls the element into view (after a\n   * `$timeout` so the DOM has time to refresh).\n   *\n   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n   */\n  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n    if (useAnchorScroll) {\n      return $anchorScroll;\n    }\n\n    return function ($element) {\n      $timeout(function () {\n        $element[0].scrollIntoView();\n      }, 0, false);\n    };\n  }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n * \n * @example\n * A view can be unnamed or named. \n * <pre>\n * <!-- Unnamed -->\n * <div ui-view></div> \n * \n * <!-- Named -->\n * <div ui-view=\"viewName\"></div>\n * </pre>\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a \n * single view and it is unnamed then you can populate it like so:\n * <pre>\n * <div ui-view></div> \n * $stateProvider.state(\"home\", {\n *   template: \"<h1>HELLO!</h1>\"\n * })\n * </pre>\n * \n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}\n * config property, by name, in this case an empty name:\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * But typically you'll only use the views property if you name your view or have more than one view \n * in the same template. There's not really a compelling reason to name a view if its the only one, \n * but you could if you wanted, like so:\n * <pre>\n * <div ui-view=\"main\"></div>\n * </pre> \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * Really though, you'll use views to set up multiple views:\n * <pre>\n * <div ui-view></div>\n * <div ui-view=\"chart\"></div> \n * <div ui-view=\"data\"></div> \n * </pre>\n * \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     },\n *     \"chart\": {\n *       template: \"<chart_thing/>\"\n *     },\n *     \"data\": {\n *       template: \"<data_thing/>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Examples for `autoscroll`:\n *\n * <pre>\n * <!-- If autoscroll present with no expression,\n *      then scroll ui-view into view -->\n * <ui-view autoscroll/>\n *\n * <!-- If autoscroll present with valid expression,\n *      then scroll ui-view into view if expression evaluates to true -->\n * <ui-view autoscroll='true'/>\n * <ui-view autoscroll='false'/>\n * <ui-view autoscroll='scopeVariable'/>\n * </pre>\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate'];\nfunction $ViewDirective(   $state,   $injector,   $uiViewScroll,   $interpolate) {\n\n  function getService() {\n    return ($injector.has) ? function(service) {\n      return $injector.has(service) ? $injector.get(service) : null;\n    } : function(service) {\n      try {\n        return $injector.get(service);\n      } catch (e) {\n        return null;\n      }\n    };\n  }\n\n  var service = getService(),\n      $animator = service('$animator'),\n      $animate = service('$animate');\n\n  // Returns a set of DOM manipulation functions based on which Angular version\n  // it should use\n  function getRenderer(attrs, scope) {\n    var statics = function() {\n      return {\n        enter: function (element, target, cb) { target.after(element); cb(); },\n        leave: function (element, cb) { element.remove(); cb(); }\n      };\n    };\n\n    if ($animate) {\n      return {\n        enter: function(element, target, cb) {\n          var promise = $animate.enter(element, null, target, cb);\n          if (promise && promise.then) promise.then(cb);\n        },\n        leave: function(element, cb) {\n          var promise = $animate.leave(element, cb);\n          if (promise && promise.then) promise.then(cb);\n        }\n      };\n    }\n\n    if ($animator) {\n      var animate = $animator && $animator(scope, attrs);\n\n      return {\n        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n        leave: function(element, cb) { animate.leave(element); cb(); }\n      };\n    }\n\n    return statics();\n  }\n\n  var directive = {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    compile: function (tElement, tAttrs, $transclude) {\n      return function (scope, $element, attrs) {\n        var previousEl, currentEl, currentScope, latestLocals,\n            onloadExp     = attrs.onload || '',\n            autoScrollExp = attrs.autoscroll,\n            renderer      = getRenderer(attrs, scope);\n\n        scope.$on('$stateChangeSuccess', function() {\n          updateView(false);\n        });\n        scope.$on('$viewContentLoading', function() {\n          updateView(false);\n        });\n\n        updateView(true);\n\n        function cleanupLastView() {\n          if (previousEl) {\n            previousEl.remove();\n            previousEl = null;\n          }\n\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n\n          if (currentEl) {\n            renderer.leave(currentEl, function() {\n              previousEl = null;\n            });\n\n            previousEl = currentEl;\n            currentEl = null;\n          }\n        }\n\n        function updateView(firstTime) {\n          var newScope,\n              name            = getUiViewName(scope, attrs, $element, $interpolate),\n              previousLocals  = name && $state.$current && $state.$current.locals[name];\n\n          if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n          newScope = scope.$new();\n          latestLocals = $state.$current.locals[name];\n\n          var clone = $transclude(newScope, function(clone) {\n            renderer.enter(clone, $element, function onUiViewEnter() {\n              if(currentScope) {\n                currentScope.$emit('$viewContentAnimationEnded');\n              }\n\n              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n                $uiViewScroll(clone);\n              }\n            });\n            cleanupLastView();\n          });\n\n          currentEl = clone;\n          currentScope = newScope;\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoaded\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description           *\n           * Fired once the view is **loaded**, *after* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           */\n          currentScope.$emit('$viewContentLoaded');\n          currentScope.$eval(onloadExp);\n        }\n      };\n    }\n  };\n\n  return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];\nfunction $ViewDirectiveFill (  $compile,   $controller,   $state,   $interpolate) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    compile: function (tElement) {\n      var initial = tElement.html();\n      return function (scope, $element, attrs) {\n        var current = $state.$current,\n            name = getUiViewName(scope, attrs, $element, $interpolate),\n            locals  = current && current.locals[name];\n\n        if (! locals) {\n          return;\n        }\n\n        $element.data('$uiView', { name: name, state: locals.$$state });\n        $element.html(locals.$template ? locals.$template : initial);\n\n        var link = $compile($element.contents());\n\n        if (locals.$$controller) {\n          locals.$scope = scope;\n          var controller = $controller(locals.$$controller, locals);\n          if (locals.$$controllerAs) {\n            scope[locals.$$controllerAs] = controller;\n          }\n          $element.data('$ngControllerController', controller);\n          $element.children().data('$ngControllerController', controller);\n        }\n\n        link(scope);\n      };\n    }\n  };\n}\n\n/**\n * Shared ui-view code for both directives:\n * Given scope, element, and its attributes, return the view's name\n */\nfunction getUiViewName(scope, attrs, element, $interpolate) {\n  var name = $interpolate(attrs.uiView || attrs.name || '')(scope);\n  var inherited = element.inheritedData('$uiView');\n  return name.indexOf('@') >= 0 ?  name :  (name + '@' + (inherited ? inherited.state.name : ''));\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n\nfunction parseStateRef(ref, current) {\n  var preparsed = ref.match(/^\\s*({[^}]*})\\s*$/), parsed;\n  if (preparsed) ref = current + '(' + preparsed[1] + ')';\n  parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n  if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n  return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n  var stateData = el.parent().inheritedData('$uiView');\n\n  if (stateData && stateData.state && stateData.state.name) {\n    return stateData.state;\n  }\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`<a>` tag) to a state. If the state has an associated \n * URL, the directive will automatically generate & update the `href` attribute via \n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking \n * the link will trigger a state transition with optional parameters. \n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be \n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative \n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the \n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the \n * following template:\n * <pre>\n * <a ui-sref=\"home\">Home</a> | <a ui-sref=\"about\">About</a> | <a ui-sref=\"{page: 2}\">Next page</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a ui-sref=\"contacts.detail({ id: contact.id })\">{{ contact.name }}</a>\n *     </li>\n * </ul>\n * </pre>\n * \n * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):\n * <pre>\n * <a href=\"#/home\" ui-sref=\"home\">Home</a> | <a href=\"#/about\" ui-sref=\"about\">About</a> | <a href=\"#/contacts?page=2\" ui-sref=\"{page: 2}\">Next page</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/1\" ui-sref=\"contacts.detail({ id: contact.id })\">Joe</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/2\" ui-sref=\"contacts.detail({ id: contact.id })\">Alice</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/3\" ui-sref=\"contacts.detail({ id: contact.id })\">Bob</a>\n *     </li>\n * </ul>\n *\n * <a ui-sref=\"home\" ui-sref-opts=\"{reload: true}\">Home</a>\n * </pre>\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n  var allowedOptions = ['location', 'inherit', 'reload'];\n\n  return {\n    restrict: 'A',\n    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n    link: function(scope, element, attrs, uiSrefActive) {\n      var ref = parseStateRef(attrs.uiSref, $state.current.name);\n      var params = null, url = null, base = stateContext(element) || $state.$current;\n      var newHref = null, isAnchor = element.prop(\"tagName\") === \"A\";\n      var isForm = element[0].nodeName === \"FORM\";\n      var attr = isForm ? \"action\" : \"href\", nav = true;\n\n      var options = { relative: base, inherit: true };\n      var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};\n\n      angular.forEach(allowedOptions, function(option) {\n        if (option in optionsOverride) {\n          options[option] = optionsOverride[option];\n        }\n      });\n\n      var update = function(newVal) {\n        if (newVal) params = angular.copy(newVal);\n        if (!nav) return;\n\n        newHref = $state.href(ref.state, params, options);\n\n        var activeDirective = uiSrefActive[1] || uiSrefActive[0];\n        if (activeDirective) {\n          activeDirective.$$setStateInfo(ref.state, params);\n        }\n        if (newHref === null) {\n          nav = false;\n          return false;\n        }\n        attrs.$set(attr, newHref);\n      };\n\n      if (ref.paramExpr) {\n        scope.$watch(ref.paramExpr, function(newVal, oldVal) {\n          if (newVal !== params) update(newVal);\n        }, true);\n        params = angular.copy(scope.$eval(ref.paramExpr));\n      }\n      update();\n\n      if (isForm) return;\n\n      element.bind(\"click\", function(e) {\n        var button = e.which || e.button;\n        if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {\n          // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n          var transition = $timeout(function() {\n            $state.go(ref.state, params, options);\n          });\n          e.preventDefault();\n\n          // if the state has no URL, ignore one preventDefault from the <a> directive.\n          var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;\n          e.preventDefault = function() {\n            if (ignorePreventDefaultCount-- <= 0)\n              $timeout.cancel(transition);\n          };\n        }\n      });\n    }\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the\n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus\n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * ui-sref-active can live on the same element as ui-sref or on a parent element. The first\n * ui-sref-active found at the same level or above the ui-sref will be used.\n *\n * Will activate when the ui-sref's target state or any child state is active. If you\n * need to activate only when the ui-sref target state is active and *not* any of\n * it's children, then you will use\n * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}\n *\n * @example\n * Given the following template:\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item\">\n *     <a href ui-sref=\"app.user({user: 'bilbobaggins'})\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n *\n * When the app state is \"app.user\" (or any children states), and contains the state parameter \"user\" with value \"bilbobaggins\",\n * the resulting HTML will appear as (note the 'active' class):\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item active\">\n *     <a ui-sref=\"app.user({user: 'bilbobaggins'})\" href=\"/users/bilbobaggins\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n * The class name is interpolated **once** during the directives link time (any further changes to the\n * interpolated value are ignored).\n *\n * Multiple classes may be specified in a space-separated format:\n * <pre>\n * <ul>\n *   <li ui-sref-active='class1 class2 class3'>\n *     <a ui-sref=\"app.user\">link</a>\n *   </li>\n * </ul>\n * </pre>\n */\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active-eq\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate\n * when the exact target state used in the `ui-sref` is active; no child states.\n *\n */\n$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateRefActiveDirective($state, $stateParams, $interpolate) {\n  return  {\n    restrict: \"A\",\n    controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {\n      var state, params, activeClass;\n\n      // There probably isn't much point in $observing this\n      // uiSrefActive and uiSrefActiveEq share the same directive object with some\n      // slight difference in logic routing\n      activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope);\n\n      // Allow uiSref to communicate with uiSrefActive[Equals]\n      this.$$setStateInfo = function (newState, newParams) {\n        state = $state.get(newState, stateContext($element));\n        params = newParams;\n        update();\n      };\n\n      $scope.$on('$stateChangeSuccess', update);\n\n      // Update route state\n      function update() {\n        if (isMatch()) {\n          $element.addClass(activeClass);\n        } else {\n          $element.removeClass(activeClass);\n        }\n      }\n\n      function isMatch() {\n        if (typeof $attrs.uiSrefActiveEq !== 'undefined') {\n          return state && $state.is(state.name, params);\n        } else {\n          return state && $state.includes(state.name, params);\n        }\n      }\n    }]\n  };\n}\n\nangular.module('ui.router.state')\n  .directive('uiSref', $StateRefDirective)\n  .directive('uiSrefActive', $StateRefActiveDirective)\n  .directive('uiSrefActiveEq', $StateRefActiveDirective);\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n  var isFilter = function (state) {\n    return $state.is(state);\n  };\n  isFilter.$stateful = true;\n  return isFilter;\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n  var includesFilter = function (state) {\n    return $state.includes(state);\n  };\n  includesFilter.$stateful = true;\n  return  includesFilter;\n}\n\nangular.module('ui.router.state')\n  .filter('isState', $IsStateFilter)\n  .filter('includedByState', $IncludedByStateFilter);\n})(window, window.angular);"
  },
  {
    "path": "client/components/angular-ui-router/src/common.js",
    "content": "/*jshint globalstrict:true*/\n/*global angular:false*/\n'use strict';\n\nvar isDefined = angular.isDefined,\n    isFunction = angular.isFunction,\n    isString = angular.isString,\n    isObject = angular.isObject,\n    isArray = angular.isArray,\n    forEach = angular.forEach,\n    extend = angular.extend,\n    copy = angular.copy;\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, { prototype: parent }))(), extra);\n}\n\nfunction merge(dst) {\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        if (!dst.hasOwnProperty(key)) dst[key] = value;\n      });\n    }\n  });\n  return dst;\n}\n\n/**\n * Finds the common ancestor path between two states.\n *\n * @param {Object} first The first state.\n * @param {Object} second The second state.\n * @return {Array} Returns an array of state names in descending order, not including the root.\n */\nfunction ancestors(first, second) {\n  var path = [];\n\n  for (var n in first.path) {\n    if (first.path[n] !== second.path[n]) break;\n    path.push(first.path[n]);\n  }\n  return path;\n}\n\n/**\n * IE8-safe wrapper for `Object.keys()`.\n *\n * @param {Object} object A JavaScript object.\n * @return {Array} Returns the keys of the object as an array.\n */\nfunction objectKeys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n  var result = [];\n\n  angular.forEach(object, function(val, key) {\n    result.push(key);\n  });\n  return result;\n}\n\n/**\n * IE8-safe wrapper for `Array.prototype.indexOf()`.\n *\n * @param {Array} array A JavaScript array.\n * @param {*} value A value to search the array for.\n * @return {Number} Returns the array index value of `value`, or `-1` if not present.\n */\nfunction indexOf(array, value) {\n  if (Array.prototype.indexOf) {\n    return array.indexOf(value, Number(arguments[2]) || 0);\n  }\n  var len = array.length >>> 0, from = Number(arguments[2]) || 0;\n  from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n\n  if (from < 0) from += len;\n\n  for (; from < len; from++) {\n    if (from in array && array[from] === value) return from;\n  }\n  return -1;\n}\n\n/**\n * Merges a set of parameters with all parameters inherited between the common parents of the\n * current state and a given destination state.\n *\n * @param {Object} currentParams The value of the current state parameters ($stateParams).\n * @param {Object} newParams The set of parameters which will be composited with inherited params.\n * @param {Object} $current Internal definition of object representing the current state.\n * @param {Object} $to Internal definition of object representing state to transition to.\n */\nfunction inheritParams(currentParams, newParams, $current, $to) {\n  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];\n\n  for (var i in parents) {\n    if (!parents[i].params) continue;\n    parentParams = objectKeys(parents[i].params);\n    if (!parentParams.length) continue;\n\n    for (var j in parentParams) {\n      if (indexOf(inheritList, parentParams[j]) >= 0) continue;\n      inheritList.push(parentParams[j]);\n      inherited[parentParams[j]] = currentParams[parentParams[j]];\n    }\n  }\n  return extend({}, inherited, newParams);\n}\n\n/**\n * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.\n *\n * @param {Object} a The first object.\n * @param {Object} b The second object.\n * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,\n *                     it defaults to the list of keys in `a`.\n * @return {Boolean} Returns `true` if the keys match, otherwise `false`.\n */\nfunction equalForKeys(a, b, keys) {\n  if (!keys) {\n    keys = [];\n    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility\n  }\n\n  for (var i=0; i<keys.length; i++) {\n    var k = keys[i];\n    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized\n  }\n  return true;\n}\n\n/**\n * Returns the subset of an object, based on a list of keys.\n *\n * @param {Array} keys\n * @param {Object} values\n * @return {Boolean} Returns a subset of `values`.\n */\nfunction filterByKeys(keys, values) {\n  var filtered = {};\n\n  forEach(keys, function (name) {\n    filtered[name] = values[name];\n  });\n  return filtered;\n}\n\n// like _.indexBy\n// when you know that your index values will be unique, or you want last-one-in to win\nfunction indexBy(array, propName) {\n  var result = {};\n  forEach(array, function(item) {\n    result[item[propName]] = item;\n  });\n  return result;\n}\n\n// extracted from underscore.js\n// Return a copy of the object only containing the whitelisted properties.\nfunction pick(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  forEach(keys, function(key) {\n    if (key in obj) copy[key] = obj[key];\n  });\n  return copy;\n}\n\n// extracted from underscore.js\n// Return a copy of the object omitting the blacklisted properties.\nfunction omit(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  for (var key in obj) {\n    if (indexOf(keys, key) == -1) copy[key] = obj[key];\n  }\n  return copy;\n}\n\nfunction pluck(collection, key) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = isFunction(key) ? key(val) : val[key];\n  });\n  return result;\n}\n\nfunction filter(collection, callback) {\n  var array = isArray(collection);\n  var result = array ? [] : {};\n  forEach(collection, function(val, i) {\n    if (callback(val, i)) {\n      result[array ? result.length : i] = val;\n    }\n  });\n  return result;\n}\n\nfunction map(collection, callback) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = callback(val, i);\n  });\n  return result;\n}\n\n/**\n * @ngdoc overview\n * @name ui.router.util\n *\n * @description\n * # ui.router.util sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n *\n */\nangular.module('ui.router.util', ['ng']);\n\n/**\n * @ngdoc overview\n * @name ui.router.router\n * \n * @requires ui.router.util\n *\n * @description\n * # ui.router.router sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n */\nangular.module('ui.router.router', ['ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router.state\n * \n * @requires ui.router.router\n * @requires ui.router.util\n *\n * @description\n * # ui.router.state sub-module\n *\n * This module is a dependency of the main ui.router module. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n * \n */\nangular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router\n *\n * @requires ui.router.state\n *\n * @description\n * # ui.router\n * \n * ## The main module for ui.router \n * There are several sub-modules included with the ui.router module, however only this module is needed\n * as a dependency within your angular app. The other modules are for organization purposes. \n *\n * The modules are:\n * * ui.router - the main \"umbrella\" module\n * * ui.router.router - \n * \n * *You'll need to include **only** this module as the dependency within your angular app.*\n * \n * <pre>\n * <!doctype html>\n * <html ng-app=\"myApp\">\n * <head>\n *   <script src=\"js/angular.js\"></script>\n *   <!-- Include the ui-router script -->\n *   <script src=\"js/angular-ui-router.min.js\"></script>\n *   <script>\n *     // ...and add 'ui.router' as a dependency\n *     var myApp = angular.module('myApp', ['ui.router']);\n *   </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * </pre>\n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/resolve.js",
    "content": "/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve(  $q,    $injector) {\n  \n  var VISIT_IN_PROGRESS = 1,\n      VISIT_DONE = 2,\n      NOTHING = {},\n      NO_DEPENDENCIES = [],\n      NO_LOCALS = NOTHING,\n      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n  \n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#study\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Studies a set of invocables that are likely to be used multiple times.\n   * <pre>\n   * $resolve.study(invocables)(locals, parent, self)\n   * </pre>\n   * is equivalent to\n   * <pre>\n   * $resolve.resolve(invocables, locals, parent, self)\n   * </pre>\n   * but the former is more efficient (in fact `resolve` just calls `study` \n   * internally).\n   *\n   * @param {object} invocables Invocable objects\n   * @return {function} a function to pass in locals, parent and self\n   */\n  this.study = function (invocables) {\n    if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n    var invocableKeys = objectKeys(invocables || {});\n    \n    // Perform a topological sort of invocables to build an ordered plan\n    var plan = [], cycle = [], visited = {};\n    function visit(value, key) {\n      if (visited[key] === VISIT_DONE) return;\n      \n      cycle.push(key);\n      if (visited[key] === VISIT_IN_PROGRESS) {\n        cycle.splice(0, indexOf(cycle, key));\n        throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n      }\n      visited[key] = VISIT_IN_PROGRESS;\n      \n      if (isString(value)) {\n        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n      } else {\n        var params = $injector.annotate(value);\n        forEach(params, function (param) {\n          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n        });\n        plan.push(key, value, params);\n      }\n      \n      cycle.pop();\n      visited[key] = VISIT_DONE;\n    }\n    forEach(invocables, visit);\n    invocables = cycle = visited = null; // plan is all that's required\n    \n    function isResolve(value) {\n      return isObject(value) && value.then && value.$$promises;\n    }\n    \n    return function (locals, parent, self) {\n      if (isResolve(locals) && self === undefined) {\n        self = parent; parent = locals; locals = null;\n      }\n      if (!locals) locals = NO_LOCALS;\n      else if (!isObject(locals)) {\n        throw new Error(\"'locals' must be an object\");\n      }       \n      if (!parent) parent = NO_PARENT;\n      else if (!isResolve(parent)) {\n        throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n      }\n      \n      // To complete the overall resolution, we have to wait for the parent\n      // promise and for the promise for each invokable in our plan.\n      var resolution = $q.defer(),\n          result = resolution.promise,\n          promises = result.$$promises = {},\n          values = extend({}, locals),\n          wait = 1 + plan.length/3,\n          merged = false;\n          \n      function done() {\n        // Merge parent values we haven't got yet and publish our own $$values\n        if (!--wait) {\n          if (!merged) merge(values, parent.$$values); \n          result.$$values = values;\n          result.$$promises = result.$$promises || true; // keep for isResolve()\n          delete result.$$inheritedValues;\n          resolution.resolve(values);\n        }\n      }\n      \n      function fail(reason) {\n        result.$$failure = reason;\n        resolution.reject(reason);\n      }\n\n      // Short-circuit if parent has already failed\n      if (isDefined(parent.$$failure)) {\n        fail(parent.$$failure);\n        return result;\n      }\n      \n      if (parent.$$inheritedValues) {\n        merge(values, omit(parent.$$inheritedValues, invocableKeys));\n      }\n\n      // Merge parent values if the parent has already resolved, or merge\n      // parent promises and wait if the parent resolve is still in progress.\n      extend(promises, parent.$$promises);\n      if (parent.$$values) {\n        merged = merge(values, omit(parent.$$values, invocableKeys));\n        result.$$inheritedValues = omit(parent.$$values, invocableKeys);\n        done();\n      } else {\n        if (parent.$$inheritedValues) {\n          result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);\n        }        \n        parent.then(done, fail);\n      }\n      \n      // Process each invocable in the plan, but ignore any where a local of the same name exists.\n      for (var i=0, ii=plan.length; i<ii; i+=3) {\n        if (locals.hasOwnProperty(plan[i])) done();\n        else invoke(plan[i], plan[i+1], plan[i+2]);\n      }\n      \n      function invoke(key, invocable, params) {\n        // Create a deferred for this invocation. Failures will propagate to the resolution as well.\n        var invocation = $q.defer(), waitParams = 0;\n        function onfailure(reason) {\n          invocation.reject(reason);\n          fail(reason);\n        }\n        // Wait for any parameter that we have a promise for (either from parent or from this\n        // resolve; in that case study() will have made sure it's ordered before us in the plan).\n        forEach(params, function (dep) {\n          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {\n            waitParams++;\n            promises[dep].then(function (result) {\n              values[dep] = result;\n              if (!(--waitParams)) proceed();\n            }, onfailure);\n          }\n        });\n        if (!waitParams) proceed();\n        function proceed() {\n          if (isDefined(result.$$failure)) return;\n          try {\n            invocation.resolve($injector.invoke(invocable, self, values));\n            invocation.promise.then(function (result) {\n              values[key] = result;\n              done();\n            }, onfailure);\n          } catch (e) {\n            onfailure(e);\n          }\n        }\n        // Publish promise synchronously; invocations further down in the plan may depend on it.\n        promises[key] = invocation.promise;\n      }\n      \n      return result;\n    };\n  };\n  \n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#resolve\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Resolves a set of invocables. An invocable is a function to be invoked via \n   * `$injector.invoke()`, and can have an arbitrary number of dependencies. \n   * An invocable can either return a value directly,\n   * or a `$q` promise. If a promise is returned it will be resolved and the \n   * resulting value will be used instead. Dependencies of invocables are resolved \n   * (in this order of precedence)\n   *\n   * - from the specified `locals`\n   * - from another invocable that is part of this `$resolve` call\n   * - from an invocable that is inherited from a `parent` call to `$resolve` \n   *   (or recursively\n   * - from any ancestor `$resolve` of that parent).\n   *\n   * The return value of `$resolve` is a promise for an object that contains \n   * (in this order of precedence)\n   *\n   * - any `locals` (if specified)\n   * - the resolved return values of all injectables\n   * - any values inherited from a `parent` call to `$resolve` (if specified)\n   *\n   * The promise will resolve after the `parent` promise (if any) and all promises \n   * returned by injectables have been resolved. If any invocable \n   * (or `$injector.invoke`) throws an exception, or if a promise returned by an \n   * invocable is rejected, the `$resolve` promise is immediately rejected with the \n   * same error. A rejection of a `parent` promise (if specified) will likewise be \n   * propagated immediately. Once the `$resolve` promise has been rejected, no \n   * further invocables will be called.\n   * \n   * Cyclic dependencies between invocables are not permitted and will caues `$resolve`\n   * to throw an error. As a special case, an injectable can depend on a parameter \n   * with the same name as the injectable, which will be fulfilled from the `parent` \n   * injectable of the same name. This allows inherited values to be decorated. \n   * Note that in this case any other injectable in the same `$resolve` with the same\n   * dependency would see the decorated value, not the inherited value.\n   *\n   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an \n   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) \n   * exception.\n   *\n   * Invocables are invoked eagerly as soon as all dependencies are available. \n   * This is true even for dependencies inherited from a `parent` call to `$resolve`.\n   *\n   * As a special case, an invocable can be a string, in which case it is taken to \n   * be a service name to be passed to `$injector.get()`. This is supported primarily \n   * for backwards-compatibility with the `resolve` property of `$routeProvider` \n   * routes.\n   *\n   * @param {object} invocables functions to invoke or \n   * `$injector` services to fetch.\n   * @param {object} locals  values to make available to the injectables\n   * @param {object} parent  a promise returned by another call to `$resolve`.\n   * @param {object} self  the `this` for the invoked methods\n   * @return {object} Promise for an object that contains the resolved return value\n   * of all invocables, as well as any inherited and local values.\n   */\n  this.resolve = function (invocables, locals, parent, self) {\n    return this.study(invocables)(locals, parent, self);\n  };\n}\n\nangular.module('ui.router.util').service('$resolve', $Resolve);\n\n"
  },
  {
    "path": "client/components/angular-ui-router/src/state.js",
    "content": "/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];\nfunction $StateProvider(   $urlRouterProvider,   $urlMatcherFactory) {\n\n  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n  // Builds state properties from definition passed to registerState()\n  var stateBuilder = {\n\n    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n    // state.children = [];\n    // if (parent) parent.children.push(state);\n    parent: function(state) {\n      if (isDefined(state.parent) && state.parent) return findState(state.parent);\n      // regex matches any valid composite state name\n      // would match \"contact.list\" but not \"contacts\"\n      var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n      return compositeName ? findState(compositeName[1]) : root;\n    },\n\n    // inherit 'data' from parent and override by own values (if any)\n    data: function(state) {\n      if (state.parent && state.parent.data) {\n        state.data = state.self.data = extend({}, state.parent.data, state.data);\n      }\n      return state.data;\n    },\n\n    // Build a URLMatcher if necessary, either via a relative or absolute URL\n    url: function(state) {\n      var url = state.url, config = { params: state.params || {} };\n\n      if (isString(url)) {\n        if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);\n        return (state.parent.navigable || root).url.concat(url, config);\n      }\n\n      if (!url || $urlMatcherFactory.isMatcher(url)) return url;\n      throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n    },\n\n    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n    navigable: function(state) {\n      return state.url ? state : (state.parent ? state.parent.navigable : null);\n    },\n\n    // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params\n    ownParams: function(state) {\n      var params = state.url && state.url.params || new $$UMFP.ParamSet();\n      forEach(state.params || {}, function(config, id) {\n        if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, \"config\");\n      });\n      return params;\n    },\n\n    // Derive parameters for this state and ensure they're a super-set of parent's parameters\n    params: function(state) {\n      return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet();\n    },\n\n    // If there is no explicit multi-view configuration, make one up so we don't have\n    // to handle both cases in the view directive later. Note that having an explicit\n    // 'views' property will mean the default unnamed view properties are ignored. This\n    // is also a good time to resolve view names to absolute names, so everything is a\n    // straight lookup at link time.\n    views: function(state) {\n      var views = {};\n\n      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n        if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n        views[name] = view;\n      });\n      return views;\n    },\n\n    // Keep a full path from the root down to this state as this is needed for state activation.\n    path: function(state) {\n      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n    },\n\n    // Speed up $state.contains() as it's used a lot\n    includes: function(state) {\n      var includes = state.parent ? extend({}, state.parent.includes) : {};\n      includes[state.name] = true;\n      return includes;\n    },\n\n    $delegates: {}\n  };\n\n  function isRelative(stateName) {\n    return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n  }\n\n  function findState(stateOrName, base) {\n    if (!stateOrName) return undefined;\n\n    var isStr = isString(stateOrName),\n        name  = isStr ? stateOrName : stateOrName.name,\n        path  = isRelative(name);\n\n    if (path) {\n      if (!base) throw new Error(\"No reference point given for path '\"  + name + \"'\");\n      base = findState(base);\n      \n      var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n      for (; i < pathLength; i++) {\n        if (rel[i] === \"\" && i === 0) {\n          current = base;\n          continue;\n        }\n        if (rel[i] === \"^\") {\n          if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n          current = current.parent;\n          continue;\n        }\n        break;\n      }\n      rel = rel.slice(i).join(\".\");\n      name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n    }\n    var state = states[name];\n\n    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n      return state;\n    }\n    return undefined;\n  }\n\n  function queueState(parentName, state) {\n    if (!queue[parentName]) {\n      queue[parentName] = [];\n    }\n    queue[parentName].push(state);\n  }\n\n  function flushQueuedChildren(parentName) {\n    var queued = queue[parentName] || [];\n    while(queued.length) {\n      registerState(queued.shift());\n    }\n  }\n\n  function registerState(state) {\n    // Wrap a new object around the state so we can store our private details easily.\n    state = inherit(state, {\n      self: state,\n      resolve: state.resolve || {},\n      toString: function() { return this.name; }\n    });\n\n    var name = state.name;\n    if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n    if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"'' is already defined\");\n\n    // Get parent name\n    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n        : (isString(state.parent)) ? state.parent\n        : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name\n        : '';\n\n    // If parent is not registered yet, add state to queue and register later\n    if (parentName && !states[parentName]) {\n      return queueState(parentName, state.self);\n    }\n\n    for (var key in stateBuilder) {\n      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n    }\n    states[name] = state;\n\n    // Register the state in the global state list and with $urlRouter if necessary.\n    if (!state[abstractKey] && state.url) {\n      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n          $state.transitionTo(state, $match, { inherit: true, location: false });\n        }\n      }]);\n    }\n\n    // Register any queued children\n    flushQueuedChildren(name);\n\n    return state;\n  }\n\n  // Checks text to see if it looks like a glob.\n  function isGlob (text) {\n    return text.indexOf('*') > -1;\n  }\n\n  // Returns true if glob matches current $state name.\n  function doesStateMatchGlob (glob) {\n    var globSegments = glob.split('.'),\n        segments = $state.$current.name.split('.');\n\n    //match greedy starts\n    if (globSegments[0] === '**') {\n       segments = segments.slice(indexOf(segments, globSegments[1]));\n       segments.unshift('**');\n    }\n    //match greedy ends\n    if (globSegments[globSegments.length - 1] === '**') {\n       segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n       segments.push('**');\n    }\n\n    if (globSegments.length != segments.length) {\n      return false;\n    }\n\n    //match single stars\n    for (var i = 0, l = globSegments.length; i < l; i++) {\n      if (globSegments[i] === '*') {\n        segments[i] = '*';\n      }\n    }\n\n    return segments.join('') === globSegments.join('');\n  }\n\n\n  // Implicit root state that is always active\n  root = registerState({\n    name: '',\n    url: '^',\n    views: null,\n    'abstract': true\n  });\n  root.navigable = null;\n\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#decorator\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Allows you to extend (carefully) or override (at your own peril) the \n   * `stateBuilder` object used internally by `$stateProvider`. This can be used \n   * to add custom functionality to ui-router, for example inferring templateUrl \n   * based on the state name.\n   *\n   * When passing only a name, it returns the current (original or decorated) builder\n   * function that matches `name`.\n   *\n   * The builder functions that can be decorated are listed below. Though not all\n   * necessarily have a good use case for decoration, that is up to you to decide.\n   *\n   * In addition, users can attach custom decorators, which will generate new \n   * properties within the state's internal definition. There is currently no clear \n   * use-case for this beyond accessing internal states (i.e. $state.$current), \n   * however, expect this to become increasingly relevant as we introduce additional \n   * meta-programming features.\n   *\n   * **Warning**: Decorators should not be interdependent because the order of \n   * execution of the builder functions in non-deterministic. Builder functions \n   * should only be dependent on the state definition object and super function.\n   *\n   *\n   * Existing builder functions and current return values:\n   *\n   * - **parent** `{object}` - returns the parent state object.\n   * - **data** `{object}` - returns state data, including any inherited data that is not\n   *   overridden by own values (if any).\n   * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}\n   *   or `null`.\n   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n   *   navigable).\n   * - **params** `{object}` - returns an array of state params that are ensured to \n   *   be a super-set of parent's params.\n   * - **views** `{object}` - returns a views object where each key is an absolute view \n   *   name (i.e. \"viewName@stateName\") and each value is the config object \n   *   (template, controller) for the view. Even when you don't use the views object \n   *   explicitly on a state config, one is still created for you internally.\n   *   So by decorating this builder function you have access to decorating template \n   *   and controller properties.\n   * - **ownParams** `{object}` - returns an array of params that belong to the state, \n   *   not including any params defined by ancestor states.\n   * - **path** `{string}` - returns the full path from the root down to this state. \n   *   Needed for state activation.\n   * - **includes** `{object}` - returns an object that includes every state that \n   *   would pass a `$state.includes()` test.\n   *\n   * @example\n   * <pre>\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function (state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(views, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * </pre>\n   *\n   * @param {string} name The name of the builder function to decorate. \n   * @param {object} func A function that is responsible for decorating the original \n   * builder function. The function receives two parameters:\n   *\n   *   - `{object}` - state - The state config object.\n   *   - `{object}` - super - The original builder function.\n   *\n   * @return {object} $stateProvider - $stateProvider instance\n   */\n  this.decorator = decorator;\n  function decorator(name, func) {\n    /*jshint validthis: true */\n    if (isString(name) && !isDefined(func)) {\n      return stateBuilder[name];\n    }\n    if (!isFunction(func) || !isString(name)) {\n      return this;\n    }\n    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n      stateBuilder.$delegates[name] = stateBuilder[name];\n    }\n    stateBuilder[name] = func;\n    return this;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#state\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Registers a state configuration under a given state name. The stateConfig object\n   * has the following acceptable properties.\n   *\n   * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\".\n   * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n   * @param {object} stateConfig State configuration object.\n   * @param {string|function=} stateConfig.template\n   * <a id='template'></a>\n   *   html template as a string or a function that returns\n   *   an html template as a string which should be used by the uiView directives. This property \n   *   takes precedence over templateUrl.\n   *   \n   *   If `template` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by\n   *     applying the current state\n   *\n   * <pre>template:\n   *   \"<h1>inline template definition</h1>\" +\n   *   \"<div ui-view></div>\"</pre>\n   * <pre>template: function(params) {\n   *       return \"<h1>generated template</h1>\"; }</pre>\n   * </div>\n   *\n   * @param {string|function=} stateConfig.templateUrl\n   * <a id='templateUrl'></a>\n   *\n   *   path or function that returns a path to an html\n   *   template that should be used by uiView.\n   *   \n   *   If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by \n   *     applying the current state\n   *\n   * <pre>templateUrl: \"home.html\"</pre>\n   * <pre>templateUrl: function(params) {\n   *     return myTemplates[params.pageId]; }</pre>\n   *\n   * @param {function=} stateConfig.templateProvider\n   * <a id='templateProvider'></a>\n   *    Provider function that returns HTML content string.\n   * <pre> templateProvider:\n   *       function(MyTemplateService, params) {\n   *         return MyTemplateService.getTemplate(params.pageId);\n   *       }</pre>\n   *\n   * @param {string|function=} stateConfig.controller\n   * <a id='controller'></a>\n   *\n   *  Controller fn that should be associated with newly\n   *   related scope or the name of a registered controller if passed as a string.\n   *   Optionally, the ControllerAs may be declared here.\n   * <pre>controller: \"MyRegisteredController\"</pre>\n   * <pre>controller:\n   *     \"MyRegisteredController as fooCtrl\"}</pre>\n   * <pre>controller: function($scope, MyService) {\n   *     $scope.data = MyService.getData(); }</pre>\n   *\n   * @param {function=} stateConfig.controllerProvider\n   * <a id='controllerProvider'></a>\n   *\n   * Injectable provider function that returns the actual controller or string.\n   * <pre>controllerProvider:\n   *   function(MyResolveData) {\n   *     if (MyResolveData.foo)\n   *       return \"FooCtrl\"\n   *     else if (MyResolveData.bar)\n   *       return \"BarCtrl\";\n   *     else return function($scope) {\n   *       $scope.baz = \"Qux\";\n   *     }\n   *   }</pre>\n   *\n   * @param {string=} stateConfig.controllerAs\n   * <a id='controllerAs'></a>\n   * \n   * A controller alias name. If present the controller will be\n   *   published to scope under the controllerAs name.\n   * <pre>controllerAs: \"myCtrl\"</pre>\n   *\n   * @param {object=} stateConfig.resolve\n   * <a id='resolve'></a>\n   *\n   * An optional map&lt;string, function&gt; of dependencies which\n   *   should be injected into the controller. If any of these dependencies are promises, \n   *   the router will wait for them all to be resolved before the controller is instantiated.\n   *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired\n   *   and the values of the resolved promises are injected into any controllers that reference them.\n   *   If any  of the promises are rejected the $stateChangeError event is fired.\n   *\n   *   The map object is:\n   *   \n   *   - key - {string}: name of dependency to be injected into controller\n   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n   *     it is injected and return value it treated as dependency. If result is a promise, it is \n   *     resolved before its value is injected into controller.\n   *\n   * <pre>resolve: {\n   *     myResolve1:\n   *       function($http, $stateParams) {\n   *         return $http.get(\"/api/foos/\"+stateParams.fooID);\n   *       }\n   *     }</pre>\n   *\n   * @param {string=} stateConfig.url\n   * <a id='url'></a>\n   *\n   *   A url fragment with optional parameters. When a state is navigated or\n   *   transitioned to, the `$stateParams` service will be populated with any \n   *   parameters that were passed.\n   *\n   * examples:\n   * <pre>url: \"/home\"\n   * url: \"/users/:userid\"\n   * url: \"/books/{bookid:[a-zA-Z_-]}\"\n   * url: \"/books/{categoryid:int}\"\n   * url: \"/books/{publishername:string}/{categoryid:int}\"\n   * url: \"/messages?before&after\"\n   * url: \"/messages?{before:date}&{after:date}\"</pre>\n   * url: \"/messages/:mailboxid?{before:date}&{after:date}\"\n   *\n   * @param {object=} stateConfig.views\n   * <a id='views'></a>\n   * an optional map&lt;string, object&gt; which defined multiple views, or targets views\n   * manually/explicitly.\n   *\n   * Examples:\n   *\n   * Targets three named `ui-view`s in the parent state's template\n   * <pre>views: {\n   *     header: {\n   *       controller: \"headerCtrl\",\n   *       templateUrl: \"header.html\"\n   *     }, body: {\n   *       controller: \"bodyCtrl\",\n   *       templateUrl: \"body.html\"\n   *     }, footer: {\n   *       controller: \"footCtrl\",\n   *       templateUrl: \"footer.html\"\n   *     }\n   *   }</pre>\n   *\n   * Targets named `ui-view=\"header\"` from grandparent state 'top''s template, and named `ui-view=\"body\" from parent state's template.\n   * <pre>views: {\n   *     'header@top': {\n   *       controller: \"msgHeaderCtrl\",\n   *       templateUrl: \"msgHeader.html\"\n   *     }, 'body': {\n   *       controller: \"messagesCtrl\",\n   *       templateUrl: \"messages.html\"\n   *     }\n   *   }</pre>\n   *\n   * @param {boolean=} [stateConfig.abstract=false]\n   * <a id='abstract'></a>\n   * An abstract state will never be directly activated,\n   *   but can provide inherited properties to its common children states.\n   * <pre>abstract: true</pre>\n   *\n   * @param {function=} stateConfig.onEnter\n   * <a id='onEnter'></a>\n   *\n   * Callback function for when a state is entered. Good way\n   *   to trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explictly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onEnter: function(MyService, $stateParams) {\n   *     MyService.foo($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {function=} stateConfig.onExit\n   * <a id='onExit'></a>\n   *\n   * Callback function for when a state is exited. Good way to\n   *   trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explictly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onExit: function(MyService, $stateParams) {\n   *     MyService.cleanup($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {boolean=} [stateConfig.reloadOnSearch=true]\n   * <a id='reloadOnSearch'></a>\n   *\n   * If `false`, will not retrigger the same state\n   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). \n   *   Useful for when you'd like to modify $location.search() without triggering a reload.\n   * <pre>reloadOnSearch: false</pre>\n   *\n   * @param {object=} stateConfig.data\n   * <a id='data'></a>\n   *\n   * Arbitrary data object, useful for custom configuration.  The parent state's `data` is\n   *   prototypally inherited.  In other words, adding a data property to a state adds it to\n   *   the entire subtree via prototypal inheritance.\n   *\n   * <pre>data: {\n   *     requiredRole: 'foo'\n   * } </pre>\n   *\n   * @param {object=} stateConfig.params\n   * <a id='params'></a>\n   *\n   * A map which optionally configures parameters declared in the `url`, or\n   *   defines additional non-url parameters.  For each parameter being\n   *   configured, add a configuration object keyed to the name of the parameter.\n   *\n   *   Each parameter configuration object may contain the following properties:\n   *\n   *   - ** value ** - {object|function=}: specifies the default value for this\n   *     parameter.  This implicitly sets this parameter as optional.\n   *\n   *     When UI-Router routes to a state and no value is\n   *     specified for this parameter in the URL or transition, the\n   *     default value will be used instead.  If `value` is a function,\n   *     it will be injected and invoked, and the return value used.\n   *\n   *     *Note*: `undefined` is treated as \"no default value\" while `null`\n   *     is treated as \"the default value is `null`\".\n   *\n   *     *Shorthand*: If you only need to configure the default value of the\n   *     parameter, you may use a shorthand syntax.   In the **`params`**\n   *     map, instead mapping the param name to a full parameter configuration\n   *     object, simply set map it to the default parameter value, e.g.:\n   *\n   * <pre>// define a parameter's default value\n   * params: {\n   *     param1: { value: \"defaultValue\" }\n   * }\n   * // shorthand default values\n   * params: {\n   *     param1: \"defaultValue\",\n   *     param2: \"param2Default\"\n   * }</pre>\n   *\n   *   - ** array ** - {boolean=}: *(default: false)* If true, the param value will be\n   *     treated as an array of values.  If you specified a Type, the value will be\n   *     treated as an array of the specified Type.  Note: query parameter values\n   *     default to a special `\"auto\"` mode.\n   *\n   *     For query parameters in `\"auto\"` mode, if multiple  values for a single parameter\n   *     are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values\n   *     are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`).  However, if\n   *     only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single\n   *     value (e.g.: `{ foo: '1' }`).\n   *\n   * <pre>params: {\n   *     param1: { array: true }\n   * }</pre>\n   *\n   *   - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when\n   *     the current parameter value is the same as the default value. If `squash` is not set, it uses the\n   *     configured default squash policy.\n   *     (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})\n   *\n   *   There are three squash settings:\n   *\n   *     - false: The parameter's default value is not squashed.  It is encoded and included in the URL\n   *     - true: The parameter's default value is omitted from the URL.  If the parameter is preceeded and followed\n   *       by slashes in the state's `url` declaration, then one of those slashes are omitted.\n   *       This can allow for cleaner looking URLs.\n   *     - `\"<arbitrary string>\"`: The parameter's default value is replaced with an arbitrary placeholder of  your choice.\n   *\n   * <pre>params: {\n   *     param1: {\n   *       value: \"defaultId\",\n   *       squash: true\n   * } }\n   * // squash \"defaultValue\" to \"~\"\n   * params: {\n   *     param1: {\n   *       value: \"defaultValue\",\n   *       squash: \"~\"\n   * } }\n   * </pre>\n   *\n   *\n   * @example\n   * <pre>\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the\n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * </pre>\n   *\n   */\n  this.state = state;\n  function state(name, definition) {\n    /*jshint validthis: true */\n    if (isObject(name)) definition = name;\n    else definition.name = name;\n    registerState(definition);\n    return this;\n  }\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$state\n   *\n   * @requires $rootScope\n   * @requires $q\n   * @requires ui.router.state.$view\n   * @requires $injector\n   * @requires ui.router.util.$resolve\n   * @requires ui.router.state.$stateParams\n   * @requires ui.router.router.$urlRouter\n   *\n   * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n   * you'd like to test against the current active state.\n   * @property {object} current A reference to the state's config object. However \n   * you passed it in. Useful for accessing custom data.\n   * @property {object} transition Currently pending transition. A promise that'll \n   * resolve or reject.\n   *\n   * @description\n   * `$state` service is responsible for representing states as well as transitioning\n   * between them. It also provides interfaces to ask for current state or even states\n   * you're coming from.\n   */\n  this.$get = $get;\n  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];\n  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $urlRouter,   $location,   $urlMatcherFactory) {\n\n    var TransitionSuperseded = $q.reject(new Error('transition superseded'));\n    var TransitionPrevented = $q.reject(new Error('transition prevented'));\n    var TransitionAborted = $q.reject(new Error('transition aborted'));\n    var TransitionFailed = $q.reject(new Error('transition failed'));\n\n    // Handles the case where a state which is the target of a transition is not found, and the user\n    // can optionally retry or defer the transition\n    function handleRedirect(redirect, state, params, options) {\n      /**\n       * @ngdoc event\n       * @name ui.router.state.$state#$stateNotFound\n       * @eventOf ui.router.state.$state\n       * @eventType broadcast on root scope\n       * @description\n       * Fired when a requested state **cannot be found** using the provided state name during transition.\n       * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n       * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n       * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n       * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n       *\n       * @param {Object} event Event object.\n       * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n       * @param {State} fromState Current state object.\n       * @param {Object} fromParams Current state params.\n       *\n       * @example\n       *\n       * <pre>\n       * // somewhere, assume lazy.state has not been defined\n       * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n       *\n       * // somewhere else\n       * $scope.$on('$stateNotFound',\n       * function(event, unfoundState, fromState, fromParams){\n       *     console.log(unfoundState.to); // \"lazy.state\"\n       *     console.log(unfoundState.toParams); // {a:1, b:2}\n       *     console.log(unfoundState.options); // {inherit:false} + default options\n       * })\n       * </pre>\n       */\n      var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);\n\n      if (evt.defaultPrevented) {\n        $urlRouter.update();\n        return TransitionAborted;\n      }\n\n      if (!evt.retry) {\n        return null;\n      }\n\n      // Allow the handler to return a promise to defer state lookup retry\n      if (options.$retry) {\n        $urlRouter.update();\n        return TransitionFailed;\n      }\n      var retryTransition = $state.transition = $q.when(evt.retry);\n\n      retryTransition.then(function() {\n        if (retryTransition !== $state.transition) return TransitionSuperseded;\n        redirect.options.$retry = true;\n        return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n      }, function() {\n        return TransitionAborted;\n      });\n      $urlRouter.update();\n\n      return retryTransition;\n    }\n\n    root.locals = { resolve: null, globals: { $stateParams: {} } };\n\n    $state = {\n      params: {},\n      current: root.self,\n      $current: root,\n      transition: null\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#reload\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, \n     * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon).\n     *\n     * @example\n     * <pre>\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * </pre>\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.reload = function reload() {\n      return $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: true });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#go\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Convenience method for transitioning to a new state. `$state.go` calls \n     * `$state.transitionTo` internally but automatically sets options to \n     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n     * This allows you to easily use an absolute or relative to path and specify \n     * only the parameters you'd like to update (while letting unspecified parameters \n     * inherit from the currently active ancestor states).\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * </pre>\n     * <img src='../ngdoc_assets/StateGoExamples.png'/>\n     *\n     * @param {string} to Absolute state name or relative state path. Some examples:\n     *\n     * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n     * - `$state.go('^')` - will go to a parent state\n     * - `$state.go('^.sibling')` - will go to a sibling state\n     * - `$state.go('.child.grandchild')` - will go to grandchild state\n     *\n     * @param {object=} params A map of the parameters that will be sent to the state, \n     * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n     * defined parameters. This allows, for example, going to a sibling state that shares parameters\n     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n     * will get you all current parameters, etc.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition.\n     *\n     * Possible success values:\n     *\n     * - $state.current\n     *\n     * <br/>Possible rejection values:\n     *\n     * - 'transition superseded' - when a newer transition has been started after this one\n     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n     *   when a `$stateNotFound` `event.retry` promise errors.\n     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n     * - *resolve error* - when an error has occurred with a `resolve`\n     *\n     */\n    $state.go = function go(to, params, options) {\n      return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#transitionTo\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n     * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * </pre>\n     *\n     * @param {string} to State name.\n     * @param {object=} toParams A map of the parameters that will be sent to the state,\n     * will populate $stateParams.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.transitionTo = function transitionTo(to, toParams, options) {\n      toParams = toParams || {};\n      options = extend({\n        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n      }, options || {});\n\n      var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n      var evt, toState = findState(to, options.relative);\n\n      if (!isDefined(toState)) {\n        var redirect = { to: to, toParams: toParams, options: options };\n        var redirectResult = handleRedirect(redirect, from.self, fromParams, options);\n\n        if (redirectResult) {\n          return redirectResult;\n        }\n\n        // Always retry once if the $stateNotFound was not prevented\n        // (handles either redirect changed or state lazy-definition)\n        to = redirect.to;\n        toParams = redirect.toParams;\n        options = redirect.options;\n        toState = findState(to, options.relative);\n\n        if (!isDefined(toState)) {\n          if (!options.relative) throw new Error(\"No such state '\" + to + \"'\");\n          throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n        }\n      }\n      if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n      if (!toState.params.$$validates(toParams)) return TransitionFailed;\n\n      toParams = toState.params.$$values(toParams);\n      to = toState;\n\n      var toPath = to.path;\n\n      // Starting from the root of the path, keep all levels that haven't changed\n      var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];\n\n      if (!options.reload) {\n        while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {\n          locals = toLocals[keep] = state.locals;\n          keep++;\n          state = toPath[keep];\n        }\n      }\n\n      // If we're going to the same state and all locals are kept, we've got nothing to do.\n      // But clear 'transition', as we still want to cancel any other pending transitions.\n      // TODO: We may not want to bump 'transition' if we're called from a location change\n      // that we've initiated ourselves, because we might accidentally abort a legitimate\n      // transition initiated from code?\n      if (shouldTriggerReload(to, from, locals, options)) {\n        if (to.self.reloadOnSearch !== false) $urlRouter.update();\n        $state.transition = null;\n        return $q.when($state.current);\n      }\n\n      // Filter parameters before we pass them to event handlers etc.\n      toParams = filterByKeys(to.params.$$keys(), toParams || {});\n\n      // Broadcast start event and cancel the transition if requested\n      if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeStart\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when the state transition **begins**. You can use `event.preventDefault()`\n         * to prevent the transition from happening and then the transition promise will be\n         * rejected with a `'transition prevented'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         *\n         * @example\n         *\n         * <pre>\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * </pre>\n         */\n        if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) {\n          $urlRouter.update();\n          return TransitionPrevented;\n        }\n      }\n\n      // Resolve locals for the remaining states, but don't update any global state just\n      // yet -- if anything fails to resolve the current state needs to remain untouched.\n      // We also set up an inheritance chain for the locals here. This allows the view directive\n      // to quickly look up the correct definition for each view in the current state. Even\n      // though we create the locals object itself outside resolveState(), it is initially\n      // empty and gets filled asynchronously. We need to keep track of the promise for the\n      // (fully resolved) current locals, and pass this down the chain.\n      var resolved = $q.when(locals);\n\n      for (var l = keep; l < toPath.length; l++, state = toPath[l]) {\n        locals = toLocals[l] = inherit(locals);\n        resolved = resolveState(state, toParams, state === to, resolved, locals, options);\n      }\n\n      // Once everything is resolved, we are ready to perform the actual transition\n      // and return a promise for the new state. We also keep track of what the\n      // current promise is, so that we can detect overlapping transitions and\n      // keep only the outcome of the last transition.\n      var transition = $state.transition = resolved.then(function () {\n        var l, entering, exiting;\n\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Exit 'from' states not kept\n        for (l = fromPath.length - 1; l >= keep; l--) {\n          exiting = fromPath[l];\n          if (exiting.self.onExit) {\n            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n          }\n          exiting.locals = null;\n        }\n\n        // Enter 'to' states not kept\n        for (l = keep; l < toPath.length; l++) {\n          entering = toPath[l];\n          entering.locals = toLocals[l];\n          if (entering.self.onEnter) {\n            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n          }\n        }\n\n        // Run it again, to catch any transitions in callbacks\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Update globals in $state\n        $state.$current = to;\n        $state.current = to.self;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        $state.transition = null;\n\n        if (options.location && to.navigable) {\n          $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {\n            $$avoidResync: true, replace: options.location === 'replace'\n          });\n        }\n\n        if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeSuccess\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired once the state transition is **complete**.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         */\n          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n        }\n        $urlRouter.update(true);\n\n        return $state.current;\n      }, function (error) {\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        $state.transition = null;\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeError\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when an **error occurs** during transition. It's important to note that if you\n         * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n         * they will not throw traditionally. You must listen for this $stateChangeError event to\n         * catch **ALL** errors.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         * @param {Error} error The resolve error object.\n         */\n        evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n\n        if (!evt.defaultPrevented) {\n            $urlRouter.update();\n        }\n\n        return $q.reject(error);\n      });\n\n      return transition;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#is\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n     * but only checks for the full state name. If params is supplied then it will be\n     * tested for strict equality against the current active params object, so all params\n     * must match with none missing and no extras.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // absolute name\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // relative name (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.is('.item')}\">Item</div>\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like\n     * to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object} -  If `stateOrName` is a relative state name and `options.relative` is set, .is will\n     * test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it is the state.\n     */\n    $state.is = function is(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) { return undefined; }\n      if ($state.$current !== state) { return false; }\n      return params ? equalForKeys(state.params.$$values(params), $stateParams) : true;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#includes\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method to determine if the current active state is equal to or is the child of the\n     * state stateName. If any params are passed then they will be tested for a match as well.\n     * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n     *\n     * @example\n     * Partial and relative names\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // Using partial names\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     *\n     * // Using relative names (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.includes('.item')}\">Item</div>\n     * </pre>\n     *\n     * Basic globbing patterns\n     * <pre>\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * </pre>\n     *\n     * @param {string} stateOrName A partial name, relative name, or glob pattern\n     * to be searched for within the current state name.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`,\n     * that you'd like to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object=} -  If `stateOrName` is a relative state reference and `options.relative` is set,\n     * .includes will test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it does include the state\n     */\n    $state.includes = function includes(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      if (isString(stateOrName) && isGlob(stateOrName)) {\n        if (!doesStateMatchGlob(stateOrName)) {\n          return false;\n        }\n        stateOrName = $state.$current.name;\n      }\n\n      var state = findState(stateOrName, options.relative);\n      if (!isDefined(state)) { return undefined; }\n      if (!isDefined($state.$current.includes[state.name])) { return false; }\n      return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true;\n    };\n\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#href\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A url generation method that returns the compiled url for the given state populated with the given params.\n     *\n     * @example\n     * <pre>\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n     * @param {object=} params An object of parameter values to fill the state's required parameters.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the\n     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n     *    ancestor with a valid url).\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n     * \n     * @returns {string} compiled state url\n     */\n    $state.href = function href(stateOrName, params, options) {\n      options = extend({\n        lossy:    true,\n        inherit:  true,\n        absolute: false,\n        relative: $state.$current\n      }, options || {});\n\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) return null;\n      if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);\n      \n      var nav = (state && options.lossy) ? state.navigable : state;\n\n      if (!nav || nav.url === undefined || nav.url === null) {\n        return null;\n      }\n      return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys(), params || {}), {\n        absolute: options.absolute\n      });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#get\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Returns the state configuration object for any specific state or all states.\n     *\n     * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for\n     * the requested state. If not provided, returns an array of ALL state configs.\n     * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.\n     * @returns {Object|Array} State configuration object or array of all objects.\n     */\n    $state.get = function (stateOrName, context) {\n      if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });\n      var state = findState(stateOrName, context || $state.$current);\n      return (state && state.self) ? state.self : null;\n    };\n\n    function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {\n      // Make a restricted $stateParams with only the parameters that apply to this state if\n      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n      // we also need $stateParams to be available for any $injector calls we make during the\n      // dependency resolution process.\n      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);\n      var locals = { $stateParams: $stateParams };\n\n      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n      // We're also including $stateParams in this; that way the parameters are restricted\n      // to the set that should be visible to the state, and are independent of when we update\n      // the global $state and $stateParams values.\n      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n      var promises = [dst.resolve.then(function (globals) {\n        dst.globals = globals;\n      })];\n      if (inherited) promises.push(inherited);\n\n      // Resolve template and dependencies for all views.\n      forEach(state.views, function (view, name) {\n        var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n        injectables.$template = [ function () {\n          return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: options.notify }) || '';\n        }];\n\n        promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) {\n          // References to the controller (only instantiated at link time)\n          if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n            var injectLocals = angular.extend({}, injectables, locals);\n            result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n          } else {\n            result.$$controller = view.controller;\n          }\n          // Provide access to the state itself for internal use\n          result.$$state = state;\n          result.$$controllerAs = view.controllerAs;\n          dst[name] = result;\n        }));\n      });\n\n      // Wait for all the promises and then return the activation object\n      return $q.all(promises).then(function (values) {\n        return dst;\n      });\n    }\n\n    return $state;\n  }\n\n  function shouldTriggerReload(to, from, locals, options) {\n    if (to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false))) {\n      return true;\n    }\n  }\n}\n\nangular.module('ui.router.state')\n  .value('$stateParams', {})\n  .provider('$state', $StateProvider);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/stateDirectives.js",
    "content": "function parseStateRef(ref, current) {\n  var preparsed = ref.match(/^\\s*({[^}]*})\\s*$/), parsed;\n  if (preparsed) ref = current + '(' + preparsed[1] + ')';\n  parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n  if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n  return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n  var stateData = el.parent().inheritedData('$uiView');\n\n  if (stateData && stateData.state && stateData.state.name) {\n    return stateData.state;\n  }\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`<a>` tag) to a state. If the state has an associated \n * URL, the directive will automatically generate & update the `href` attribute via \n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking \n * the link will trigger a state transition with optional parameters. \n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be \n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative \n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the \n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the \n * following template:\n * <pre>\n * <a ui-sref=\"home\">Home</a> | <a ui-sref=\"about\">About</a> | <a ui-sref=\"{page: 2}\">Next page</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a ui-sref=\"contacts.detail({ id: contact.id })\">{{ contact.name }}</a>\n *     </li>\n * </ul>\n * </pre>\n * \n * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):\n * <pre>\n * <a href=\"#/home\" ui-sref=\"home\">Home</a> | <a href=\"#/about\" ui-sref=\"about\">About</a> | <a href=\"#/contacts?page=2\" ui-sref=\"{page: 2}\">Next page</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/1\" ui-sref=\"contacts.detail({ id: contact.id })\">Joe</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/2\" ui-sref=\"contacts.detail({ id: contact.id })\">Alice</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/3\" ui-sref=\"contacts.detail({ id: contact.id })\">Bob</a>\n *     </li>\n * </ul>\n *\n * <a ui-sref=\"home\" ui-sref-opts=\"{reload: true}\">Home</a>\n * </pre>\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n  var allowedOptions = ['location', 'inherit', 'reload'];\n\n  return {\n    restrict: 'A',\n    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n    link: function(scope, element, attrs, uiSrefActive) {\n      var ref = parseStateRef(attrs.uiSref, $state.current.name);\n      var params = null, url = null, base = stateContext(element) || $state.$current;\n      var newHref = null, isAnchor = element.prop(\"tagName\") === \"A\";\n      var isForm = element[0].nodeName === \"FORM\";\n      var attr = isForm ? \"action\" : \"href\", nav = true;\n\n      var options = { relative: base, inherit: true };\n      var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};\n\n      angular.forEach(allowedOptions, function(option) {\n        if (option in optionsOverride) {\n          options[option] = optionsOverride[option];\n        }\n      });\n\n      var update = function(newVal) {\n        if (newVal) params = angular.copy(newVal);\n        if (!nav) return;\n\n        newHref = $state.href(ref.state, params, options);\n\n        var activeDirective = uiSrefActive[1] || uiSrefActive[0];\n        if (activeDirective) {\n          activeDirective.$$setStateInfo(ref.state, params);\n        }\n        if (newHref === null) {\n          nav = false;\n          return false;\n        }\n        attrs.$set(attr, newHref);\n      };\n\n      if (ref.paramExpr) {\n        scope.$watch(ref.paramExpr, function(newVal, oldVal) {\n          if (newVal !== params) update(newVal);\n        }, true);\n        params = angular.copy(scope.$eval(ref.paramExpr));\n      }\n      update();\n\n      if (isForm) return;\n\n      element.bind(\"click\", function(e) {\n        var button = e.which || e.button;\n        if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {\n          // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n          var transition = $timeout(function() {\n            $state.go(ref.state, params, options);\n          });\n          e.preventDefault();\n\n          // if the state has no URL, ignore one preventDefault from the <a> directive.\n          var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;\n          e.preventDefault = function() {\n            if (ignorePreventDefaultCount-- <= 0)\n              $timeout.cancel(transition);\n          };\n        }\n      });\n    }\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the\n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus\n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * ui-sref-active can live on the same element as ui-sref or on a parent element. The first\n * ui-sref-active found at the same level or above the ui-sref will be used.\n *\n * Will activate when the ui-sref's target state or any child state is active. If you\n * need to activate only when the ui-sref target state is active and *not* any of\n * it's children, then you will use\n * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}\n *\n * @example\n * Given the following template:\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item\">\n *     <a href ui-sref=\"app.user({user: 'bilbobaggins'})\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n *\n * When the app state is \"app.user\" (or any children states), and contains the state parameter \"user\" with value \"bilbobaggins\",\n * the resulting HTML will appear as (note the 'active' class):\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item active\">\n *     <a ui-sref=\"app.user({user: 'bilbobaggins'})\" href=\"/users/bilbobaggins\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n * The class name is interpolated **once** during the directives link time (any further changes to the\n * interpolated value are ignored).\n *\n * Multiple classes may be specified in a space-separated format:\n * <pre>\n * <ul>\n *   <li ui-sref-active='class1 class2 class3'>\n *     <a ui-sref=\"app.user\">link</a>\n *   </li>\n * </ul>\n * </pre>\n */\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active-eq\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate\n * when the exact target state used in the `ui-sref` is active; no child states.\n *\n */\n$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateRefActiveDirective($state, $stateParams, $interpolate) {\n  return  {\n    restrict: \"A\",\n    controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {\n      var state, params, activeClass;\n\n      // There probably isn't much point in $observing this\n      // uiSrefActive and uiSrefActiveEq share the same directive object with some\n      // slight difference in logic routing\n      activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope);\n\n      // Allow uiSref to communicate with uiSrefActive[Equals]\n      this.$$setStateInfo = function (newState, newParams) {\n        state = $state.get(newState, stateContext($element));\n        params = newParams;\n        update();\n      };\n\n      $scope.$on('$stateChangeSuccess', update);\n\n      // Update route state\n      function update() {\n        if (isMatch()) {\n          $element.addClass(activeClass);\n        } else {\n          $element.removeClass(activeClass);\n        }\n      }\n\n      function isMatch() {\n        if (typeof $attrs.uiSrefActiveEq !== 'undefined') {\n          return state && $state.is(state.name, params);\n        } else {\n          return state && $state.includes(state.name, params);\n        }\n      }\n    }]\n  };\n}\n\nangular.module('ui.router.state')\n  .directive('uiSref', $StateRefDirective)\n  .directive('uiSrefActive', $StateRefActiveDirective)\n  .directive('uiSrefActiveEq', $StateRefActiveDirective);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/stateFilters.js",
    "content": "/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n  var isFilter = function (state) {\n    return $state.is(state);\n  };\n  isFilter.$stateful = true;\n  return isFilter;\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n  var includesFilter = function (state) {\n    return $state.includes(state);\n  };\n  includesFilter.$stateful = true;\n  return  includesFilter;\n}\n\nangular.module('ui.router.state')\n  .filter('isState', $IsStateFilter)\n  .filter('includedByState', $IncludedByStateFilter);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/templateFactory.js",
    "content": "/**\n * @ngdoc object\n * @name ui.router.util.$templateFactory\n *\n * @requires $http\n * @requires $templateCache\n * @requires $injector\n *\n * @description\n * Service. Manages loading of templates.\n */\n$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];\nfunction $TemplateFactory(  $http,   $templateCache,   $injector) {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromConfig\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a configuration object. \n   *\n   * @param {object} config Configuration object for which to load a template. \n   * The following properties are search in the specified order, and the first one \n   * that is defined is used to create the template:\n   *\n   * @param {string|object} config.template html string template or function to \n   * load via {@link ui.router.util.$templateFactory#fromString fromString}.\n   * @param {string|object} config.templateUrl url to load or a function returning \n   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.\n   * @param {Function} config.templateProvider function to invoke via \n   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.\n   * @param {object} params  Parameters to pass to the template function.\n   * @param {object} locals Locals to pass to `invoke` if the template is loaded \n   * via a `templateProvider`. Defaults to `{ params: params }`.\n   *\n   * @return {string|object}  The template html as a string, or a promise for \n   * that string,or `null` if no template is configured.\n   */\n  this.fromConfig = function (config, params, locals) {\n    return (\n      isDefined(config.template) ? this.fromString(config.template, params) :\n      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :\n      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :\n      null\n    );\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromString\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a string or a function returning a string.\n   *\n   * @param {string|object} template html template as a string or function that \n   * returns an html template as a string.\n   * @param {object} params Parameters to pass to the template function.\n   *\n   * @return {string|object} The template html as a string, or a promise for that \n   * string.\n   */\n  this.fromString = function (template, params) {\n    return isFunction(template) ? template(params) : template;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   * \n   * @description\n   * Loads a template from the a URL via `$http` and `$templateCache`.\n   *\n   * @param {string|Function} url url of the template to load, or a function \n   * that returns a url.\n   * @param {Object} params Parameters to pass to the url function.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromUrl = function (url, params) {\n    if (isFunction(url)) url = url(params);\n    if (url == null) return null;\n    else return $http\n        .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})\n        .then(function(response) { return response.data; });\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromProvider\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template by invoking an injectable provider function.\n   *\n   * @param {Function} provider Function to invoke via `$injector.invoke`\n   * @param {Object} params Parameters for the template.\n   * @param {Object} locals Locals to pass to `invoke`. Defaults to \n   * `{ params: params }`.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromProvider = function (provider, params, locals) {\n    return $injector.invoke(provider, null, locals || { params: params });\n  };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/urlMatcherFactory.js",
    "content": "var $$UMFP; // reference to $UrlMatcherFactoryProvider\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n * \n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the\n *   regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon \n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n * \n * Examples:\n * \n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n *   trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n *   parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n *   path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n *   in the built-in  `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n * @param {string} pattern  The pattern to compile into a matcher.\n * @param {Object} config  A configuration object hash:\n * @param {Object=} parentMatcher Used to concatenate the pattern/config onto\n *   an existing UrlMatcher\n *\n * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.\n * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.\n *\n * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any\n *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n *   non-null) will start with this prefix.\n *\n * @property {string} source  The pattern that was passed into the constructor\n *\n * @property {string} sourcePath  The path portion of the source property\n *\n * @property {string} sourceSearch  The search portion of the source property\n *\n * @property {string} regex  The constructed regex that will be used to match against the url when \n *   it is time to determine which url will match.\n *\n * @returns {Object}  New `UrlMatcher` object\n */\nfunction UrlMatcher(pattern, config, parentMatcher) {\n  config = extend({ params: {} }, isObject(config) ? config : {});\n\n  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n  //   '*' name\n  //   ':' name\n  //   '{' name '}'\n  //   '{' name ':' regexp '}'\n  // The regular expression is somewhat complicated due to the need to allow curly braces\n  // inside the regular expression. The placeholder regexp breaks down as follows:\n  //    ([:*])([\\w\\[\\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)\n  //    \\{([\\w\\[\\]]+)(?:\\:( ... ))?\\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case\n  //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either\n  //    [^{}\\\\]+                       - anything other than curly braces or backslash\n  //    \\\\.                            - a backslash escape\n  //    \\{(?:[^{}\\\\]+|\\\\.)*\\}          - a matched set of curly braces containing other atoms\n  var placeholder       = /([:*])([\\w\\[\\]]+)|\\{([\\w\\[\\]]+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      searchPlaceholder = /([:]?)([\\w\\[\\]-]+)|\\{([\\w\\[\\]-]+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      compiled = '^', last = 0, m,\n      segments = this.segments = [],\n      parentParams = parentMatcher ? parentMatcher.params : {},\n      params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),\n      paramNames = [];\n\n  function addParameter(id, type, config, location) {\n    paramNames.push(id);\n    if (parentParams[id]) return parentParams[id];\n    if (!/^\\w+(-+\\w+)*(?:\\[\\])?$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    if (params[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    params[id] = new $$UMFP.Param(id, type, config, location);\n    return params[id];\n  }\n\n  function quoteRegExp(string, pattern, squash) {\n    var surroundPattern = ['',''], result = string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n    if (!pattern) return result;\n    switch(squash) {\n      case false: surroundPattern = ['(', ')'];   break;\n      case true:  surroundPattern = ['?(', ')?']; break;\n      default:    surroundPattern = ['(' + squash + \"|\", ')?'];  break;\n    }\n    return result + surroundPattern[0] + pattern + surroundPattern[1];\n  }\n\n  this.source = pattern;\n\n  // Split into static segments separated by path parameter placeholders.\n  // The number of segments is always 1 more than the number of parameters.\n  function matchDetails(m, isSearch) {\n    var id, regexp, segment, type, cfg, arrayMode;\n    id          = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n    cfg         = config.params[id];\n    segment     = pattern.substring(last, m.index);\n    regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);\n    type        = $$UMFP.type(regexp || \"string\") || inherit($$UMFP.type(\"string\"), { pattern: new RegExp(regexp) });\n    return {\n      id: id, regexp: regexp, segment: segment, type: type, cfg: cfg\n    };\n  }\n\n  var p, param, segment;\n  while ((m = placeholder.exec(pattern))) {\n    p = matchDetails(m, false);\n    if (p.segment.indexOf('?') >= 0) break; // we're into the search part\n\n    param = addParameter(p.id, p.type, p.cfg, \"path\");\n    compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash);\n    segments.push(p.segment);\n    last = placeholder.lastIndex;\n  }\n  segment = pattern.substring(last);\n\n  // Find any search parameter names and remove them from the last segment\n  var i = segment.indexOf('?');\n\n  if (i >= 0) {\n    var search = this.sourceSearch = segment.substring(i);\n    segment = segment.substring(0, i);\n    this.sourcePath = pattern.substring(0, last + i);\n\n    if (search.length > 0) {\n      last = 0;\n      while ((m = searchPlaceholder.exec(search))) {\n        p = matchDetails(m, true);\n        param = addParameter(p.id, p.type, p.cfg, \"search\");\n        last = placeholder.lastIndex;\n        // check if ?&\n      }\n    }\n  } else {\n    this.sourcePath = pattern;\n    this.sourceSearch = '';\n  }\n\n  compiled += quoteRegExp(segment) + (config.strict === false ? '\\/?' : '') + '$';\n  segments.push(segment);\n\n  this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);\n  this.prefix = segments[0];\n  this.$$paramNames = paramNames;\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n * <pre>\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * </pre>\n *\n * @param {string} pattern  The pattern to append.\n * @param {Object} config  An object hash of the configuration for the matcher.\n * @returns {UrlMatcher}  A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern, config) {\n  // Because order of search parameters is irrelevant, we can add our own search\n  // parameters to the end of the new pattern. Parse the new pattern by itself\n  // and then join the bits together, but it's much easier to do this on a string level.\n  var defaultConfig = {\n    caseInsensitive: $$UMFP.caseInsensitive(),\n    strict: $$UMFP.strictMode(),\n    squash: $$UMFP.defaultSquashPolicy()\n  };\n  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);\n};\n\nUrlMatcher.prototype.toString = function () {\n  return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {\n *   x: '1', q: 'hello'\n * });\n * // returns { id: 'bob', q: 'hello', r: null }\n * </pre>\n *\n * @param {string} path  The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.\n * @returns {Object}  The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n  var m = this.regexp.exec(path);\n  if (!m) return null;\n  searchParams = searchParams || {};\n\n  var paramNames = this.parameters(), nTotal = paramNames.length,\n    nPath = this.segments.length - 1,\n    values = {}, i, j, cfg, paramName;\n\n  if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n  function decodePathArray(string) {\n    function reverseString(str) { return str.split(\"\").reverse().join(\"\"); }\n    function unquoteDashes(str) { return str.replace(/\\\\-/, \"-\"); }\n\n    var split = reverseString(string).split(/-(?!\\\\)/);\n    var allReversed = map(split, reverseString);\n    return map(allReversed, unquoteDashes).reverse();\n  }\n\n  for (i = 0; i < nPath; i++) {\n    paramName = paramNames[i];\n    var param = this.params[paramName];\n    var paramVal = m[i+1];\n    // if the param value matches a pre-replace pair, replace the value before decoding.\n    for (j = 0; j < param.replace; j++) {\n      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n    }\n    if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);\n    values[paramName] = param.value(paramVal);\n  }\n  for (/**/; i < nTotal; i++) {\n    paramName = paramNames[i];\n    values[paramName] = this.params[paramName].value(searchParams[paramName]);\n  }\n\n  return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n * \n * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the\n *    pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function (param) {\n  if (!isDefined(param)) return this.$$paramNames;\n  return this.params[param] || null;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#validate\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Checks an object hash of parameters to validate their correctness according to the parameter\n * types of this `UrlMatcher`.\n *\n * @param {Object} params The object hash of parameters to validate.\n * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.\n */\nUrlMatcher.prototype.validates = function (params) {\n  return this.params.$$validates(params);\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * </pre>\n *\n * @param {Object} values  the values to substitute for the parameters in this pattern.\n * @returns {string}  the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n  values = values || {};\n  var segments = this.segments, params = this.parameters(), paramset = this.params;\n  if (!this.validates(values)) return null;\n\n  var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];\n\n  function encodeDashes(str) { // Replace dashes with encoded \"\\-\"\n    return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });\n  }\n\n  for (i = 0; i < nTotal; i++) {\n    var isPathParam = i < nPath;\n    var name = params[i], param = paramset[name], value = param.value(values[name]);\n    var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);\n    var squash = isDefaultValue ? param.squash : false;\n    var encoded = param.type.encode(value);\n\n    if (isPathParam) {\n      var nextSegment = segments[i + 1];\n      if (squash === false) {\n        if (encoded != null) {\n          if (isArray(encoded)) {\n            result += map(encoded, encodeDashes).join(\"-\");\n          } else {\n            result += encodeURIComponent(encoded);\n          }\n        }\n        result += nextSegment;\n      } else if (squash === true) {\n        var capture = result.match(/\\/$/) ? /\\/?(.*)/ : /(.*)/;\n        result += nextSegment.match(capture)[1];\n      } else if (isString(squash)) {\n        result += squash + nextSegment;\n      }\n    } else {\n      if (encoded == null || (isDefaultValue && squash !== false)) continue;\n      if (!isArray(encoded)) encoded = [ encoded ];\n      encoded = map(encoded, encodeURIComponent).join('&' + name + '=');\n      result += (search ? '&' : '?') + (name + '=' + encoded);\n      search = true;\n    }\n  }\n\n  return result;\n};\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:Type\n *\n * @description\n * Implements an interface to define custom parameter types that can be decoded from and encoded to\n * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}\n * objects when matching or formatting URLs, or comparing or validating parameter values.\n *\n * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more\n * information on registering custom types.\n *\n * @param {Object} config  A configuration object which contains the custom type definition.  The object's\n *        properties will override the default methods and/or pattern in `Type`'s public interface.\n * @example\n * <pre>\n * {\n *   decode: function(val) { return parseInt(val, 10); },\n *   encode: function(val) { return val && val.toString(); },\n *   equals: function(a, b) { return this.is(a) && a === b; },\n *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },\n *   pattern: /\\d+/\n * }\n * </pre>\n *\n * @property {RegExp} pattern The regular expression pattern used to match values of this type when\n *           coming from a substring of a URL.\n *\n * @returns {Object}  Returns a new `Type` object.\n */\nfunction Type(config) {\n  extend(this, config);\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#is\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Detects whether a value is of a particular type. Accepts a native (decoded) value\n * and determines whether it matches the current `Type` object.\n *\n * @param {*} val  The value to check.\n * @param {string} key  Optional. If the type check is happening in the context of a specific\n *        {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the\n *        parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.\n * @returns {Boolean}  Returns `true` if the value matches the type, otherwise `false`.\n */\nType.prototype.is = function(val, key) {\n  return true;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#encode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the\n * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it\n * only needs to be a representation of `val` that has been coerced to a string.\n *\n * @param {*} val  The value to encode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {string}  Returns a string representation of `val` that can be encoded in a URL.\n */\nType.prototype.encode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#decode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Converts a parameter value (from URL string or transition param) to a custom/native value.\n *\n * @param {string} val  The URL parameter value to decode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {*}  Returns a custom representation of the URL parameter value.\n */\nType.prototype.decode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#equals\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Determines whether two decoded values are equivalent.\n *\n * @param {*} a  A value to compare against.\n * @param {*} b  A value to compare against.\n * @returns {Boolean}  Returns `true` if the values are equivalent/equal, otherwise `false`.\n */\nType.prototype.equals = function(a, b) {\n  return a == b;\n};\n\nType.prototype.$subPattern = function() {\n  var sub = this.pattern.toString();\n  return sub.substr(1, sub.length - 2);\n};\n\nType.prototype.pattern = /.*/;\n\nType.prototype.toString = function() { return \"{Type:\" + this.name + \"}\"; };\n\n/*\n * Wraps an existing custom Type as an array of Type, depending on 'mode'.\n * e.g.:\n * - urlmatcher pattern \"/path?{queryParam[]:int}\"\n * - url: \"/path?queryParam=1&queryParam=2\n * - $stateParams.queryParam will be [1, 2]\n * if `mode` is \"auto\", then\n * - url: \"/path?queryParam=1 will create $stateParams.queryParam: 1\n * - url: \"/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]\n */\nType.prototype.$asArray = function(mode, isSearch) {\n  if (!mode) return this;\n  if (mode === \"auto\" && !isSearch) throw new Error(\"'auto' array mode is for query parameters only\");\n  return new ArrayType(this, mode);\n\n  function ArrayType(type, mode) {\n    function bindTo(type, callbackName) {\n      return function() {\n        return type[callbackName].apply(type, arguments);\n      };\n    }\n\n    // Wrap non-array value as array\n    function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }\n    // Unwrap array value for \"auto\" mode. Return undefined for empty array.\n    function arrayUnwrap(val) {\n      switch(val.length) {\n        case 0: return undefined;\n        case 1: return mode === \"auto\" ? val[0] : val;\n        default: return val;\n      }\n    }\n    function falsey(val) { return !val; }\n\n    // Wraps type (.is/.encode/.decode) functions to operate on each value of an array\n    function arrayHandler(callback, allTruthyMode) {\n      return function handleArray(val) {\n        val = arrayWrap(val);\n        var result = map(val, callback);\n        if (allTruthyMode === true)\n          return filter(result, falsey).length === 0;\n        return arrayUnwrap(result);\n      };\n    }\n\n    // Wraps type (.equals) functions to operate on each value of an array\n    function arrayEqualsHandler(callback) {\n      return function handleArray(val1, val2) {\n        var left = arrayWrap(val1), right = arrayWrap(val2);\n        if (left.length !== right.length) return false;\n        for (var i = 0; i < left.length; i++) {\n          if (!callback(left[i], right[i])) return false;\n        }\n        return true;\n      };\n    }\n\n    this.encode = arrayHandler(bindTo(type, 'encode'));\n    this.decode = arrayHandler(bindTo(type, 'decode'));\n    this.is     = arrayHandler(bindTo(type, 'is'), true);\n    this.equals = arrayEqualsHandler(bindTo(type, 'equals'));\n    this.pattern = type.pattern;\n    this.$arrayMode = mode;\n  }\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory\n * is also available to providers under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n  $$UMFP = this;\n\n  var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;\n\n  function valToString(val) { return val != null ? val.toString().replace(/\\//g, \"%2F\") : val; }\n  function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, \"/\") : val; }\n//  TODO: in 1.0, make string .is() return false if value is undefined by default.\n//  function regexpMatches(val) { /*jshint validthis:true */ return isDefined(val) && this.pattern.test(val); }\n  function regexpMatches(val) { /*jshint validthis:true */ return this.pattern.test(val); }\n\n  var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {\n    string: {\n      encode: valToString,\n      decode: valFromString,\n      is: regexpMatches,\n      pattern: /[^/]*/\n    },\n    int: {\n      encode: valToString,\n      decode: function(val) { return parseInt(val, 10); },\n      is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },\n      pattern: /\\d+/\n    },\n    bool: {\n      encode: function(val) { return val ? 1 : 0; },\n      decode: function(val) { return parseInt(val, 10) !== 0; },\n      is: function(val) { return val === true || val === false; },\n      pattern: /0|1/\n    },\n    date: {\n      encode: function (val) {\n        if (!this.is(val))\n          return undefined;\n        return [ val.getFullYear(),\n          ('0' + (val.getMonth() + 1)).slice(-2),\n          ('0' + val.getDate()).slice(-2)\n        ].join(\"-\");\n      },\n      decode: function (val) {\n        if (this.is(val)) return val;\n        var match = this.capture.exec(val);\n        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;\n      },\n      is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },\n      equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },\n      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,\n      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/\n    },\n    json: {\n      encode: angular.toJson,\n      decode: angular.fromJson,\n      is: angular.isObject,\n      equals: angular.equals,\n      pattern: /[^/]*/\n    },\n    any: { // does not encode/decode\n      encode: angular.identity,\n      decode: angular.identity,\n      is: angular.identity,\n      equals: angular.equals,\n      pattern: /.*/\n    }\n  };\n\n  function getDefaultConfig() {\n    return {\n      strict: isStrictMode,\n      caseInsensitive: isCaseInsensitive\n    };\n  }\n\n  function isInjectable(value) {\n    return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));\n  }\n\n  /**\n   * [Internal] Get the default value of a parameter, which may be an injectable function.\n   */\n  $UrlMatcherFactory.$$getDefaultValue = function(config) {\n    if (!isInjectable(config.value)) return config.value;\n    if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n    return injector.invoke(config.value);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#caseInsensitive\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URL matching should be case sensitive (the default behavior), or not.\n   *\n   * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;\n   * @returns {boolean} the current value of caseInsensitive\n   */\n  this.caseInsensitive = function(value) {\n    if (isDefined(value))\n      isCaseInsensitive = value;\n    return isCaseInsensitive;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#strictMode\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URLs should match trailing slashes, or not (the default behavior).\n   *\n   * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.\n   * @returns {boolean} the current value of strictMode\n   */\n  this.strictMode = function(value) {\n    if (isDefined(value))\n      isStrictMode = value;\n    return isStrictMode;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Sets the default behavior when generating or matching URLs with default parameter values.\n   *\n   * @param {string} value A string that defines the default parameter URL squashing behavior.\n   *    `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL\n   *    `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the\n   *             parameter is surrounded by slashes, squash (remove) one slash from the URL\n   *    any other string, e.g. \"~\": When generating an href with a default parameter value, squash (remove)\n   *             the parameter value from the URL and replace it with this string.\n   */\n  this.defaultSquashPolicy = function(value) {\n    if (!isDefined(value)) return defaultSquashPolicy;\n    if (value !== true && value !== false && !isString(value))\n      throw new Error(\"Invalid squash policy: \" + value + \". Valid policies: false, true, arbitrary-string\");\n    defaultSquashPolicy = value;\n    return value;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#compile\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.\n   *\n   * @param {string} pattern  The URL pattern.\n   * @param {Object} config  The config object hash.\n   * @returns {UrlMatcher}  The UrlMatcher.\n   */\n  this.compile = function (pattern, config) {\n    return new UrlMatcher(pattern, extend(getDefaultConfig(), config));\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#isMatcher\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Returns true if the specified object is a `UrlMatcher`, or false otherwise.\n   *\n   * @param {Object} object  The object to perform the type check against.\n   * @returns {Boolean}  Returns `true` if the object matches the `UrlMatcher` interface, by\n   *          implementing all the same methods.\n   */\n  this.isMatcher = function (o) {\n    if (!isObject(o)) return false;\n    var result = true;\n\n    forEach(UrlMatcher.prototype, function(val, name) {\n      if (isFunction(val)) {\n        result = result && (isDefined(o[name]) && isFunction(o[name]));\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#type\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to\n   * generate URLs with typed parameters.\n   *\n   * @param {string} name  The type name.\n   * @param {Object|Function} definition   The type definition. See\n   *        {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   * @param {Object|Function} definitionFn (optional) A function that is injected before the app\n   *        runtime starts.  The result of this function is merged into the existing `definition`.\n   *        See {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   *\n   * @returns {Object}  Returns `$urlMatcherFactoryProvider`.\n   *\n   * @example\n   * This is a simple example of a custom type that encodes and decodes items from an\n   * array, using the array index as the URL-encoded value:\n   *\n   * <pre>\n   * var list = ['John', 'Paul', 'George', 'Ringo'];\n   *\n   * $urlMatcherFactoryProvider.type('listItem', {\n   *   encode: function(item) {\n   *     // Represent the list item in the URL using its corresponding index\n   *     return list.indexOf(item);\n   *   },\n   *   decode: function(item) {\n   *     // Look up the list item by index\n   *     return list[parseInt(item, 10)];\n   *   },\n   *   is: function(item) {\n   *     // Ensure the item is valid by checking to see that it appears\n   *     // in the list\n   *     return list.indexOf(item) > -1;\n   *   }\n   * });\n   *\n   * $stateProvider.state('list', {\n   *   url: \"/list/{item:listItem}\",\n   *   controller: function($scope, $stateParams) {\n   *     console.log($stateParams.item);\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * // Changes URL to '/list/3', logs \"Ringo\" to the console\n   * $state.go('list', { item: \"Ringo\" });\n   * </pre>\n   *\n   * This is a more complex example of a type that relies on dependency injection to\n   * interact with services, and uses the parameter name from the URL to infer how to\n   * handle encoding and decoding parameter values:\n   *\n   * <pre>\n   * // Defines a custom type that gets a value from a service,\n   * // where each service gets different types of values from\n   * // a backend API:\n   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {\n   *\n   *   // Matches up services to URL parameter names\n   *   var services = {\n   *     user: Users,\n   *     post: Posts\n   *   };\n   *\n   *   return {\n   *     encode: function(object) {\n   *       // Represent the object in the URL using its unique ID\n   *       return object.id;\n   *     },\n   *     decode: function(value, key) {\n   *       // Look up the object by ID, using the parameter\n   *       // name (key) to call the correct service\n   *       return services[key].findById(value);\n   *     },\n   *     is: function(object, key) {\n   *       // Check that object is a valid dbObject\n   *       return angular.isObject(object) && object.id && services[key];\n   *     }\n   *     equals: function(a, b) {\n   *       // Check the equality of decoded objects by comparing\n   *       // their unique IDs\n   *       return a.id === b.id;\n   *     }\n   *   };\n   * });\n   *\n   * // In a config() block, you can then attach URLs with\n   * // type-annotated parameters:\n   * $stateProvider.state('users', {\n   *   url: \"/users\",\n   *   // ...\n   * }).state('users.item', {\n   *   url: \"/{user:dbObject}\",\n   *   controller: function($scope, $stateParams) {\n   *     // $stateParams.user will now be an object returned from\n   *     // the Users service\n   *   },\n   *   // ...\n   * });\n   * </pre>\n   */\n  this.type = function (name, definition, definitionFn) {\n    if (!isDefined(definition)) return $types[name];\n    if ($types.hasOwnProperty(name)) throw new Error(\"A type named '\" + name + \"' has already been defined.\");\n\n    $types[name] = new Type(extend({ name: name }, definition));\n    if (definitionFn) {\n      typeQueue.push({ name: name, def: definitionFn });\n      if (!enqueue) flushTypeQueue();\n    }\n    return this;\n  };\n\n  // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s\n  function flushTypeQueue() {\n    while(typeQueue.length) {\n      var type = typeQueue.shift();\n      if (type.pattern) throw new Error(\"You cannot override a type's .pattern at runtime.\");\n      angular.extend($types[type.name], injector.invoke(type.def));\n    }\n  }\n\n  // Register default types. Store them in the prototype of $types.\n  forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });\n  $types = inherit($types, {});\n\n  /* No need to document $get, since it returns this */\n  this.$get = ['$injector', function ($injector) {\n    injector = $injector;\n    enqueue = false;\n    flushTypeQueue();\n\n    forEach(defaultTypes, function(type, name) {\n      if (!$types[name]) $types[name] = new Type(type);\n    });\n    return this;\n  }];\n\n  this.Param = function Param(id, type, config, location) {\n    var self = this;\n    config = unwrapShorthand(config);\n    type = getType(config, type, location);\n    var arrayMode = getArrayMode();\n    type = arrayMode ? type.$asArray(arrayMode, location === \"search\") : type;\n    if (type.name === \"string\" && !arrayMode && location === \"path\" && config.value === undefined)\n      config.value = \"\"; // for 0.2.x; in 0.3.0+ do not automatically default to \"\"\n    var isOptional = config.value !== undefined;\n    var squash = getSquashPolicy(config, isOptional);\n    var replace = getReplace(config, arrayMode, isOptional, squash);\n\n    function unwrapShorthand(config) {\n      var keys = isObject(config) ? objectKeys(config) : [];\n      var isShorthand = indexOf(keys, \"value\") === -1 && indexOf(keys, \"type\") === -1 &&\n                        indexOf(keys, \"squash\") === -1 && indexOf(keys, \"array\") === -1;\n      if (isShorthand) config = { value: config };\n      config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };\n      return config;\n    }\n\n    function getType(config, urlType, location) {\n      if (config.type && urlType) throw new Error(\"Param '\"+id+\"' has two type configurations.\");\n      if (urlType) return urlType;\n      if (!config.type) return (location === \"config\" ? $types.any : $types.string);\n      return config.type instanceof Type ? config.type : new Type(config.type);\n    }\n\n    // array config: param name (param[]) overrides default settings.  explicit config overrides param name.\n    function getArrayMode() {\n      var arrayDefaults = { array: (location === \"search\" ? \"auto\" : false) };\n      var arrayParamNomenclature = id.match(/\\[\\]$/) ? { array: true } : {};\n      return extend(arrayDefaults, arrayParamNomenclature, config).array;\n    }\n\n    /**\n     * returns false, true, or the squash value to indicate the \"default parameter url squash policy\".\n     */\n    function getSquashPolicy(config, isOptional) {\n      var squash = config.squash;\n      if (!isOptional || squash === false) return false;\n      if (!isDefined(squash) || squash == null) return defaultSquashPolicy;\n      if (squash === true || isString(squash)) return squash;\n      throw new Error(\"Invalid squash policy: '\" + squash + \"'. Valid policies: false, true, or arbitrary string\");\n    }\n\n    function getReplace(config, arrayMode, isOptional, squash) {\n      var replace, configuredKeys, defaultPolicy = [\n        { from: \"\",   to: (isOptional || arrayMode ? undefined : \"\") },\n        { from: null, to: (isOptional || arrayMode ? undefined : \"\") }\n      ];\n      replace = isArray(config.replace) ? config.replace : [];\n      if (isString(squash))\n        replace.push({ from: squash, to: undefined });\n      configuredKeys = map(replace, function(item) { return item.from; } );\n      return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);\n    }\n\n    /**\n     * [Internal] Get the default value of a parameter, which may be an injectable function.\n     */\n    function $$getDefaultValue() {\n      if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n      return injector.invoke(config.$$fn);\n    }\n\n    /**\n     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the\n     * default value, which may be the result of an injectable function.\n     */\n    function $value(value) {\n      function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }\n      function $replace(value) {\n        var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });\n        return replacement.length ? replacement[0] : value;\n      }\n      value = $replace(value);\n      return isDefined(value) ? self.type.decode(value) : $$getDefaultValue();\n    }\n\n    function toString() { return \"{Param:\" + id + \" \" + type + \" squash: '\" + squash + \"' optional: \" + isOptional + \"}\"; }\n\n    extend(this, {\n      id: id,\n      type: type,\n      location: location,\n      array: arrayMode,\n      squash: squash,\n      replace: replace,\n      isOptional: isOptional,\n      value: $value,\n      dynamic: undefined,\n      config: config,\n      toString: toString\n    });\n  };\n\n  function ParamSet(params) {\n    extend(this, params || {});\n  }\n\n  ParamSet.prototype = {\n    $$new: function() {\n      return inherit(this, extend(new ParamSet(), { $$parent: this}));\n    },\n    $$keys: function () {\n      var keys = [], chain = [], parent = this,\n        ignore = objectKeys(ParamSet.prototype);\n      while (parent) { chain.push(parent); parent = parent.$$parent; }\n      chain.reverse();\n      forEach(chain, function(paramset) {\n        forEach(objectKeys(paramset), function(key) {\n            if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);\n        });\n      });\n      return keys;\n    },\n    $$values: function(paramValues) {\n      var values = {}, self = this;\n      forEach(self.$$keys(), function(key) {\n        values[key] = self[key].value(paramValues && paramValues[key]);\n      });\n      return values;\n    },\n    $$equals: function(paramValues1, paramValues2) {\n      var equal = true, self = this;\n      forEach(self.$$keys(), function(key) {\n        var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];\n        if (!self[key].type.equals(left, right)) equal = false;\n      });\n      return equal;\n    },\n    $$validates: function $$validate(paramValues) {\n      var result = true, isOptional, val, param, self = this;\n\n      forEach(this.$$keys(), function(key) {\n        param = self[key];\n        val = paramValues[key];\n        isOptional = !val && param.isOptional;\n        result = result && (isOptional || !!param.type.is(val));\n      });\n      return result;\n    },\n    $$parent: undefined\n  };\n\n  this.ParamSet = ParamSet;\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\nangular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/urlRouter.js",
    "content": "/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider(   $locationProvider,   $urlMatcherFactory) {\n  var rules = [], otherwise = null, interceptDeferred = false, listener;\n\n  // Returns a string that is a prefix of all strings matching the RegExp\n  function regExpPrefix(re) {\n    var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n    return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n  }\n\n  // Interpolates matched values into a String.replace()-style pattern\n  function interpolate(pattern, match) {\n    return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n      return match[what === '$' ? 0 : Number(what)];\n    });\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#rule\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines rules that are used by `$urlRouterProvider` to find matches for\n   * specific URLs.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {object} rule Handler function that takes `$injector` and `$location`\n   * services as arguments. You can use them to return a valid path as a string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.rule = function (rule) {\n    if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    rules.push(rule);\n    return this;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouterProvider#otherwise\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines a path that is used when an invalid route is requested.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     return '/a/valid/url';\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} rule The url path you want to redirect to or a function \n   * rule that returns the url path. The function version is passed two params: \n   * `$injector` and `$location` services, and must return a url string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.otherwise = function (rule) {\n    if (isString(rule)) {\n      var redirect = rule;\n      rule = function () { return redirect; };\n    }\n    else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    otherwise = rule;\n    return this;\n  };\n\n\n  function handleIfMatch($injector, handler, match) {\n    if (!match) return false;\n    var result = $injector.invoke(handler, handler, { $match: match });\n    return isDefined(result) ? result : true;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#when\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Registers a handler for a given url matching. if handle is a string, it is\n   * treated as a redirect, and is interpolated according to the syntax of match\n   * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).\n   *\n   * If the handler is a function, it is injectable. It gets invoked if `$location`\n   * matches. You have the option of inject the match object as `$match`.\n   *\n   * The handler can return\n   *\n   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n   *   will continue trying to find another one that matches.\n   * - **string** which is treated as a redirect and passed to `$location.url()`\n   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} what The incoming path that you want to redirect.\n   * @param {string|object} handler The path you want to redirect your user to.\n   */\n  this.when = function (what, handler) {\n    var redirect, handlerIsString = isString(handler);\n    if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n    if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n      throw new Error(\"invalid 'handler' in when()\");\n\n    var strategies = {\n      matcher: function (what, handler) {\n        if (handlerIsString) {\n          redirect = $urlMatcherFactory.compile(handler);\n          handler = ['$match', function ($match) { return redirect.format($match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n        }, {\n          prefix: isString(what.prefix) ? what.prefix : ''\n        });\n      },\n      regex: function (what, handler) {\n        if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n        if (handlerIsString) {\n          redirect = handler;\n          handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path()));\n        }, {\n          prefix: regExpPrefix(what)\n        });\n      }\n    };\n\n    var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n    for (var n in check) {\n      if (check[n]) return this.rule(strategies[n](what, handler));\n    }\n\n    throw new Error(\"invalid 'what' in when()\");\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#deferIntercept\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Disables (or enables) deferring location change interception.\n   *\n   * If you wish to customize the behavior of syncing the URL (for example, if you wish to\n   * defer a transition but maintain the current URL), call this method at configuration time.\n   * Then, at run time, call `$urlRouter.listen()` after you have configured your own\n   * `$locationChangeSuccess` event handler.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *\n   *   // Prevent $urlRouter from automatically intercepting URL changes;\n   *   // this allows you to configure custom behavior in between\n   *   // location changes and route synchronization:\n   *   $urlRouterProvider.deferIntercept();\n   *\n   * }).run(function ($rootScope, $urlRouter, UserService) {\n   *\n   *   $rootScope.$on('$locationChangeSuccess', function(e) {\n   *     // UserService is an example service for managing user state\n   *     if (UserService.isLoggedIn()) return;\n   *\n   *     // Prevent $urlRouter's default handler from firing\n   *     e.preventDefault();\n   *\n   *     UserService.handleLogin().then(function() {\n   *       // Once the user has logged in, sync the current URL\n   *       // to the router:\n   *       $urlRouter.sync();\n   *     });\n   *   });\n   *\n   *   // Configures $urlRouter's listener *after* your custom listener\n   *   $urlRouter.listen();\n   * });\n   * </pre>\n   *\n   * @param {boolean} defer Indicates whether to defer location change interception. Passing\n            no parameter is equivalent to `true`.\n   */\n  this.deferIntercept = function (defer) {\n    if (defer === undefined) defer = true;\n    interceptDeferred = defer;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouter\n   *\n   * @requires $location\n   * @requires $rootScope\n   * @requires $injector\n   * @requires $browser\n   *\n   * @description\n   *\n   */\n  this.$get = $get;\n  $get.$inject = ['$location', '$rootScope', '$injector', '$browser'];\n  function $get(   $location,   $rootScope,   $injector,   $browser) {\n\n    var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;\n\n    function appendBasePath(url, isHtml5, absolute) {\n      if (baseHref === '/') return url;\n      if (isHtml5) return baseHref.slice(0, -1) + url;\n      if (absolute) return baseHref.slice(1) + url;\n      return url;\n    }\n\n    // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n    function update(evt) {\n      if (evt && evt.defaultPrevented) return;\n      var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;\n      lastPushedUrl = undefined;\n      if (ignoreUpdate) return true;\n\n      function check(rule) {\n        var handled = rule($injector, $location);\n\n        if (!handled) return false;\n        if (isString(handled)) $location.replace().url(handled);\n        return true;\n      }\n      var n = rules.length, i;\n\n      for (i = 0; i < n; i++) {\n        if (check(rules[i])) return;\n      }\n      // always check otherwise last to allow dynamic updates to the set of rules\n      if (otherwise) check(otherwise);\n    }\n\n    function listen() {\n      listener = listener || $rootScope.$on('$locationChangeSuccess', update);\n      return listener;\n    }\n\n    if (!interceptDeferred) listen();\n\n    return {\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#sync\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n       * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,\n       * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed\n       * with the transition by calling `$urlRouter.sync()`.\n       *\n       * @example\n       * <pre>\n       * angular.module('app', ['ui.router'])\n       *   .run(function($rootScope, $urlRouter) {\n       *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n       *       // Halt state change from even starting\n       *       evt.preventDefault();\n       *       // Perform custom logic\n       *       var meetsRequirement = ...\n       *       // Continue with the update and state transition if logic allows\n       *       if (meetsRequirement) $urlRouter.sync();\n       *     });\n       * });\n       * </pre>\n       */\n      sync: function() {\n        update();\n      },\n\n      listen: function() {\n        return listen();\n      },\n\n      update: function(read) {\n        if (read) {\n          location = $location.url();\n          return;\n        }\n        if ($location.url() === location) return;\n\n        $location.url(location);\n        $location.replace();\n      },\n\n      push: function(urlMatcher, params, options) {\n        $location.url(urlMatcher.format(params || {}));\n        lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;\n        if (options && options.replace) $location.replace();\n      },\n\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#href\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * A URL generation method that returns the compiled URL for a given\n       * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.\n       *\n       * @example\n       * <pre>\n       * $bob = $urlRouter.href(new UrlMatcher(\"/about/:person\"), {\n       *   person: \"bob\"\n       * });\n       * // $bob == \"/about/bob\";\n       * </pre>\n       *\n       * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.\n       * @param {object=} params An object of parameter values to fill the matcher's required parameters.\n       * @param {object=} options Options object. The options are:\n       *\n       * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n       *\n       * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n       */\n      href: function(urlMatcher, params, options) {\n        if (!urlMatcher.validates(params)) return null;\n\n        var isHtml5 = $locationProvider.html5Mode();\n        if (angular.isObject(isHtml5)) {\n          isHtml5 = isHtml5.enabled;\n        }\n        \n        var url = urlMatcher.format(params);\n        options = options || {};\n\n        if (!isHtml5 && url !== null) {\n          url = \"#\" + $locationProvider.hashPrefix() + url;\n        }\n        url = appendBasePath(url, isHtml5, options.absolute);\n\n        if (!options.absolute || !url) {\n          return url;\n        }\n\n        var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();\n        port = (port === 80 || port === 443 ? '' : ':' + port);\n\n        return [$location.protocol(), '://', $location.host(), port, slash, url].join('');\n      }\n    };\n  }\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/view.js",
    "content": "\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n  this.$get = $get;\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$view\n   *\n   * @requires ui.router.util.$templateFactory\n   * @requires $rootScope\n   *\n   * @description\n   *\n   */\n  $get.$inject = ['$rootScope', '$templateFactory'];\n  function $get(   $rootScope,   $templateFactory) {\n    return {\n      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n      /**\n       * @ngdoc function\n       * @name ui.router.state.$view#load\n       * @methodOf ui.router.state.$view\n       *\n       * @description\n       *\n       * @param {string} name name\n       * @param {object} options option object.\n       */\n      load: function load(name, options) {\n        var result, defaults = {\n          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n        };\n        options = extend(defaults, options);\n\n        if (options.view) {\n          result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n        }\n        if (result && options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$viewContentLoading\n         * @eventOf ui.router.state.$view\n         * @eventType broadcast on root scope\n         * @description\n         *\n         * Fired once the view **begins loading**, *before* the DOM is rendered.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} viewConfig The view config properties (template, controller, etc).\n         *\n         * @example\n         *\n         * <pre>\n         * $scope.$on('$viewContentLoading',\n         * function(event, viewConfig){\n         *     // Access to all the view config properties.\n         *     // and one special property 'targetView'\n         *     // viewConfig.targetView\n         * });\n         * </pre>\n         */\n          $rootScope.$broadcast('$viewContentLoading', options);\n        }\n        return result;\n      }\n    };\n  }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/viewDirective.js",
    "content": "/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n * \n * @example\n * A view can be unnamed or named. \n * <pre>\n * <!-- Unnamed -->\n * <div ui-view></div> \n * \n * <!-- Named -->\n * <div ui-view=\"viewName\"></div>\n * </pre>\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a \n * single view and it is unnamed then you can populate it like so:\n * <pre>\n * <div ui-view></div> \n * $stateProvider.state(\"home\", {\n *   template: \"<h1>HELLO!</h1>\"\n * })\n * </pre>\n * \n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}\n * config property, by name, in this case an empty name:\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * But typically you'll only use the views property if you name your view or have more than one view \n * in the same template. There's not really a compelling reason to name a view if its the only one, \n * but you could if you wanted, like so:\n * <pre>\n * <div ui-view=\"main\"></div>\n * </pre> \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * Really though, you'll use views to set up multiple views:\n * <pre>\n * <div ui-view></div>\n * <div ui-view=\"chart\"></div> \n * <div ui-view=\"data\"></div> \n * </pre>\n * \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     },\n *     \"chart\": {\n *       template: \"<chart_thing/>\"\n *     },\n *     \"data\": {\n *       template: \"<data_thing/>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Examples for `autoscroll`:\n *\n * <pre>\n * <!-- If autoscroll present with no expression,\n *      then scroll ui-view into view -->\n * <ui-view autoscroll/>\n *\n * <!-- If autoscroll present with valid expression,\n *      then scroll ui-view into view if expression evaluates to true -->\n * <ui-view autoscroll='true'/>\n * <ui-view autoscroll='false'/>\n * <ui-view autoscroll='scopeVariable'/>\n * </pre>\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate'];\nfunction $ViewDirective(   $state,   $injector,   $uiViewScroll,   $interpolate) {\n\n  function getService() {\n    return ($injector.has) ? function(service) {\n      return $injector.has(service) ? $injector.get(service) : null;\n    } : function(service) {\n      try {\n        return $injector.get(service);\n      } catch (e) {\n        return null;\n      }\n    };\n  }\n\n  var service = getService(),\n      $animator = service('$animator'),\n      $animate = service('$animate');\n\n  // Returns a set of DOM manipulation functions based on which Angular version\n  // it should use\n  function getRenderer(attrs, scope) {\n    var statics = function() {\n      return {\n        enter: function (element, target, cb) { target.after(element); cb(); },\n        leave: function (element, cb) { element.remove(); cb(); }\n      };\n    };\n\n    if ($animate) {\n      return {\n        enter: function(element, target, cb) {\n          var promise = $animate.enter(element, null, target, cb);\n          if (promise && promise.then) promise.then(cb);\n        },\n        leave: function(element, cb) {\n          var promise = $animate.leave(element, cb);\n          if (promise && promise.then) promise.then(cb);\n        }\n      };\n    }\n\n    if ($animator) {\n      var animate = $animator && $animator(scope, attrs);\n\n      return {\n        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n        leave: function(element, cb) { animate.leave(element); cb(); }\n      };\n    }\n\n    return statics();\n  }\n\n  var directive = {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    compile: function (tElement, tAttrs, $transclude) {\n      return function (scope, $element, attrs) {\n        var previousEl, currentEl, currentScope, latestLocals,\n            onloadExp     = attrs.onload || '',\n            autoScrollExp = attrs.autoscroll,\n            renderer      = getRenderer(attrs, scope);\n\n        scope.$on('$stateChangeSuccess', function() {\n          updateView(false);\n        });\n        scope.$on('$viewContentLoading', function() {\n          updateView(false);\n        });\n\n        updateView(true);\n\n        function cleanupLastView() {\n          if (previousEl) {\n            previousEl.remove();\n            previousEl = null;\n          }\n\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n\n          if (currentEl) {\n            renderer.leave(currentEl, function() {\n              previousEl = null;\n            });\n\n            previousEl = currentEl;\n            currentEl = null;\n          }\n        }\n\n        function updateView(firstTime) {\n          var newScope,\n              name            = getUiViewName(scope, attrs, $element, $interpolate),\n              previousLocals  = name && $state.$current && $state.$current.locals[name];\n\n          if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n          newScope = scope.$new();\n          latestLocals = $state.$current.locals[name];\n\n          var clone = $transclude(newScope, function(clone) {\n            renderer.enter(clone, $element, function onUiViewEnter() {\n              if(currentScope) {\n                currentScope.$emit('$viewContentAnimationEnded');\n              }\n\n              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n                $uiViewScroll(clone);\n              }\n            });\n            cleanupLastView();\n          });\n\n          currentEl = clone;\n          currentScope = newScope;\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoaded\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description           *\n           * Fired once the view is **loaded**, *after* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           */\n          currentScope.$emit('$viewContentLoaded');\n          currentScope.$eval(onloadExp);\n        }\n      };\n    }\n  };\n\n  return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];\nfunction $ViewDirectiveFill (  $compile,   $controller,   $state,   $interpolate) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    compile: function (tElement) {\n      var initial = tElement.html();\n      return function (scope, $element, attrs) {\n        var current = $state.$current,\n            name = getUiViewName(scope, attrs, $element, $interpolate),\n            locals  = current && current.locals[name];\n\n        if (! locals) {\n          return;\n        }\n\n        $element.data('$uiView', { name: name, state: locals.$$state });\n        $element.html(locals.$template ? locals.$template : initial);\n\n        var link = $compile($element.contents());\n\n        if (locals.$$controller) {\n          locals.$scope = scope;\n          var controller = $controller(locals.$$controller, locals);\n          if (locals.$$controllerAs) {\n            scope[locals.$$controllerAs] = controller;\n          }\n          $element.data('$ngControllerController', controller);\n          $element.children().data('$ngControllerController', controller);\n        }\n\n        link(scope);\n      };\n    }\n  };\n}\n\n/**\n * Shared ui-view code for both directives:\n * Given scope, element, and its attributes, return the view's name\n */\nfunction getUiViewName(scope, attrs, element, $interpolate) {\n  var name = $interpolate(attrs.uiView || attrs.name || '')(scope);\n  var inherited = element.inheritedData('$uiView');\n  return name.indexOf('@') >= 0 ?  name :  (name + '@' + (inherited ? inherited.state.name : ''));\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n"
  },
  {
    "path": "client/components/angular-ui-router/src/viewScroll.js",
    "content": "/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n  var useAnchorScroll = false;\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n   * @methodOf ui.router.state.$uiViewScrollProvider\n   *\n   * @description\n   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n   * scrolling based on the url anchor.\n   */\n  this.useAnchorScroll = function () {\n    useAnchorScroll = true;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$uiViewScroll\n   *\n   * @requires $anchorScroll\n   * @requires $timeout\n   *\n   * @description\n   * When called with a jqLite element, it scrolls the element into view (after a\n   * `$timeout` so the DOM has time to refresh).\n   *\n   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n   */\n  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n    if (useAnchorScroll) {\n      return $anchorScroll;\n    }\n\n    return function ($element) {\n      $timeout(function () {\n        $element[0].scrollIntoView();\n      }, 0, false);\n    };\n  }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n"
  },
  {
    "path": "client/components/assert/.bower.json",
    "content": "{\n  \"name\": \"assert\",\n  \"homepage\": \"https://github.com/angular/assert\",\n  \"_release\": \"6caafd2561\",\n  \"_resolution\": {\n    \"type\": \"branch\",\n    \"branch\": \"master\",\n    \"commit\": \"6caafd2561ece8cbfdabbe7357b50ce9192db18c\"\n  },\n  \"_source\": \"git@github.com:angular/assert.git\",\n  \"_target\": \"*\",\n  \"_originalSource\": \"git@github.com:angular/assert.git\",\n  \"_direct\": true\n}"
  },
  {
    "path": "client/components/assert/API.md",
    "content": "// Asserting APIs:\n// - generated by Traceur (based on type annotations)\n// - can be also used in tests for instance\nassert.type(something, Type);\nassert.returnType(returnValue, Type);\nassert.argumentTypes(firstArg, Type, secondArg, Type);\n\n// this can be used anywhere in the code\n// (useful inside test, when we don't wanna define an interface)\nassert(value).is(...)\n\n\n// Custom type assert:\n// - i have a custom type\n// - adding an assert methos\nassert.define(MyUser, function(value) {\n  assert(value).is(Type, Type2); // or\n  assert(value, 'name').is(assert.string);\n  assert(value, 'contact').is(assert.structure({\n    email: assert.string,\n    cell: assert.string\n  }));\n  assert(value, 'contacts').is(assert.arrayOf(assert.structure({email: assert.string})));\n});\n\n\n\n// Define interface (an empty type with assert method)\n// - returns an empty class with assert method\nvar Email = assert.define('IEmail', function(value) {\n  assert(value).is(String);\n\n  if (value.indexOf('@') !== -1) {\n    assert.fail('has to contain \"@\"');\n  }\n});\n\n\n// Predefined types\nassert.string\nassert.number\nassert.boolean\nassert.arrayOf(...types)\nassert.structure(object)\n"
  },
  {
    "path": "client/components/assert/README.md",
    "content": "http://angular.github.io/assert/\n"
  },
  {
    "path": "client/components/assert/gulpfile.js",
    "content": "var gulp = require('gulp');\nvar pipe = require('pipe/gulp');\nvar traceur = require('gulp-traceur');\n\n\nvar path = {\n  src: './src/**/*.js',\n};\n\n\n// TRANSPILE ES6\ngulp.task('build_source_amd', function() {\n  gulp.src(path.src)\n      .pipe(traceur(pipe.traceur()))\n      .pipe(gulp.dest('dist/amd'));\n});\n\ngulp.task('build_source_cjs', function() {\n  gulp.src(path.src)\n      .pipe(traceur(pipe.traceur({modules: 'commonjs'})))\n      .pipe(gulp.dest('dist/cjs'));\n});\n\ngulp.task('build_source_es6', function() {\n  gulp.src(path.src)\n      .pipe(traceur(pipe.traceur({outputLanguage: 'es6'})))\n      .pipe(gulp.dest('dist/es6'));\n});\n\ngulp.task('build_dist', ['build_source_cjs', 'build_source_amd', 'build_source_es6']);\ngulp.task('build', ['build_dist']);\n\n\n// WATCH FILES FOR CHANGES\ngulp.task('watch', function() {\n  gulp.watch(path.src, ['build']);\n});\n"
  },
  {
    "path": "client/components/assert/karma.conf.js",
    "content": "var sharedConfig = require('pipe/karma');\n\nmodule.exports = function(config) {\n  sharedConfig(config);\n\n  config.set({\n    // list of files / patterns to load in the browser\n    files: [\n      'test-main.js',\n\n      {pattern: 'src/**/*.js', included: false},\n      {pattern: 'test/**/*.js', included: false}\n    ],\n\n    usePolling: true,\n\n    preprocessors: {\n      'src/**/*.js': ['traceur'],\n      'test/**/*.js': ['traceur']\n    }\n  });\n\n  config.sauceLabs.testName = 'assert';\n};\n"
  },
  {
    "path": "client/components/assert/npm-shrinkwrap.json",
    "content": "{\n  \"name\": \"rtts-assert\",\n  \"version\": \"0.0.0\",\n  \"dependencies\": {\n    \"gulp-traceur\": {\n      \"version\": \"0.4.0\",\n      \"from\": \"gulp-traceur@0.4.0\",\n      \"dependencies\": {\n        \"gulp-util\": {\n          \"version\": \"2.2.5\",\n          \"from\": \"gulp-util@2.2.5\"\n        },\n        \"through2\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"through2@0.4.0\"\n        },\n        \"traceur\": {\n          \"version\": \"0.0..0\",\n          \"from\": \"git://github.com/vojtajina/traceur-compiler#add-es6-pure-transformer-dist\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "client/components/assert/package.json",
    "content": "{\n  \"name\": \"rtts-assert\",\n  \"version\": \"0.0.1\",\n  \"description\": \"A type assertion library for Traceur.\",\n  \"main\": \"./dist/cjs/assert.js\",\n  \"homepage\": \"https://github.com/angular/assert\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/angular/assert.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/angular/assert/issues\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"gulp\": \"^3.5.6\",\n    \"gulp-connect\": \"~1.0.5\",\n    \"gulp-traceur\": \"~0.4.0\",\n    \"karma\": \"^0.12.1\",\n    \"karma-chrome-launcher\": \"^0.1.2\",\n    \"karma-jasmine\": \"^0.2.2\",\n    \"karma-requirejs\": \"^0.2.1\",\n    \"karma-traceur-preprocessor\": \"^0.2.2\",\n    \"pipe\": \"git://github.com/angular/pipe#remove-transitive-deps\"\n  },\n  \"scripts\": {\n    \"test\": \"karma start --single-run\"\n  },\n  \"author\": \"Vojta Jína <vojta.jina@gmail.com>\",\n  \"license\": \"Apache-2.0\"\n}\n"
  },
  {
    "path": "client/components/assert/src/assert.js",
    "content": "// TODO(vojta):\n// - extract into multiple files\n// - different error types\n// - simplify/humanize error messages\n// - throw when invalid input (such as odd number of args into assert.argumentTypes)\n\nvar POSITION_NAME = ['', '1st', '2nd', '3rd'];\nfunction argPositionName(i) {\n  var position = (i / 2) + 1;\n\n  return POSITION_NAME[position] || (position + 'th');\n}\n\nvar primitives = $traceurRuntime.type;\n\nfunction assertArgumentTypes(...params) {\n  var actual, type;\n  var currentArgErrors;\n  var errors = [];\n  var msg;\n\n  for (var i = 0, l = params.length; i < l; i = i + 2) {\n    actual = params[i];\n    type = params[i + 1];\n\n    currentArgErrors = [];\n\n    // currentStack = [];\n    //\n\n    if (!isType(actual, type, currentArgErrors)) {\n\n      // console.log(JSON.stringify(errors, null, '  '));\n      // TODO(vojta): print \"an instance of\" only if T starts with uppercase.\n      errors.push(argPositionName(i) + ' argument has to be an instance of ' + prettyPrint(type) + ', got ' + prettyPrint(actual));\n      if (currentArgErrors.length) {\n        errors.push(currentArgErrors);\n      }\n    }\n  }\n\n  if (errors.length) {\n    throw new Error('Invalid arguments given!\\n' + formatErrors(errors));\n  }\n}\n\nfunction prettyPrint(value) {\n  if (typeof value === 'undefined') {\n    return 'undefined';\n  }\n\n  if (typeof value === 'string') {\n    return '\"' + value + '\"';\n  }\n\n  if (typeof value === 'boolean') {\n    return value.toString();\n  }\n\n  if (value === null) {\n    return 'null';\n  }\n\n  if (typeof value === 'object') {\n    if (value.map) {\n      return '[' + value.map(prettyPrint).join(', ') + ']';\n    }\n\n    var properties = Object.keys(value);\n    return '{' + properties.map((p) => p + ': ' + prettyPrint(value[p])).join(', ') + '}';\n  }\n\n  return value.__assertName || value.name || value.toString();\n}\n\nfunction isType(value, T, errors) {\n\n  if (T === primitives.void) {\n    return typeof value === 'undefined';\n  }\n\n  if (T === primitives.any || value === null) {\n    return true;\n  }\n\n  if (T === primitives.string) {\n    return typeof value === 'string';\n  }\n\n  if (T === primitives.number) {\n    return typeof value === 'number';\n  }\n\n  if (T === primitives.boolean) {\n    return typeof value === 'boolean';\n  }\n\n  // var parentStack = currentStack;\n  // currentStack = [];\n\n  // shouldnt this create new stack?\n  if (typeof T.assert === 'function') {\n    var parentStack = currentStack;\n    var isValid;\n    currentStack = errors;\n    try {\n      isValid = T.assert(value) ;\n    } catch (e) {\n      fail(e.message);\n      isValid = false;\n    }\n\n    currentStack = parentStack;\n\n    if (typeof isValid === 'undefined') {\n      isValid = errors.length === 0;\n    }\n\n    return isValid;\n\n    // if (!currentStack.length) {\n    //   currentStack = parentStack;\n    //   return [];\n    // }\n    // var res = currentStack;\n    // currentStack = parentStack;\n    // return ['not instance of ' + prettyPrint(T), res];\n  }\n\n  return value instanceof T;\n\n  // if (!(value instanceof T)) {\n  //   fail('not instance of ' + prettyPrint(T));\n  // }\n\n  // var res = currentStack;\n  // currentStack = parentStack;\n\n  // return res;\n}\n\nfunction formatErrors(errors, indent = '  ') {\n  return errors.map((e) => {\n    if (typeof e === 'string') return indent + '- ' + e;\n    return formatErrors(e, indent + '  ');\n  }).join('\\n');\n}\n\n\n// assert a type of given value and throw if does not pass\nfunction type(actual, T) {\n  var errors = [];\n  // currentStack = [];\n\n  if (!isType(actual, T, errors)) {\n    // console.log(JSON.stringify(errors, null, '  '));\n    // TODO(vojta): print \"an instance of\" only if T starts with uppercase.\n    var msg = 'Expected an instance of ' + prettyPrint(T) + ', got ' + prettyPrint(actual) + '!';\n    if (errors.length) {\n      msg += '\\n' + formatErrors(errors);\n    }\n\n    throw new Error(msg);\n  }\n}\n\nfunction returnType(actual, T) {\n  var errors = [];\n  // currentStack = [];\n\n  if (!isType(actual, T, errors)) {\n    // console.log(JSON.stringify(errors, null, '  '));\n    // TODO(vojta): print \"an instance of\" only if T starts with uppercase.\n    var msg = 'Expected to return an instance of ' + prettyPrint(T) + ', got ' + prettyPrint(actual) + '!';\n    if (errors.length) {\n      msg += '\\n' + formatErrors(errors);\n    }\n\n    throw new Error(msg);\n  }\n\n  return actual;\n}\n\n\n// TODO(vojta): define these with DSL?\nvar string = define('string', function(value) {\n  return typeof value === 'string';\n});\n\n// function string() {}\n// string.assert = function(value) {\n//   return typeof value === 'string';\n// };\n\nvar boolean = define('boolean', function(value) {\n  return typeof value === 'boolean';\n});\n// function boolean() {}\n// boolean.assert = function(value) {\n//   return typeof value === 'boolean';\n// };\n\nvar number = define('number', function(value) {\n  return typeof value === 'number';\n});\n// function number() {}\n// number.assert = function(value) {\n//   return typeof value === 'number';\n// };\n\n\nfunction arrayOf(...types) {\n  return assert.define('array of ' + types.map(prettyPrint).join('/'), function(value) {\n    if (assert(value).is(Array)) {\n      for (var item of value) {\n        assert(item).is(...types);\n      }\n    }\n  });\n}\n\nfunction structure(definition) {\n  var properties = Object.keys(definition);\n  return assert.define('object with properties ' + properties.join(', '), function(value) {\n    if (assert(value).is(Object)) {\n      for (var property of properties) {\n        assert(value[property]).is(definition[property]);\n      }\n    }\n  })\n}\n\n\n\n// I'm sorry, bad global state... to make the API nice ;-)\nvar currentStack = [];\n\nfunction fail(message) {\n  currentStack.push(message);\n}\n\nfunction define(classOrName, check) {\n  var cls = classOrName;\n\n  if (typeof classOrName === 'string') {\n    cls = function() {};\n    cls.__assertName = classOrName;\n  }\n\n  cls.assert = function(value) {\n    // var parentStack = currentStack;\n\n    // currentStack = [];\n\n    return check(value);\n\n    // if (currentStack.length) {\n    //   parentStack.push(currentStack)\n    // }\n    // currentStack = parentStack;\n  };\n\n  return cls;\n}\n\n\n\nfunction assert(value) {\n  return {\n    is: function is(...types) {\n      // var errors = []\n      var allErrors = [];\n      var errors;\n\n      for (var type of types) {\n        errors = [];\n\n        if (isType(value, type, errors)) {\n          return true;\n        }\n\n        // if no errors, merge multiple \"is not instance of \" into x/y/z ?\n        allErrors.push(prettyPrint(value) + ' is not instance of ' + prettyPrint(type))\n        if (errors.length) {\n          allErrors.push(errors);\n        }\n      }\n\n      // if (types.length > 1) {\n      //   currentStack.push(['has to be ' + types.map(prettyPrint).join(' or '), ...allErrors]);\n      // } else {\n        currentStack.push(...allErrors);\n      // }\n      return false;\n    }\n  };\n}\n\n\n// PUBLIC API\n\n// asserting API\n\n// throw if no type provided\nassert.type = type;\n\n// throw if odd number of args\nassert.argumentTypes = assertArgumentTypes;\nassert.returnType = returnType;\n\n\n// define AP;\nassert.define = define;\nassert.fail = fail;\n\n// primitive value type;\nassert.string = string;\nassert.number = number;\nassert.boolean = boolean;\n\n// custom types\nassert.arrayOf = arrayOf;\nassert.structure = structure;\n\n\nexport {assert}\n"
  },
  {
    "path": "client/components/assert/test/assert.spec.js",
    "content": "// # Assert.js\n// A run-time type assertion library for JavaScript. Designed to be used with [Traceur](https://github.com/google/traceur-compiler).\n\n\n// - [Basic Type Check](#basic-type-check)\n// - [Custom Check](#custom-check)\n// - [Primitive Values](#primitive-values)\n// - [Describing more complex types](#describing-more-complex-types)\n//   - [assert.arrayOf](#assert-arrayof)\n//   - [assert.structure](#assert-structure)\n// - [Integrating with Traceur](#integrating-with-traceur)\n\nimport {assert} from 'assert';\n\n\n\n// ## Basic Type Check\n// By default, `instanceof` is used to check the type.\n//\n// Note that you can use `assert.type()` in unit tests or anywhere in your code.\n// Most of the time, you will use it with Traceur.\n// Jump to the [Traceur section](#integrating-with-traceur) to see an example of that.\ndescribe('basic type check', function() {\n\n  class Type {}\n\n  it('should pass', function() {\n    assert.type(new Type(), Type);\n  });\n\n\n  it('should fail', function() {\n    expect(() => assert.type(123, Type))\n      .toThrowError('Expected an instance of Type, got 123!');\n  });\n\n\n  it('should allow null', function() {\n    assert.type(null, Type);\n  });\n});\n\n\n\n// ## Custom Check\n// Often, `instanceof` is not flexible enough.\n// In that case, your type can define its own `assert` method which will be used instead.\n//\n// See [Describing More Complex Types](#describing-more-complex-types) for examples how to\n// define custom checks using `assert.define()`.\ndescribe('custom check', function() {\n\n  class Type {}\n\n  // the basic check can just return true/false, without specifying any reason\n  it('should pass when returns true', function() {\n    Type.assert = function(value) {\n      return true;\n    };\n\n    assert.type({}, Type);\n  });\n\n\n  it('should fail when returns false', function() {\n    Type.assert = function(value) {\n      return false;\n    };\n\n    expect(() => assert.type({}, Type))\n      .toThrowError('Expected an instance of Type, got {}!');\n  });\n\n\n  // Using `assert.fail()` allows to report even multiple errors.\n  it('should fail when calls assert.fail()', function() {\n    Type.assert = function(value) {\n      assert.fail('not smart enough');\n      assert.fail('not blue enough');\n    };\n\n    expect(() => assert.type({}, Type))\n      .toThrowError('Expected an instance of Type, got {}!\\n' +\n                    '  - not smart enough\\n' +\n                    '  - not blue enough');\n  });\n\n\n  it('should fail when throws an exception', function() {\n    Type.assert = function(value) {\n      throw new Error('not long enough');\n    };\n\n    expect(function() {\n      assert.type(12345, Type);\n    }).toThrowError('Expected an instance of Type, got 12345!\\n' +\n                    '  - not long enough');\n  });\n});\n\n\n\n// ## Primitive Values\n// You don't want to check primitive values (such as strings, numbers, or booleans) using `typeof` rather than\n// `instanceof`.\n//\n// Again, you probably won't write this code and rather use Traceur to do it for you, simply based on type annotations.\ndescribe('primitive value check', function() {\n  var primitive = $traceurRuntime.type;\n\n  describe('string', function() {\n\n    it('should pass', function() {\n      assert.type('xxx', primitive.string);\n    });\n\n\n    it('should fail', function() {\n      expect(() => assert.type(12345, primitive.string))\n        .toThrowError('Expected an instance of string, got 12345!');\n    });\n\n    it('should allow null', function() {\n      assert.type(null, primitive.string);\n    });\n  });\n\n\n  describe('number', function() {\n\n    it('should pass', function() {\n      assert.type(123, primitive.number);\n    });\n\n\n    it('should fail', function() {\n      expect(() => assert.type(false, primitive.number))\n        .toThrowError('Expected an instance of number, got false!');\n    });\n\n    it('should allow null', function() {\n      assert.type(null, primitive.number);\n    });\n  });\n\n\n  describe('boolean', function() {\n\n    it('should pass', function() {\n      assert.type(true, primitive.boolean);\n      assert.type(false, primitive.boolean);\n    });\n\n\n    it('should fail', function() {\n      expect(() => assert.type(123, primitive.boolean))\n        .toThrowError('Expected an instance of boolean, got 123!');\n    });\n\n    it('should allow null', function() {\n      assert.type(null, primitive.boolean);\n    });\n  });\n});\n\n\n\n// ## Describing more complex types\n//\n// Often, a simple type check using `instanceof` or `typeof` is not enough.\n// That's why you can define custom checks using this DSL.\n// The goal was to make them easy to compose and as descriptive as possible.\n// Of course you can write your own DSL on the top of this.\ndescribe('define', function() {\n\n  // If the first argument to `assert.define()` is a type (function), it will define `assert` method on that function.\n  //\n  // In this example, being a type of Type means being a either a function or object.\n  it('should define assert for an existing type', function() {\n    class Type {}\n\n    assert.define(Type, function(value) {\n      assert(value).is(Function, Object);\n    });\n\n    assert.type({}, Type);\n    assert.type(function() {}, Type);\n    expect(() => assert.type('str', Type))\n      .toThrowError('Expected an instance of Type, got \"str\"!\\n' +\n                    '  - \"str\" is not instance of Function\\n' +\n                    '  - \"str\" is not instance of Object');\n  });\n\n\n  // If the first argument to `assert.define()` is a string,\n  // it will create an interface - basically an empty class with `assert` method.\n  it('should define an interface', function() {\n    var User = assert.define('MyUser', function(user) {\n      assert(user).is(Object);\n    });\n\n    assert.type({}, User);\n    expect(() => assert.type(12345, User))\n      .toThrowError('Expected an instance of MyUser, got 12345!\\n' +\n                    '  - 12345 is not instance of Object');\n  });\n\n\n  // Here are a couple of more APIs to describe your custom types...\n  //\n  // ### assert.arrayOf\n  // Checks if the value is an array and if so, it checks whether all the items are one the given types.\n  // These types can be composed types, not just simple ones.\n  describe('arrayOf', function() {\n\n    var Titles = assert.define('ListOfTitles', function(value) {\n      assert(value).is(assert.arrayOf(assert.string, assert.number));\n    });\n\n    it('should pass', function () {\n      assert.type(['one', 55, 'two'], Titles);\n    });\n\n\n    it('should fail when non-array given', function () {\n      expect(() => assert.type('foo', Titles))\n        .toThrowError('Expected an instance of ListOfTitles, got \"foo\"!\\n' +\n                      '  - \"foo\" is not instance of array of string/number\\n' +\n                      '    - \"foo\" is not instance of Array');\n    });\n\n\n    it('should fail when an invalid item in the array', function () {\n      expect(() => assert.type(['aaa', true], Titles))\n        .toThrowError('Expected an instance of ListOfTitles, got [\"aaa\", true]!\\n' +\n                      '  - [\"aaa\", true] is not instance of array of string/number\\n' +\n                      '    - true is not instance of string\\n' +\n                      '    - true is not instance of number');\n    });\n  });\n\n\n  // ### assert.structure\n  // Similar to `assert.arrayOf` which checks a content of an array,\n  // `assert.structure` checks if the value is an object with specific properties.\n  describe('structure', function() {\n\n    var User = assert.define('MyUser', function(value) {\n      assert(value).is(assert.structure({\n        name: assert.string,\n        age: assert.number\n      }));\n    });\n\n    it('should pass', function () {\n      assert.type({name: 'Vojta', age: 28}, User);\n    });\n\n\n    it('should fail when non-object given', function () {\n      expect(() => assert.type(123, User))\n        .toThrowError('Expected an instance of MyUser, got 123!\\n' +\n                      '  - 123 is not instance of object with properties name, age\\n' +\n                      '    - 123 is not instance of Object');\n    });\n\n\n    it('should fail when an invalid property', function () {\n      expect(() => assert.type({name: 'Vojta', age: true}, User))\n        .toThrowError('Expected an instance of MyUser, got {name: \"Vojta\", age: true}!\\n' +\n                      '  - {name: \"Vojta\", age: true} is not instance of object with properties name, age\\n' +\n                      '    - true is not instance of number');\n    });\n  });\n});\n\n\n\n// ## Integrating with Traceur\n//\n// Manually calling `assert.type()` in your code is cumbersome. Most of the time, you'll want to\n// have Traceur add the calls to `assert.type()` to your code based on type annotations.\n//\n// This has several advantages:\n// - it's shorter and nicer,\n// - you can easily ignore it when generating production code.\n//\n// You'll need to run Traceur with `--types=true --type-assertions=true --type-assertion-module=\"path/to/assert\"`.\ndescribe('Traceur', function() {\n\n  describe('arguments', function() {\n\n    function reverse(str: string) {\n      return str ? reverse(str.substring(1)) + str[0] : ''\n    }\n\n    it('should pass', function() {\n      expect(reverse('angular')).toBe('ralugna');\n    });\n\n\n    it('should fail', function() {\n      expect(() => reverse(123))\n        .toThrowError('Invalid arguments given!\\n' +\n                      '  - 1st argument has to be an instance of string, got 123');\n    });\n  });\n\n\n  describe('return value', function() {\n\n    function foo(bar): number {\n      return bar;\n    }\n\n    it('should pass', function() {\n      expect(foo(123)).toBe(123);\n    });\n\n\n    it('should fail', function() {\n      expect(() => foo('bar'))\n        .toThrowError('Expected to return an instance of number, got \"bar\"!');\n    });\n  });\n\n\n  describe('variables', function() {\n\n    it('should pass', function() {\n      var count:number = 1;\n    });\n\n\n    it('should fail', function() {\n      expect(() => {\n        var count: number = true;\n      }).toThrowError('Expected an instance of number, got true!');\n    });\n  });\n\n\n  describe('void', function() {\n    function foo(bar): void {\n      return bar;\n    }\n\n    it('should pass when not defined', function() {\n      function nonReturn(): void {}\n      function returnNothing(): void { return; }\n      function returnUndefined(): void { return undefined; }\n\n      foo();\n      foo(undefined);\n      nonReturn();\n      returnNothing();\n      returnUndefined();\n    });\n\n\n    it('should fail when a value returned', function() {\n      expect(() => foo('bar'))\n        .toThrowError('Expected to return an instance of voidType, got \"bar\"!');\n    });\n\n\n    it('should fail when null returned', function() {\n      expect(() => foo(null))\n        .toThrowError('Expected to return an instance of voidType, got null!');\n    });\n  });\n});\n\n\n// <center><small>\n// This documentation was generated from [assert.spec.js](https://github.com/vojtajina/assert/blob/master/test/assert.spec.js) using [Docco](http://jashkenas.github.io/docco/).\n// </small></center>\n"
  },
  {
    "path": "client/components/assert/test-main.js",
    "content": "var allTestFiles = [];\nvar TEST_REGEXP = /\\.spec\\.js$/;\n\nvar pathToModule = function(path) {\n  return path.replace(/^\\/base\\//, '').replace(/\\.js$/, '');\n};\n\nObject.keys(window.__karma__.files).forEach(function(file) {\n  if (TEST_REGEXP.test(file)) {\n    // Normalize paths to RequireJS module names.\n    allTestFiles.push(pathToModule(file));\n  }\n});\n\nrequire.config({\n  // Karma serves files under /base, which is the basePath from your config file\n  baseUrl: '/base',\n  paths: {\n    'assert': 'src/assert'\n  },\n\n  // Dynamically load all test files and ES6 polyfill.\n  deps: allTestFiles,\n\n  // we have to kickoff jasmine, as it is asynchronous\n  callback: window.__karma__.start\n});\n"
  },
  {
    "path": "client/components/es6-module-loader/.bower.json",
    "content": "{\n  \"name\": \"es6-module-loader\",\n  \"version\": \"0.10.0\",\n  \"description\": \"An ES6 Module Loader polyfill based on the latest spec.\",\n  \"homepage\": \"https://github.com/ModuleLoader/es6-module-loader\",\n  \"main\": \"dist/es6-module-loader-sans-promises.js\",\n  \"dependencies\": {\n    \"traceur\": \"0.0.74\"\n  },\n  \"keywords\": [\n    \"es6\",\n    \"harmony\",\n    \"polyfill\",\n    \"modules\"\n  ],\n  \"ignore\": [\n    \"demo\",\n    \"lib\",\n    \"test\",\n    \"grunt.js\",\n    \"package.json\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/ModuleLoader/es6-module-loader.git\"\n  },\n  \"licenses\": [\n    {\n      \"type\": \"MIT\"\n    }\n  ],\n  \"_release\": \"0.10.0\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v0.10.0\",\n    \"commit\": \"5f8a11f84dacdc4f43efb8409ebc836a33f14a85\"\n  },\n  \"_source\": \"git://github.com/ModuleLoader/es6-module-loader.git\",\n  \"_target\": \"~0.10.0\",\n  \"_originalSource\": \"es6-module-loader\"\n}"
  },
  {
    "path": "client/components/es6-module-loader/.gitignore",
    "content": "node_modules\nbower_components\ntmp\n"
  },
  {
    "path": "client/components/es6-module-loader/.jshintrc",
    "content": "{\n  \"curly\": true,\n  \"eqeqeq\": true,\n  \"immed\": true,\n  \"latedef\": true,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"sub\": true,\n  \"undef\": true,\n  \"boss\": true,\n  \"eqnull\": true\n}\n"
  },
  {
    "path": "client/components/es6-module-loader/Gruntfile.js",
    "content": "'use strict';\n\nmodule.exports = function (grunt) {\n  grunt.initConfig({\n    pkg: grunt.file.readJSON('package.json'),\n    meta: {\n      banner: '/*\\n *  <%= pkg.name %> v<%= pkg.version %>\\n' +\n        '<%= pkg.homepage ? \" *  \" + pkg.homepage + \"\\\\n\" : \"\" %>' +\n        ' *  Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>;' +\n        ' Licensed <%= _.pluck(pkg.licenses, \"type\").join(\", \") %>\\n */'\n    },\n    jshint: {\n      options: {\n        jshintrc: '.jshintrc'\n      },\n      dist: [\n        'lib/index.js',\n        'lib/loader.js',\n        'lib/system.js'\n      ]\n    },\n    concat: {\n      dist: {\n        files: {\n          'dist/<%= pkg.name %>.src.js': [\n            'node_modules/when/es6-shim/Promise.js',\n            'src/polyfill-wrapper-start.js',\n            'dist/<%= pkg.name %>.js',\n            'src/polyfill-wrapper-end.js'\n          ],\n          'dist/<%= pkg.name %>-sans-promises.src.js': [\n            'src/polyfill-wrapper-start.js',\n            'dist/<%= pkg.name %>.js',\n            'src/polyfill-wrapper-end.js'\n          ]\n        }\n      }\n    },\n    esnext: {\n      dist: {\n        src: [\n          'src/loader.js',\n          'src/system.js'\n        ],\n        dest: 'dist/<%= pkg.name %>.js'\n      }\n    },\n    'string-replace': {\n      dist: {\n        files: {\n          'dist/<%= pkg.name %>.js': 'dist/<%= pkg.name %>.js'\n        },\n        options: {\n          replacements:[{\n            pattern: 'var $__Object$getPrototypeOf = Object.getPrototypeOf;\\n' +\n              'var $__Object$defineProperty = Object.defineProperty;\\n' +\n              'var $__Object$create = Object.create;',\n            replacement: ''\n          }, {\n            pattern: '$__Object$getPrototypeOf(SystemLoader.prototype).constructor',\n            replacement: '$__super'\n          }]\n        }\n      }\n    },\n    uglify: {\n      options: {\n        banner: '<%= meta.banner %>\\n',\n        compress: {\n          drop_console: true\n        },\n        sourceMap: true\n      },\n      dist: {\n        options: {\n          banner: '<%= meta.banner %>\\n'\n        },\n        src: 'dist/<%= pkg.name %>.src.js',\n        dest: 'dist/<%= pkg.name %>.js'\n      },\n      polyfillOnly: {\n        src: 'dist/<%= pkg.name %>-sans-promises.src.js',\n        dest: 'dist/<%= pkg.name %>-sans-promises.js'\n      }\n    }\n  });\n\n  grunt.loadNpmTasks('grunt-contrib-jshint');\n  grunt.loadNpmTasks('grunt-contrib-uglify');\n  grunt.loadNpmTasks('grunt-esnext');\n  grunt.loadNpmTasks('grunt-contrib-concat');\n  grunt.loadNpmTasks('grunt-string-replace');\n\n  grunt.registerTask('lint', ['jshint']);\n  grunt.registerTask('compile', ['esnext', 'string-replace', 'concat']);\n  grunt.registerTask('default', [/*'jshint', */'esnext', 'string-replace', \n                     'concat', 'uglify']);\n};\n"
  },
  {
    "path": "client/components/es6-module-loader/LICENSE-MIT",
    "content": "Copyright (c) 2013-2014 Guy Bedford, Luke Hoban, Addy Osmani\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "client/components/es6-module-loader/README.md",
    "content": "# ES6 Module Loader Polyfill\n\nDynamically loads ES6 modules in NodeJS and current browsers.\n\n* Implemented exactly to the July 18 2014 ES6 specification draft.\n* Provides an asynchronous loader (`System.import`) to [dynamically load ES6 modules](#basic-use).\n* Uses [Traceur](https://github.com/google/traceur-compiler) for compiling ES6 modules and syntax into ES5 in the browser with source map support.\n* Fully supports [ES6 circular references and bindings](#circular-references--bindings).\n* Polyfills ES6 Promises in the browser with an optionally bundled ES6 promise implementation.\n* [Compatible with NodeJS](#nodejs-usage) allowing for server-side module loading and tracing extensions.\n* Supports ES6 module loading in IE8+. Other ES6 features only supported by Traceur in IE9+.\n* The complete combined polyfill, including ES6 promises, comes to 9KB minified and gzipped, making it suitable for production use, provided that modules are [built into ES5 making them independent of Traceur](#moving-to-production).\n\nFor an overview of build workflows, [see the production guide](#moving-to-production).\n\nSee the [demo folder](https://github.com/ModuleLoader/es6-module-loader/blob/master/demo/index.html) in this repo for a working example demonstrating both module loading the module tag in the browser.\n\nFor an example of a universal module loader based on this polyfill for loading AMD, CommonJS and globals, see [SystemJS](https://github.com/systemjs/systemjs).\n\n_The current version is tested against **[Traceur 0.0.72](https://github.com/google/traceur-compiler/tree/0.0.72)**._\n\n_Note the ES6 module specification is still in draft, and subject to change._\n\n### Basic Use\n\nDownload both [es6-module-loader.js](https://raw.githubusercontent.com/ModuleLoader/es6-module-loader/v0.9.4/dist/es6-module-loader.js) and traceur.js into the same folder.\n\nIf using ES6 syntax (optional), include [`traceur.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur/0.0.72/traceur.js) in the page first then include `es6-module-loader.js`:\n\n```html\n  <script src=\"traceur.js\"></script>\n  <script src=\"es6-module-loader.js\"></script>\n```\n\nWrite an ES6 module:\n\nmymodule.js:\n```javascript\n  export class q {\n    constructor() {\n      console.log('this is an es6 class!');\n    }\n  }\n```\n\nWe can then load the module with the dynamic loader:\n\n```html\n<script>\n  System.import('mymodule').then(function(m) {\n    new m.q();\n  });\n</script>\n```\n\nThe dynamic loader returns a `Module` object, which contains getters for the named exports (in this case, `q`).\n\n[Read the wiki on overview of ES6 modules and syntax](https://github.com/ModuleLoader/es6-module-loader/wiki/A-Brief-ES6-Modules-Overview).\n\n### Custom Compilation Options\n\nCustom [Traceur compilation options](https://github.com/google/traceur-compiler/blob/master/src/Options.js#L25) can be set through `System.traceurOptions`, eg:\n\n```javascript\nSystem.traceurOptions.annotations = true;\n```\n\n### Module Tag\n\nA simple analog to the module tag is provided with:\n\n```html\n<script type=\"module\">\n  // loads the 'q' export from 'mymodule.js' in the same path as the page\n  import { q } from 'mymodule';\n\n  new q(); // -> 'this is an es6 class!'\n</script>\n```\n\nIdeally this should be based on polyfilling the `<module>` tag, as `<script type=\"module\">` is not in the spec.\n\nAs such this approach is not really suitable for anything more than experimentation.\n\nSee an overview of the specification module tag features here - https://github.com/dherman/web-modules/blob/master/explainer.md.\n\n### baseURL\n\nAll modules are loaded relative to the `baseURL`, which by default is set to the current page path.\n\nWe can alter this with:\n\n```javascript\n  System.baseURL = '/js/lib/';\n  System.import('module'); // now loads \"/js/lib/module.js\"\n```\n\n### Paths Implementation\n\n_Note: This is a specification under discussion and not confirmed. This implementation will likely change._\n\nThe System loader provides paths rules used by the standard `locate` function.\n\nFor example, we might want to load `jquery` from a CDN location. For this we can provide a paths rule:\n\n```javascript\n  System.paths['jquery'] = '//code.jquery.com/jquery-1.10.2.min.js';\n  System.import('jquery').then(function($) {\n    // ...\n  });\n```\n\nAny reference to `jquery` in other modules will also use this same version.\n\nIt is also possible to define wildcard paths rules. The most specific rule will be used:\n\n```javascript\n  System.paths['lodash/*'] = '/js/lodash/*.js'\n  System.import('lodash/map').then(function(map) {\n    // ...\n  });\n```\n\n### Circular References & Bindings\n\nCircular references and live bindings are fully supported identically to ES6 in this polyfill.\n\nThat is:\n* Bindings are set up before module execution.\n* Execution is run from depth-first left to right on the module tree stopping at circular references.\n* Bindings are live - an adjustment to an export of one module affects all modules importing it.\n\neven.js\n```javascript\n  import { odd } from './odd'\n\n  export var counter = 0;\n\n  export function even(n) {\n    counter++;\n    return n == 0 || odd(n - 1);\n  }\n```\n\nodd.js\n```javascript\n  import { even } from './even';\n\n  export function odd(n) {\n    return n != 0 && even(n - 1);\n  }\n```\n\n```javascript\n  System.import('even').then(function(m) {\n    m.even(10);\n    m.counter;\n    m.even(20);\n    m.counter;\n  });\n```\n\n### Moving to Production\n\nWhen in production, it is not suitable to load ES6 modules and syntax in the browser.\n\nThere is a `modules=instantiate` build output in Traceur that can be used with the ES6 Module Loader, provided it has the [System.register extension](https://github.com/systemjs/systemjs/blob/master/lib/extension-register.js)\nfrom [SystemJS](https://github.com/systemjs/systemjs).\n\nThe benefit of this output is that it provides full support for circular references and live module bindings.\n\nThis output format is explained here - https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained.\n\nAlternatively, Traceur can also output `amd` or `cjs` as well.\n\nA basic example of using this extension with a build would be the following:\n\n#### Building all files into one bundle\n\n1. Build all ES6 modules into ES5 System.register form:\n\n  ```\n    traceur --out app-build.js app/app.js --modules=instantiate\n  ```\n\n2. If using additional ES6 features apart from modules syntax, load [`traceur-runtime.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur/0.0.72/traceur-runtime.js) (also included in the `bin` folder when installing Traceur through Bower or npm). Then include `es6-module-loader.js` and then apply the register extension before doing the import or loading the bundle as a script:\n\n  ```html\n    <script src=\"traceur-runtime.js\"></script>\n    <script src=\"es6-module-loader.js\"></script>\n    <script>\n      /*\n       * This should be a separate external script\n       * Register function is included from https://github.com/systemjs/systemjs/blob/master/lib/extension-register.js\n       */\n      function register(loader) { \n        // ...\n      }\n\n      // this needs to be added to apply the extension\n      register(System);\n    </script>\n\n    <!-- now include the bundle -->\n    <script src=\"app-build.js\"></script>\n\n    <!-- now we can import and get modules from the bundle -->\n    <script>\n      System.import('app/app');\n    </script>\n  ```\n\n* Note that `app-build.js` must be at the base-level for this to work.\n* Also, the name we import, `app/app` must be the same name given to Traceur's compiler.\n\n#### Building into separate files\n\nWe can also build separate files with:\n\n```\n  traceur --dir app app-build --modules=instantiate\n```\n\nWith the above, we can load from the separate files identical to loading ES6.\n\n### NodeJS Usage\n\n```\n  npm install es6-module-loader\n```\n\nFor use in NodeJS, the `Loader` and `System` globals are provided as exports:\n\nindex.js:\n```javascript\n  var System = require('es6-module-loader').System;\n\n  System.import('some-module').then(function(m) {\n    console.log(m.p);\n  });\n```\n\nsome-module.js:\n```javascript\n  export var p = 'NodeJS test';\n```\n\nRunning the application:\n```\n> node index.js\nNodeJS test\n```\n\n### Tracing API\n\nThis is not in the specification, but is provided since it is such a natural extension of loading and not much code at all.\n\nEnable tracing and start importing modules:\n\n```javascript\n  loader.trace = true;\n  loader.execute = true; // optional, disables execution of module bodies\n\n  loader.import('some/module').then(function() {\n    /*\n      Now we have:\n      \n        loader.loads['some/module'] == {\n          name: 'some/module',\n          deps: ['./unnormalized', 'deps'],\n          depMap: {\n            './unnormalized': 'normalized',\n            'deps': 'deps'\n          },\n          address: '/resolvedURL',\n          metadata: { metadata object from load },\n          source: 'translated source code string',\n          kind: 'dynamic' (instantiated) or 'declarative' (ES6 module pipeline)\n        }\n\n      With the dependency load records\n        loader.loads['normalized']\n        loader.loads['deps']\n      also set.\n    */\n  });\n```\n\nThen start importing modules\n\n### Extending the Loader\n\nThe loader in its default state provides only ES6 loading.\n\nWe can extend it to load AMD, CommonJS and global scripts as well as various other custom functionality through the loader hooks.\n\n[Read the wiki on extending the loader here](https://github.com/ModuleLoader/es6-module-loader/wiki/Extending-the-ES6-Loader).\n\n### Specification Notes\n\nSee the source of https://github.com/ModuleLoader/es6-module-loader/blob/master/lib/es6-module-loader.js, which contains comments detailing the exact specification notes and design decisions.\n\nTo follow the current the specification changes, see the marked issues https://github.com/ModuleLoader/es6-module-loader/issues?labels=specification&page=1&state=open.\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/grunt).\n\n_Also, please don't edit files in the \"dist\" subdirectory as they are generated via grunt. You'll find source code in the \"lib\" subdirectory!_\n\n## Credit\nCopyright (c) 2014 Luke Hoban, Addy Osmani, Guy Bedford\n\n## License\nLicensed under the MIT license.\n"
  },
  {
    "path": "client/components/es6-module-loader/bower.json",
    "content": "{\n  \"name\": \"es6-module-loader\",\n  \"version\": \"0.10.0\",\n  \"description\": \"An ES6 Module Loader polyfill based on the latest spec.\",\n  \"homepage\": \"https://github.com/ModuleLoader/es6-module-loader\",\n  \"main\": \"dist/es6-module-loader-sans-promises.js\",\n  \"dependencies\": {\n    \"traceur\": \"0.0.74\"\n  },\n  \"keywords\": [\n    \"es6\",\n    \"harmony\",\n    \"polyfill\",\n    \"modules\"\n  ],\n  \"ignore\": [\n    \"demo\",\n    \"lib\",\n    \"test\",\n    \"grunt.js\",\n    \"package.json\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/ModuleLoader/es6-module-loader.git\"\n  },\n  \"licenses\": [\n    {\n      \"type\": \"MIT\"\n    }\n  ]\n}\n"
  },
  {
    "path": "client/components/es6-module-loader/dist/es6-module-loader-sans-promises.js",
    "content": "/*\n *  es6-module-loader v0.9.4\n *  https://github.com/ModuleLoader/es6-module-loader\n *  Copyright (c) 2014 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT\n */\n\n!function(__global){function __eval(__source,__global,load){var __curRegister=System.register;System.register=function(a,b,c){\"string\"!=typeof a&&(c=b,b=a),load.declare=c,load.depsList=b};try{eval('(function() { var __moduleName = \"'+(load.name||\"\").replace('\"','\"')+'\"; '+__source+\" \\n }).call(__global);\")}catch(e){throw(\"SyntaxError\"==e.name||\"TypeError\"==e.name)&&(e.message=\"Evaluating \"+(load.name||load.address)+\"\\n\t\"+e.message),e}System.register=__curRegister}$__Object$getPrototypeOf=Object.getPrototypeOf||function(a){return a.__proto__};var $__Object$defineProperty;!function(){try{Object.defineProperty({},\"a\",{})&&($__Object$defineProperty=Object.defineProperty)}catch(a){$__Object$defineProperty=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}(),$__Object$create=Object.create||function(a,b){function c(){}if(c.prototype=a,\"object\"==typeof b)for(prop in b)b.hasOwnProperty(prop)&&(c[prop]=b[prop]);return new c},function(){function a(a){return{status:\"loading\",name:a,linkSets:[],dependencies:[],metadata:{}}}function b(a,b,c){return new A(g({step:c.address?\"fetch\":\"locate\",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function c(b,c,e,f){return new A(function(a){a(b.loaderObj.normalize(c,e,f))}).then(function(c){var e;if(b.modules[c])return e=a(c),e.status=\"linked\",e;for(var f=0,g=b.loads.length;g>f;f++)if(e=b.loads[f],e.name==c)return e;return e=a(c),b.loads.push(e),d(b,e),e})}function d(a,b){e(a,b,A.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function e(a,b,c){f(a,b,c.then(function(c){return\"loading\"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function f(a,b,d){d.then(function(c){return\"loading\"==b.status?a.loaderObj.translate({name:b.name,metadata:b.metadata,address:b.address,source:c}):void 0}).then(function(c){return\"loading\"==b.status?(b.source=c,a.loaderObj.instantiate({name:b.name,metadata:b.metadata,address:b.address,source:c})):void 0}).then(function(d){if(\"loading\"==b.status){if(void 0===d)b.address=b.address||\"<Anonymous Module \"+ ++D+\">\",b.isDeclarative=!0,a.loaderObj.parse(b);else{if(\"object\"!=typeof d)throw TypeError(\"Invalid instantiate return value\");b.depsList=d.deps||[],b.execute=d.execute,b.isDeclarative=!1}b.dependencies=[];for(var e=b.depsList,f=[],g=0,h=e.length;h>g;g++)(function(d,e){f.push(c(a,d,b.name,b.address).then(function(a){if(b.dependencies[e]={key:d,value:a.name},\"linked\"!=a.status)for(var c=b.linkSets.concat([]),f=0,g=c.length;g>f;f++)i(c[f],a)}))})(e[g],g);return A.all(f)}}).then(function(){b.status=\"loaded\";for(var a=b.linkSets.concat([]),c=0,d=a.length;d>c;c++)k(a[c],b)})[\"catch\"](function(a){b.status=\"failed\",b.exception=a;for(var c=b.linkSets.concat([]),d=0,e=c.length;e>d;d++)l(c[d],b,a)})}function g(b){return function(c){var g=b.loader,i=b.moduleName,j=b.step;if(g.modules[i])throw new TypeError('\"'+i+'\" already exists in the module table');for(var k=0,l=g.loads.length;l>k;k++)if(g.loads[k].name==i)throw new TypeError('\"'+i+'\" already loading');var m=a(i);m.metadata=b.moduleMetadata;var n=h(g,m);g.loads.push(m),c(n.done),\"locate\"==j?d(g,m):\"fetch\"==j?e(g,m,A.resolve(b.moduleAddress)):(m.address=b.moduleAddress,f(g,m,A.resolve(b.moduleSource)))}}function h(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new A(function(a,b){c.resolve=a,c.reject=b}),i(c,b),c}function i(a,b){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),\"loaded\"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){i(a,e.loads[g]);break}}}function j(a){var b=!1;try{p(a,function(c,d){l(a,c,d),b=!0})}catch(c){l(a,null,c),b=!0}return b}function k(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:E({}),evaluated:!0}:{module:E({})},b.status=\"linked\",m(a.loader,b)}return a.resolve(c)}var g=j(a);g||a.resolve(c)}}function l(a,b,c){var d=a.loader;a.loads[0].name!=b.name&&(c=w(c,'Error loading \"'+b.name+'\" from \"'+a.loads[0].name+'\" at '+(a.loads[0].address||\"<unknown>\")+\"\\n\")),c=w(c,'Error loading \"'+b.name+'\" at '+(b.address||\"<unknown>\")+\"\\n\");for(var e=a.loads.concat([]),f=0,g=e.length;g>f;f++){var b=e[f];d.loaderObj.failed=d.loaderObj.failed||[],-1==B.call(d.loaderObj.failed,b)&&d.loaderObj.failed.push(b);var h=B.call(b.linkSets,a);if(b.linkSets.splice(h,1),0==b.linkSets.length){var i=B.call(a.loader.loads,b);-1!=i&&a.loader.loads.splice(i,1)}}a.reject(c)}function m(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?\"declarative\":\"dynamic\"}}b.name&&(a.modules[b.name]=b.module);var d=B.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=B.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function n(a,b,c,d){if(c[a.groupIndex]=c[a.groupIndex]||[],-1==B.call(c[a.groupIndex],a)){c[a.groupIndex].push(a);for(var e=0,f=b.length;f>e;e++)for(var g=b[e],h=0;h<a.dependencies.length;h++)if(g.name==a.dependencies[h].value){var i=a.groupIndex+(g.isDeclarative!=a.isDeclarative);if(void 0===g.groupIndex||g.groupIndex<i){if(g.groupIndex&&(c[g.groupIndex].splice(B.call(c[g.groupIndex],g),1),0==c[g.groupIndex].length))throw new TypeError(\"Mixed dependency cycle detected\");g.groupIndex=i}n(g,b,c,d)}}}function o(a,b,c){try{var d=b.execute()}catch(e){return void c(b,e)}return d&&d instanceof y?d:void c(b,new TypeError(\"Execution must define a Module instance\"))}function p(a,b){var c=a.loader;if(a.loads.length){var d=[],e=a.loads[0];e.groupIndex=0,n(e,a.loads,d,c);for(var f=e.isDeclarative==d.length%2,g=d.length-1;g>=0;g--){for(var h=d[g],i=0;i<h.length;i++){var j=h[i];if(f)r(j,a.loads,c);else{var k=o(a,j,b);if(!k)return;j.module={name:j.name,module:k},j.status=\"linked\"}m(c,j)}f=!f}}}function q(a,b){var c=b.moduleRecords;return c[a]||(c[a]={name:a,dependencies:[],module:new y,importers:[]})}function r(a,b,c){if(!a.module){var d=a.module=q(a.name,c),e=a.module.module,f=a.declare.call(__global,function(a,b){d.locked=!0,e[a]=b;for(var c=0,f=d.importers.length;f>c;c++){var g=d.importers[c];if(!g.locked){var h=B.call(g.dependencies,d);g.setters[h](e)}}return d.locked=!1,b});d.setters=f.setters,d.execute=f.execute;for(var g=0,h=a.dependencies.length;h>g;g++){var i=a.dependencies[g].value,j=c.modules[i];if(!j)for(var k=0;k<b.length;k++)b[k].name==i&&(b[k].module?j=q(i,c):(r(b[k],b,c),j=b[k].module));j.importers?(d.dependencies.push(j),j.importers.push(d)):d.dependencies.push(null),d.setters[g]&&d.setters[g](j.module)}a.status=\"linked\"}}function s(a,b){return u(b.module,[],a),b.module.module}function t(a){try{a.execute.call(__global)}catch(b){return b}}function u(a,b,c){var d=v(a,b,c);if(d)throw d}function v(a,b,c){if(!a.evaluated&&a.dependencies){b.push(a);for(var d,e=a.dependencies,f=0,g=e.length;g>f;f++){var h=e[f];if(h&&-1==B.call(b,h)&&(d=v(h,b,c)))return d=w(d,\"Error evaluating \"+h.name+\"\\n\")}if(a.failed)return new Error(\"Module failed execution.\");if(!a.evaluated)return a.evaluated=!0,d=t(a),d?a.failed=!0:Object.preventExtensions&&Object.preventExtensions(a.module),a.execute=void 0,d}}function w(a,b){return a instanceof Error?a.message=b+a.message:a=b+a,a}function x(a){if(\"object\"!=typeof a)throw new TypeError(\"Options must be an object\");a.normalize&&(this.normalize=a.normalize),a.locate&&(this.locate=a.locate),a.fetch&&(this.fetch=a.fetch),a.translate&&(this.translate=a.translate),a.instantiate&&(this.instantiate=a.instantiate),this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},C(this,\"global\",{get:function(){return __global}})}function y(){}function z(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}var A=__global.Promise||require(\"when/es6-shim/Promise\");console.assert=console.assert||function(){};var B=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},C=$__Object$defineProperty,D=0;x.prototype={constructor:x,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError(\"Module is already loading.\");return z(this,a,new A(g({step:\"translate\",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},\"delete\":function(a){return this._loader.modules[a]?delete this._loader.modules[a]:!1},get:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},\"import\":function(a,c){var d=this;return A.resolve(d.normalize(a,c&&c.name,c&&c.address)).then(function(a){var e=d._loader;return e.modules[a]?(u(e.modules[a],[],e._loader),e.modules[a].module):e.importPromises[a]||z(d,a,b(e,a,c||{}).then(function(b){return delete e.importPromises[a],s(e,b)}))})},load:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this._loader),A.resolve(this._loader.modules[a].module)):this._loader.importPromises[a]||z(this,a,b(this._loader,a,{}))},module:function(b,c){var d=a();d.address=c&&c.address;var e=h(this._loader,d),g=A.resolve(b),i=this._loader,j=e.done.then(function(){return s(i,d)});return f(i,d,g),j},newModule:function(a){if(\"object\"!=typeof a)throw new TypeError(\"Expected object\");var b=new y;for(var c in a)!function(c){C(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]}})}(c);return Object.preventExtensions&&Object.preventExtensions(b),b},set:function(a,b){if(!(b instanceof y))throw new TypeError(\"Loader.set(\"+a+\", module) must be a module\");this._loader.modules[a]={module:b}},normalize:function(a){return a},locate:function(a){return a.name},fetch:function(){throw new TypeError(\"Fetch not implemented\")},translate:function(a){return a.source},parse:function(){throw new TypeError(\"Loader.parse is not implemented\")},instantiate:function(){}};var E=x.prototype.newModule;!function(){function a(a,b,c){try{return b.compile(a,c)}catch(d){throw d[0]}}var b;x.prototype.parse=function(c){if(!b)if(\"undefined\"==typeof window&&\"undefined\"==typeof WorkerGlobalScope)b=require(\"traceur\");else{if(!__global.traceur)throw new TypeError(\"Include Traceur for module syntax support\");b=__global.traceur}c.isDeclarative=!0;var d=this.traceurOptions||{};d.modules=\"instantiate\",d.script=!1,d.sourceMaps=!0,d.filename=c.address;var e=new b.Compiler(d),f=a(c.source,e,d.filename);if(!f)throw new Error(\"Error evaluating module \"+c.address);var g=e.getSourceMap();__global.btoa&&g&&(f+=\"\\n//# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(g)))+\"\\n\"),f='var __moduleAddress = \"'+c.address+'\";'+f,__eval(f,__global,c)}}(),\"object\"==typeof exports&&(module.exports=x),__global.Reflect=__global.Reflect||{},__global.Reflect.Loader=__global.Reflect.Loader||x,__global.Reflect.global=__global.Reflect.global||__global,__global.LoaderPolyfill=x}(),function(){function a(a){var b=String(a).replace(/^\\s+|\\s+$/g,\"\").match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);return b?{href:b[0]||\"\",protocol:b[1]||\"\",authority:b[2]||\"\",host:b[3]||\"\",hostname:b[4]||\"\",port:b[5]||\"\",pathname:b[6]||\"\",search:b[7]||\"\",hash:b[8]||\"\"}:null}function b(a){var b=[];return a.replace(/^(\\.\\.?(\\/|$))+/,\"\").replace(/\\/(\\.(\\/|$))+/g,\"/\").replace(/\\/\\.\\.$/,\"/../\").replace(/\\/?[^\\/]*/g,function(a){\"/..\"===a?b.pop():b.push(a)}),b.join(\"\").replace(/^\\//,\"/\"===a.charAt(0)?\"/\":\"\")}function c(c,d){return d=a(d||\"\"),c=a(c||\"\"),d&&c?(d.protocol||c.protocol)+(d.protocol||d.authority?d.authority:c.authority)+b(d.protocol||d.authority||\"/\"===d.pathname.charAt(0)?d.pathname:d.pathname?(c.authority&&!c.pathname?\"/\":\"\")+c.pathname.slice(0,c.pathname.lastIndexOf(\"/\")+1)+d.pathname:c.pathname)+(d.protocol||d.authority||d.pathname?d.search:d.search||c.search)+d.hash:null}function d(){document.removeEventListener(\"DOMContentLoaded\",d,!1),window.removeEventListener(\"load\",d,!1),e()}function e(){for(var a=document.getElementsByTagName(\"script\"),b=0;b<a.length;b++){var c=a[b];if(\"module\"==c.type){var d=c.innerHTML.substr(1);m.module(d)[\"catch\"](function(a){setTimeout(function(){throw a})})}}}var f,g=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,h=\"undefined\"!=typeof window&&!g,i=\"undefined\"!=typeof process&&!!process.platform.match(/^win/),j=__global.Promise||require(\"when/es6-shim/Promise\");if(\"undefined\"!=typeof XMLHttpRequest)f=function(a,b,c){function d(){b(f.responseText)}function e(){c(f.statusText+\": \"+a||\"XHR error\")}var f=new XMLHttpRequest,g=!0;if(!(\"withCredentials\"in f)){var h=/^(\\w+:)?\\/\\/([^\\/]+)/.exec(a);h&&(g=h[2]===window.location.host,h[1]&&(g&=h[1]===window.location.protocol))}g||\"undefined\"==typeof XDomainRequest||(f=new XDomainRequest,f.onload=d,f.onerror=e,f.ontimeout=e,f.onprogress=function(){},f.timeout=0),f.onreadystatechange=function(){4===f.readyState&&(200===f.status||0==f.status&&f.responseText?d():e())},f.open(\"GET\",a,!0),f.send(null)};else{if(\"undefined\"==typeof require)throw new TypeError(\"No environment fetch API available.\");var k;f=function(a,b,c){if(\"file:\"!=a.substr(0,5))throw\"Only file URLs of the form file: allowed running in Node.\";return k=k||require(\"fs\"),a=a.substr(5),i&&(a=a.replace(/\\//g,\"\\\\\")),k.readFile(a,function(a,d){return a?c(a):void b(d+\"\")})}}var l=function(a){function b(b){if(a.call(this,b||{}),\"undefined\"!=typeof location&&location.href){var c=__global.location.href.split(\"#\")[0].split(\"?\")[0];this.baseURL=c.substring(0,c.lastIndexOf(\"/\")+1)}else{if(\"undefined\"==typeof process||!process.cwd)throw new TypeError(\"No environment baseURL\");this.baseURL=\"file:\"+process.cwd()+\"/\",i&&(this.baseURL=this.baseURL.replace(/\\\\/g,\"/\"))}this.paths={\"*\":\"*.js\"}}return b.__proto__=null!==a?a:Function.prototype,b.prototype=$__Object$create(null!==a?a.prototype:null),$__Object$defineProperty(b.prototype,\"constructor\",{value:b}),$__Object$defineProperty(b.prototype,\"global\",{get:function(){return h?window:g?self:__global},enumerable:!1}),$__Object$defineProperty(b.prototype,\"strict\",{get:function(){return!0},enumerable:!1}),$__Object$defineProperty(b.prototype,\"normalize\",{value:function(a,b){if(\"string\"!=typeof a)throw new TypeError(\"Module name must be a string\");var c=a.split(\"/\");if(0==c.length)throw new TypeError(\"No module name provided\");var d=0,e=!1,f=0;if(\".\"==c[0]){if(d++,d==c.length)throw new TypeError('Illegal module name \"'+a+'\"');e=!0}else{for(;\"..\"==c[d];)if(d++,d==c.length)throw new TypeError('Illegal module name \"'+a+'\"');d&&(e=!0),f=d}for(var g=d;g<c.length;g++){var h=c[g];if(\"\"==h||\".\"==h||\"..\"==h)throw new TypeError('Illegal module name \"'+a+'\"')}if(!e)return a;{var i=[],j=(b||\"\").split(\"/\");j.length-1-f}return i=i.concat(j.splice(0,j.length-1-f)),i=i.concat(c.splice(d,c.length-d)),i.join(\"/\")},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,\"locate\",{value:function(a){var b,d=a.name,e=\"\";for(var f in this.paths){var g=f.split(\"*\");if(g.length>2)throw new TypeError(\"Only one wildcard in a path is permitted\");if(1==g.length){if(d==f&&f.length>e.length){e=f;break}}else d.substr(0,g[0].length)==g[0]&&d.substr(d.length-g[1].length)==g[1]&&(e=f,b=d.substr(g[0].length,d.length-g[1].length-g[0].length))}var i=this.paths[e];return b&&(i=i.replace(\"*\",b)),h&&(i=i.replace(/#/g,\"%23\")),c(this.baseURL,i)},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,\"fetch\",{value:function(a){var b=this;return new j(function(d,e){f(c(b.baseURL,a.address),function(a){d(a)},e)})},enumerable:!1,writable:!0}),b}(__global.LoaderPolyfill),m=new l;if(\"object\"==typeof exports&&(module.exports=m),__global.System=m,h&&\"undefined\"!=typeof document.getElementsByTagName){var n=document.getElementsByTagName(\"script\");n=n[n.length-1],\"complete\"===document.readyState?setTimeout(e):document.addEventListener&&(document.addEventListener(\"DOMContentLoaded\",d,!1),window.addEventListener(\"load\",d,!1)),n.getAttribute(\"data-init\")&&window[n.getAttribute(\"data-init\")]()}}()}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope?self:global);\n//# sourceMappingURL=es6-module-loader-sans-promises.js.map"
  },
  {
    "path": "client/components/es6-module-loader/dist/es6-module-loader-sans-promises.src.js",
    "content": "(function(__global) {\n  \n$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) {\n  return obj.__proto__;\n};\n\nvar $__Object$defineProperty;\n(function () {\n  try {\n    if (!!Object.defineProperty({}, 'a', {})) {\n      $__Object$defineProperty = Object.defineProperty;\n    }\n  } catch (e) {\n    $__Object$defineProperty = function (obj, prop, opt) {\n      try {\n        obj[prop] = opt.value || opt.get.call(obj);\n      }\n      catch(e) {}\n    }\n  }\n}());\n\n$__Object$create = Object.create || function(o, props) {\n  function F() {}\n  F.prototype = o;\n\n  if (typeof(props) === \"object\") {\n    for (prop in props) {\n      if (props.hasOwnProperty((prop))) {\n        F[prop] = props[prop];\n      }\n    }\n  }\n  return new F();\n};\n\n/*\n*********************************************************************************************\n\n  Loader Polyfill\n\n    - Implemented exactly to the 2014-07-18 Specification Draft.\n\n    - Functions are commented with their spec numbers, with spec differences commented.\n\n    - Spec bugs are commented in this code with links.\n\n    - Abstract functions have been combined where possible, and their associated functions\n      commented.\n\n    - Realm implementation is entirely omitted.\n\n    - Loader module table iteration currently not yet implemented.\n\n*********************************************************************************************\n*/\n\n// Some Helpers\n\n// logs a linkset snapshot for debugging\n/* function snapshot(loader) {\n  console.log('---Snapshot---');\n  for (var i = 0; i < loader.loads.length; i++) {\n    var load = loader.loads[i];\n    var linkSetLog = '  ' + load.name + ' (' + load.status + '): ';\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      linkSetLog += '{' + logloads(load.linkSets[j].loads) + '} ';\n    }\n    console.log(linkSetLog);\n  }\n  console.log('');\n}\nfunction logloads(loads) {\n  var log = '';\n  for (var k = 0; k < loads.length; k++)\n    log += loads[k].name + (k != loads.length - 1 ? ' ' : '');\n  return log;\n} */\n\n\n/* function checkInvariants() {\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2603#c1\n\n  var loads = System._loader.loads;\n  var linkSets = [];\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'Each load is loading or loaded');\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      var linkSet = load.linkSets[j];\n\n      for (var k = 0; k < linkSet.loads.length; k++)\n        console.assert(loads.indexOf(linkSet.loads[k]) != -1, 'linkSet loads are a subset of loader loads');\n\n      if (linkSets.indexOf(linkSet) == -1)\n        linkSets.push(linkSet);\n    }\n  }\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    for (var j = 0; j < linkSets.length; j++) {\n      var linkSet = linkSets[j];\n\n      if (linkSet.loads.indexOf(load) != -1)\n        console.assert(load.linkSets.indexOf(linkSet) != -1, 'linkSet contains load -> load contains linkSet');\n\n      if (load.linkSets.indexOf(linkSet) != -1)\n        console.assert(linkSet.loads.indexOf(load) != -1, 'load contains linkSet -> linkSet contains load');\n    }\n  }\n\n  for (var i = 0; i < linkSets.length; i++) {\n    var linkSet = linkSets[i];\n    for (var j = 0; j < linkSet.loads.length; j++) {\n      var load = linkSet.loads[j];\n\n      for (var k = 0; k < load.dependencies.length; k++) {\n        var depName = load.dependencies[k].value;\n        var depLoad;\n        for (var l = 0; l < loads.length; l++) {\n          if (loads[l].name != depName)\n            continue;\n          depLoad = loads[l];\n          break;\n        }\n\n        // loading records are allowed not to have their dependencies yet\n        // if (load.status != 'loading')\n        //  console.assert(depLoad, 'depLoad found');\n\n        // console.assert(linkSet.loads.indexOf(depLoad) != -1, 'linkset contains all dependencies');\n      }\n    }\n  }\n} */\n\n\n(function() {\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n  console.assert = console.assert || function() {};\n\n  // IE8 support\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, thisLen = this.length; i < thisLen; i++) {\n      if (this[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var defineProperty = $__Object$defineProperty;\n\n  // 15.2.3 - Runtime Semantics: Loader State\n\n  // 15.2.3.11\n  function createLoaderLoad(object) {\n    return {\n      // modules is an object for ES5 implementation\n      modules: {},\n      loads: [],\n      loaderObj: object\n    };\n  }\n\n  // 15.2.3.2 Load Records and LoadRequest Objects\n\n  // 15.2.3.2.1\n  function createLoad(name) {\n    return {\n      status: 'loading',\n      name: name,\n      linkSets: [],\n      dependencies: [],\n      metadata: {}\n    };\n  }\n\n  // 15.2.3.2.2 createLoadRequestObject, absorbed into calling functions\n\n  // 15.2.4\n\n  // 15.2.4.1\n  function loadModule(loader, name, options) {\n    return new Promise(asyncStartLoadPartwayThrough({\n      step: options.address ? 'fetch' : 'locate',\n      loader: loader,\n      moduleName: name,\n      // allow metadata for import https://bugs.ecmascript.org/show_bug.cgi?id=3091\n      moduleMetadata: options && options.metadata || {},\n      moduleSource: options.source,\n      moduleAddress: options.address\n    }));\n  }\n\n  // 15.2.4.2\n  function requestLoad(loader, request, refererName, refererAddress) {\n    // 15.2.4.2.1 CallNormalize\n    return new Promise(function(resolve, reject) {\n      resolve(loader.loaderObj.normalize(request, refererName, refererAddress));\n    })\n    // 15.2.4.2.2 GetOrCreateLoad\n    .then(function(name) {\n      var load;\n      if (loader.modules[name]) {\n        load = createLoad(name);\n        load.status = 'linked';\n        // https://bugs.ecmascript.org/show_bug.cgi?id=2795\n        // load.module = loader.modules[name];\n        return load;\n      }\n\n      for (var i = 0, l = loader.loads.length; i < l; i++) {\n        load = loader.loads[i];\n        if (load.name != name)\n          continue;\n        console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded');\n        return load;\n      }\n\n      load = createLoad(name);\n      loader.loads.push(load);\n\n      proceedToLocate(loader, load);\n\n      return load;\n    });\n  }\n\n  // 15.2.4.3\n  function proceedToLocate(loader, load) {\n    proceedToFetch(loader, load,\n      Promise.resolve()\n      // 15.2.4.3.1 CallLocate\n      .then(function() {\n        return loader.loaderObj.locate({ name: load.name, metadata: load.metadata });\n      })\n    );\n  }\n\n  // 15.2.4.4\n  function proceedToFetch(loader, load, p) {\n    proceedToTranslate(loader, load,\n      p\n      // 15.2.4.4.1 CallFetch\n      .then(function(address) {\n        // adjusted, see https://bugs.ecmascript.org/show_bug.cgi?id=2602\n        if (load.status != 'loading')\n          return;\n        load.address = address;\n\n        return loader.loaderObj.fetch({ name: load.name, metadata: load.metadata, address: address });\n      })\n    );\n  }\n\n  var anonCnt = 0;\n\n  // 15.2.4.5\n  function proceedToTranslate(loader, load, p) {\n    p\n    // 15.2.4.5.1 CallTranslate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      return loader.loaderObj.translate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.2 CallInstantiate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      load.source = source;\n      return loader.loaderObj.instantiate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.3 InstantiateSucceeded\n    .then(function(instantiateResult) {\n      if (load.status != 'loading')\n        return;\n\n      if (instantiateResult === undefined) {\n        load.address = load.address || '<Anonymous Module ' + ++anonCnt + '>';\n\n        // NB instead of load.kind, use load.isDeclarative\n        load.isDeclarative = true;\n        // parse sets load.declare, load.depsList\n        loader.loaderObj.parse(load);\n      }\n      else if (typeof instantiateResult == 'object') {\n        load.depsList = instantiateResult.deps || [];\n        load.execute = instantiateResult.execute;\n        load.isDeclarative = false;\n      }\n      else\n        throw TypeError('Invalid instantiate return value');\n\n      // 15.2.4.6 ProcessLoadDependencies\n      load.dependencies = [];\n      var depsList = load.depsList;\n\n      var loadPromises = [];\n      for (var i = 0, l = depsList.length; i < l; i++) (function(request, index) {\n        loadPromises.push(\n          requestLoad(loader, request, load.name, load.address)\n\n          // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)\n          .then(function(depLoad) {\n\n            console.assert(!load.dependencies.some(function(dep) {\n              return dep.key == request;\n            }), 'not already a dependency');\n\n            // adjusted from spec to maintain dependency order\n            // this is due to the System.register internal implementation needs\n            load.dependencies[index] = {\n              key: request,\n              value: depLoad.name\n            };\n\n            if (depLoad.status != 'linked') {\n              var linkSets = load.linkSets.concat([]);\n              for (var i = 0, l = linkSets.length; i < l; i++)\n                addLoadToLinkSet(linkSets[i], depLoad);\n            }\n\n            // console.log('AddDependencyLoad ' + depLoad.name + ' for ' + load.name);\n            // snapshot(loader);\n          })\n        );\n      })(depsList[i], i);\n\n      return Promise.all(loadPromises);\n    })\n\n    // 15.2.4.6.2 LoadSucceeded\n    .then(function() {\n      // console.log('LoadSucceeded ' + load.name);\n      // snapshot(loader);\n\n      console.assert(load.status == 'loading', 'is loading');\n\n      load.status = 'loaded';\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++)\n        updateLinkSetOnLoad(linkSets[i], load);\n    })\n\n    // 15.2.4.5.4 LoadFailed\n    ['catch'](function(exc) {\n      console.assert(load.status == 'loading', 'is loading on fail');\n      load.status = 'failed';\n      load.exception = exc;\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++) {\n        linkSetFailed(linkSets[i], load, exc);\n      }\n\n      console.assert(load.linkSets.length == 0, 'linkSets not removed');\n    });\n  }\n\n  // 15.2.4.7 PromiseOfStartLoadPartwayThrough absorbed into calling functions\n\n  // 15.2.4.7.1\n  function asyncStartLoadPartwayThrough(stepState) {\n    return function(resolve, reject) {\n      var loader = stepState.loader;\n      var name = stepState.moduleName;\n      var step = stepState.step;\n\n      if (loader.modules[name])\n        throw new TypeError('\"' + name + '\" already exists in the module table');\n\n      // NB this still seems wrong for LoadModule as we may load a dependency\n      // of another module directly before it has finished loading.\n      // see https://bugs.ecmascript.org/show_bug.cgi?id=2994\n      for (var i = 0, l = loader.loads.length; i < l; i++)\n        if (loader.loads[i].name == name)\n          throw new TypeError('\"' + name + '\" already loading');\n\n      var load = createLoad(name);\n\n      load.metadata = stepState.moduleMetadata;\n\n      var linkSet = createLinkSet(loader, load);\n\n      loader.loads.push(load);\n\n      resolve(linkSet.done);\n\n      if (step == 'locate')\n        proceedToLocate(loader, load);\n\n      else if (step == 'fetch')\n        proceedToFetch(loader, load, Promise.resolve(stepState.moduleAddress));\n\n      else {\n        console.assert(step == 'translate', 'translate step');\n        load.address = stepState.moduleAddress;\n        proceedToTranslate(loader, load, Promise.resolve(stepState.moduleSource));\n      }\n    }\n  }\n\n  // Declarative linking functions run through alternative implementation:\n  // 15.2.5.1.1 CreateModuleLinkageRecord not implemented\n  // 15.2.5.1.2 LookupExport not implemented\n  // 15.2.5.1.3 LookupModuleDependency not implemented\n\n  // 15.2.5.2.1\n  function createLinkSet(loader, startingLoad) {\n    var linkSet = {\n      loader: loader,\n      loads: [],\n      startingLoad: startingLoad, // added see spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n      loadingCount: 0\n    };\n    linkSet.done = new Promise(function(resolve, reject) {\n      linkSet.resolve = resolve;\n      linkSet.reject = reject;\n    });\n    addLoadToLinkSet(linkSet, startingLoad);\n    return linkSet;\n  }\n  // 15.2.5.2.2\n  function addLoadToLinkSet(linkSet, load) {\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set');\n\n    for (var i = 0, l = linkSet.loads.length; i < l; i++)\n      if (linkSet.loads[i] == load)\n        return;\n\n    linkSet.loads.push(load);\n    load.linkSets.push(linkSet);\n\n    // adjustment, see https://bugs.ecmascript.org/show_bug.cgi?id=2603\n    if (load.status != 'loaded') {\n      linkSet.loadingCount++;\n    }\n\n    var loader = linkSet.loader;\n\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var name = load.dependencies[i].value;\n\n      if (loader.modules[name])\n        continue;\n\n      for (var j = 0, d = loader.loads.length; j < d; j++) {\n        if (loader.loads[j].name != name)\n          continue;\n\n        addLoadToLinkSet(linkSet, loader.loads[j]);\n        break;\n      }\n    }\n    // console.log('add to linkset ' + load.name);\n    // snapshot(linkSet.loader);\n  }\n\n  // linking errors can be generic or load-specific\n  // this is necessary for debugging info\n  function doLink(linkSet) {\n    var error = false;\n    try {\n      link(linkSet, function(load, exc) {\n        linkSetFailed(linkSet, load, exc);\n        error = true;\n      });\n    }\n    catch(e) {\n      linkSetFailed(linkSet, null, e);\n      error = true;\n    }\n    return error;\n  }\n\n  // 15.2.5.2.3\n  function updateLinkSetOnLoad(linkSet, load) {\n    // console.log('update linkset on load ' + load.name);\n    // snapshot(linkSet.loader);\n\n    console.assert(load.status == 'loaded' || load.status == 'linked', 'loaded or linked');\n\n    linkSet.loadingCount--;\n\n    if (linkSet.loadingCount > 0)\n      return;\n\n    // adjusted for spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n    var startingLoad = linkSet.startingLoad;\n\n    // non-executing link variation for loader tracing\n    // on the server. Not in spec.\n    /***/\n    if (linkSet.loader.loaderObj.execute === false) {\n      var loads = [].concat(linkSet.loads);\n      for (var i = 0, l = loads.length; i < l; i++) {\n        var load = loads[i];\n        load.module = !load.isDeclarative ? {\n          module: _newModule({})\n        } : {\n          name: load.name,\n          module: _newModule({}),\n          evaluated: true\n        };\n        load.status = 'linked';\n        finishLoad(linkSet.loader, load);\n      }\n      return linkSet.resolve(startingLoad);\n    }\n    /***/\n\n    var abrupt = doLink(linkSet);\n\n    if (abrupt)\n      return;\n\n    console.assert(linkSet.loads.length == 0, 'loads cleared');\n\n    linkSet.resolve(startingLoad);\n  }\n\n  // 15.2.5.2.4\n  function linkSetFailed(linkSet, load, exc) {\n    var loader = linkSet.loader;\n\n    if (linkSet.loads[0].name != load.name)\n      exc = addToError(exc, 'Error loading \"' + load.name + '\" from \"' + linkSet.loads[0].name + '\" at ' + (linkSet.loads[0].address || '<unknown>') + '\\n');\n\n    exc = addToError(exc, 'Error loading \"' + load.name + '\" at ' + (load.address || '<unknown>') + '\\n');\n\n    var loads = linkSet.loads.concat([]);\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var load = loads[i];\n\n      // store all failed load records\n      loader.loaderObj.failed = loader.loaderObj.failed || [];\n      if (indexOf.call(loader.loaderObj.failed, load) == -1)\n        loader.loaderObj.failed.push(load);\n\n      var linkIndex = indexOf.call(load.linkSets, linkSet);\n      console.assert(linkIndex != -1, 'link not present');\n      load.linkSets.splice(linkIndex, 1);\n      if (load.linkSets.length == 0) {\n        var globalLoadsIndex = indexOf.call(linkSet.loader.loads, load);\n        if (globalLoadsIndex != -1)\n          linkSet.loader.loads.splice(globalLoadsIndex, 1);\n      }\n    }\n    linkSet.reject(exc);\n  }\n\n  // 15.2.5.2.5\n  function finishLoad(loader, load) {\n    // add to global trace if tracing\n    if (loader.loaderObj.trace) {\n      if (!loader.loaderObj.loads)\n        loader.loaderObj.loads = {};\n      var depMap = {};\n      load.dependencies.forEach(function(dep) {\n        depMap[dep.key] = dep.value;\n      });\n      loader.loaderObj.loads[load.name] = {\n        name: load.name,\n        deps: load.dependencies.map(function(dep){ return dep.key }),\n        depMap: depMap,\n        address: load.address,\n        metadata: load.metadata,\n        source: load.source,\n        kind: load.isDeclarative ? 'declarative' : 'dynamic'\n      };\n    }\n    // if not anonymous, add to the module table\n    if (load.name) {\n      console.assert(!loader.modules[load.name], 'load not in module table');\n      loader.modules[load.name] = load.module;\n    }\n    var loadIndex = indexOf.call(loader.loads, load);\n    if (loadIndex != -1)\n      loader.loads.splice(loadIndex, 1);\n    for (var i = 0, l = load.linkSets.length; i < l; i++) {\n      loadIndex = indexOf.call(load.linkSets[i].loads, load);\n      if (loadIndex != -1)\n        load.linkSets[i].loads.splice(loadIndex, 1);\n    }\n    load.linkSets.splice(0, load.linkSets.length);\n  }\n\n  // 15.2.5.3 Module Linking Groups\n\n  // 15.2.5.3.2 BuildLinkageGroups alternative implementation\n  // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755)\n  // 1. groups is an already-interleaved array of group kinds\n  // 2. load.groupIndex is set when this function runs\n  // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic)\n  function buildLinkageGroups(load, loads, groups, loader) {\n    groups[load.groupIndex] = groups[load.groupIndex] || [];\n\n    // if the load already has a group index and its in its group, its already been done\n    // this logic naturally handles cycles\n    if (indexOf.call(groups[load.groupIndex], load) != -1)\n      return;\n\n    // now add it to the group to indicate its been seen\n    groups[load.groupIndex].push(load);\n\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var loadDep = loads[i];\n\n      // dependencies not found are already linked\n      for (var j = 0; j < load.dependencies.length; j++) {\n        if (loadDep.name == load.dependencies[j].value) {\n          // by definition all loads in linkset are loaded, not linked\n          console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!');\n\n          // if it is a group transition, the index of the dependency has gone up\n          // otherwise it is the same as the parent\n          var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative);\n\n          // the group index of an entry is always the maximum\n          if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) {\n\n            // if already in a group, remove from the old group\n            if (loadDep.groupIndex) {\n              groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1);\n\n              // if the old group is empty, then we have a mixed depndency cycle\n              if (groups[loadDep.groupIndex].length == 0)\n                throw new TypeError(\"Mixed dependency cycle detected\");\n            }\n\n            loadDep.groupIndex = loadDepGroupIndex;\n          }\n\n          buildLinkageGroups(loadDep, loads, groups, loader);\n        }\n      }\n    }\n  }\n\n  function doDynamicExecute(linkSet, load, linkError) {\n    try {\n      var module = load.execute();\n    }\n    catch(e) {\n      linkError(load, e);\n      return;\n    }\n    if (!module || !(module instanceof Module))\n      linkError(load, new TypeError('Execution must define a Module instance'));\n    else\n      return module;\n  }\n\n  // 15.2.5.4\n  function link(linkSet, linkError) {\n\n    var loader = linkSet.loader;\n\n    if (!linkSet.loads.length)\n      return;\n\n    // console.log('linking {' + logloads(linkSet.loads) + '}');\n    // snapshot(loader);\n\n    // 15.2.5.3.1 LinkageGroups alternative implementation\n\n    // build all the groups\n    // because the first load represents the top of the tree\n    // for a given linkset, we can work down from there\n    var groups = [];\n    var startingLoad = linkSet.loads[0];\n    startingLoad.groupIndex = 0;\n    buildLinkageGroups(startingLoad, linkSet.loads, groups, loader);\n\n    // determine the kind of the bottom group\n    var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2;\n\n    // run through the groups from bottom to top\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var load = group[j];\n\n        // 15.2.5.5 LinkDeclarativeModules adjusted\n        if (curGroupDeclarative) {\n          linkDeclarativeModule(load, linkSet.loads, loader);\n        }\n        // 15.2.5.6 LinkDynamicModules adjusted\n        else {\n          var module = doDynamicExecute(linkSet, load, linkError);\n          if (!module)\n            return;\n          load.module = {\n            name: load.name,\n            module: module\n          };\n          load.status = 'linked';\n        }\n        finishLoad(loader, load);\n      }\n\n      // alternative current kind for next loop\n      curGroupDeclarative = !curGroupDeclarative;\n    }\n  }\n\n\n  // custom module records for binding graph\n  // store linking module records in a separate table\n  function getOrCreateModuleRecord(name, loader) {\n    var moduleRecords = loader.moduleRecords;\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      module: new Module(), // start from an empty module and extend\n      importers: []\n    });\n  }\n\n  // custom declarative linking function\n  function linkDeclarativeModule(load, loads, loader) {\n    if (load.module)\n      return;\n\n    var module = load.module = getOrCreateModuleRecord(load.name, loader);\n    var moduleObj = load.module.module;\n\n    var registryEntry = load.declare.call(__global, function(name, value) {\n      // NB This should be an Object.defineProperty, but that is very slow.\n      //    By disaling this module write-protection we gain performance.\n      //    It could be useful to allow an option to enable or disable this.\n      module.locked = true;\n      moduleObj[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](moduleObj);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n\n    // setup our setters and execution function\n    module.setters = registryEntry.setters;\n    module.execute = registryEntry.execute;\n\n    // now link all the module dependencies\n    // amending the depMap as we go\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var depName = load.dependencies[i].value;\n      var depModule = loader.modules[depName];\n\n      // if dependency not already in the module registry\n      // then try and link it now\n      if (!depModule) {\n        // get the dependency load record\n        for (var j = 0; j < loads.length; j++) {\n          if (loads[j].name != depName)\n            continue;\n\n          // only link if already not already started linking (stops at circular / dynamic)\n          if (!loads[j].module) {\n            linkDeclarativeModule(loads[j], loads, loader);\n            depModule = loads[j].module;\n          }\n          // if circular, create the module record\n          else {\n            depModule = getOrCreateModuleRecord(depName, loader);\n          }\n        }\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule.importers) {\n        module.dependencies.push(depModule);\n        depModule.importers.push(module);\n      }\n      else {\n        // track dynamic records as null module records as already linked\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depModule.module);\n    }\n\n    load.status = 'linked';\n  }\n\n\n\n  // 15.2.5.5.1 LinkImports not implemented\n  // 15.2.5.7 ResolveExportEntries not implemented\n  // 15.2.5.8 ResolveExports not implemented\n  // 15.2.5.9 ResolveExport not implemented\n  // 15.2.5.10 ResolveImportEntries not implemented\n\n  // 15.2.6.1\n  function evaluateLoadedModule(loader, load) {\n    console.assert(load.status == 'linked', 'is linked ' + load.name);\n\n    doEnsureEvaluated(load.module, [], loader);\n    return load.module.module;\n  }\n\n  /*\n   * Module Object non-exotic for ES5:\n   *\n   * module.module        bound module object\n   * module.execute       execution function for module\n   * module.dependencies  list of module objects for dependencies\n   * See getOrCreateModuleRecord for all properties\n   *\n   */\n  function doExecute(module) {\n    try {\n      module.execute.call(__global);\n    }\n    catch(e) {\n      return e;\n    }\n  }\n\n  // propogate execution errors\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2993\n  function doEnsureEvaluated(module, seen, loader) {\n    var err = ensureEvaluated(module, seen, loader);\n    if (err)\n      throw err;\n  }\n  // 15.2.6.2 EnsureEvaluated adjusted\n  function ensureEvaluated(module, seen, loader) {\n    if (module.evaluated || !module.dependencies)\n      return;\n\n    seen.push(module);\n\n    var deps = module.dependencies;\n    var err;\n\n    for (var i = 0, l = deps.length; i < l; i++) {\n      var dep = deps[i];\n      // dynamic dependencies are empty in module.dependencies\n      // as they are already linked\n      if (!dep)\n        continue;\n      if (indexOf.call(seen, dep) == -1) {\n        err = ensureEvaluated(dep, seen, loader);\n        // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996\n        if (err) {\n          err = addToError(err, 'Error evaluating ' + dep.name + '\\n');\n          return err;\n        }\n      }\n    }\n\n    if (module.failed)\n      return new Error('Module failed execution.');\n\n    if (module.evaluated)\n      return;\n\n    module.evaluated = true;\n    err = doExecute(module);\n    if (err) {\n      module.failed = true;\n    }\n    else if (Object.preventExtensions) {\n      // spec variation\n      // we don't create a new module here because it was created and ammended\n      // we just disable further extensions instead\n      Object.preventExtensions(module.module);\n    }\n\n    module.execute = undefined;\n    return err;\n  }\n\n  function addToError(err, msg) {\n    if (err instanceof Error)\n      err.message = msg + err.message;\n    else\n      err = msg + err;\n    return err;\n  }\n\n  // 26.3 Loader\n\n  // 26.3.1.1\n  function Loader(options) {\n    if (typeof options != 'object')\n      throw new TypeError('Options must be an object');\n\n    if (options.normalize)\n      this.normalize = options.normalize;\n    if (options.locate)\n      this.locate = options.locate;\n    if (options.fetch)\n      this.fetch = options.fetch;\n    if (options.translate)\n      this.translate = options.translate;\n    if (options.instantiate)\n      this.instantiate = options.instantiate;\n\n    this._loader = {\n      loaderObj: this,\n      loads: [],\n      modules: {},\n      importPromises: {},\n      moduleRecords: {}\n    };\n\n    // 26.3.3.6\n    defineProperty(this, 'global', {\n      get: function() {\n        return __global;\n      }\n    });\n\n    // 26.3.3.13 realm not implemented\n  }\n\n  function Module() {}\n\n  // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601\n  function createImportPromise(loader, name, promise) {\n    var importPromises = loader._loader.importPromises;\n    return importPromises[name] = promise.then(function(m) {\n      importPromises[name] = undefined;\n      return m;\n    }, function(e) {\n      importPromises[name] = undefined;\n      throw e;\n    });\n  }\n\n  Loader.prototype = {\n    // 26.3.3.1\n    constructor: Loader,\n    // 26.3.3.2\n    define: function(name, source, options) {\n      // check if already defined\n      if (this._loader.importPromises[name])\n        throw new TypeError('Module is already loading.');\n      return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({\n        step: 'translate',\n        loader: this._loader,\n        moduleName: name,\n        moduleMetadata: options && options.metadata || {},\n        moduleSource: source,\n        moduleAddress: options && options.address\n      })));\n    },\n    // 26.3.3.3\n    'delete': function(name) {\n      return this._loader.modules[name] ? delete this._loader.modules[name] : false;\n    },\n    // 26.3.3.4 entries not implemented\n    // 26.3.3.5\n    get: function(key) {\n      if (!this._loader.modules[key])\n        return;\n      doEnsureEvaluated(this._loader.modules[key], [], this);\n      return this._loader.modules[key].module;\n    },\n    // 26.3.3.7\n    has: function(name) {\n      return !!this._loader.modules[name];\n    },\n    // 26.3.3.8\n    'import': function(name, options) {\n      // run normalize first\n      var loaderObj = this;\n\n      // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659\n      return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address))\n      .then(function(name) {\n        var loader = loaderObj._loader;\n\n        if (loader.modules[name]) {\n          doEnsureEvaluated(loader.modules[name], [], loader._loader);\n          return loader.modules[name].module;\n        }\n\n        return loader.importPromises[name] || createImportPromise(loaderObj, name,\n          loadModule(loader, name, options || {})\n          .then(function(load) {\n            delete loader.importPromises[name];\n            return evaluateLoadedModule(loader, load);\n          }));\n      });\n    },\n    // 26.3.3.9 keys not implemented\n    // 26.3.3.10\n    load: function(name, options) {\n      if (this._loader.modules[name]) {\n        doEnsureEvaluated(this._loader.modules[name], [], this._loader);\n        return Promise.resolve(this._loader.modules[name].module);\n      }\n      return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {}));\n    },\n    // 26.3.3.11\n    module: function(source, options) {\n      var load = createLoad();\n      load.address = options && options.address;\n      var linkSet = createLinkSet(this._loader, load);\n      var sourcePromise = Promise.resolve(source);\n      var loader = this._loader;\n      var p = linkSet.done.then(function() {\n        return evaluateLoadedModule(loader, load);\n      });\n      proceedToTranslate(loader, load, sourcePromise);\n      return p;\n    },\n    // 26.3.3.12\n    newModule: function (obj) {\n      if (typeof obj != 'object')\n        throw new TypeError('Expected object');\n\n      // we do this to be able to tell if a module is a module privately in ES5\n      // by doing m instanceof Module\n      var m = new Module();\n\n      for (var key in obj) {\n        (function (key) {\n          defineProperty(m, key, {\n            configurable: false,\n            enumerable: true,\n            get: function () {\n              return obj[key];\n            }\n          });\n        })(key);\n      }\n\n      if (Object.preventExtensions)\n        Object.preventExtensions(m);\n\n      return m;\n    },\n    // 26.3.3.14\n    set: function(name, module) {\n      if (!(module instanceof Module))\n        throw new TypeError('Loader.set(' + name + ', module) must be a module');\n      this._loader.modules[name] = {\n        module: module\n      };\n    },\n    // 26.3.3.15 values not implemented\n    // 26.3.3.16 @@iterator not implemented\n    // 26.3.3.17 @@toStringTag not implemented\n\n    // 26.3.3.18.1\n    normalize: function(name, referrerName, referrerAddress) {\n      return name;\n    },\n    // 26.3.3.18.2\n    locate: function(load) {\n      return load.name;\n    },\n    // 26.3.3.18.3\n    fetch: function(load) {\n      throw new TypeError('Fetch not implemented');\n    },\n    // 26.3.3.18.4\n    translate: function(load) {\n      return load.source;\n    },\n    parse: function(load) {\n      throw new TypeError('Loader.parse is not implemented');\n    },\n    // 26.3.3.18.5\n    instantiate: function(load) {\n    }\n  };\n\n  var _newModule = Loader.prototype.newModule;\n\n\n  /*\n   * Traceur-specific Parsing Code for Loader\n   */\n  (function() {\n    // parse function is used to parse a load record\n    // Returns an array of ModuleSpecifiers\n    var traceur;\n\n    function doCompile(source, compiler, filename) {\n      try {\n        return compiler.compile(source, filename);\n      }\n      catch(e) {\n        // traceur throws an error array\n        throw e[0];\n      }\n    }\n    Loader.prototype.parse = function(load) {\n      if (!traceur) {\n        if (typeof window == 'undefined' &&\n           typeof WorkerGlobalScope == 'undefined')\n          traceur = require('traceur');\n        else if (__global.traceur)\n          traceur = __global.traceur;\n        else\n          throw new TypeError('Include Traceur for module syntax support');\n      }\n\n      console.assert(load.source, 'Non-empty source');\n\n      var depsList;\n\n      load.isDeclarative = true;\n\n      var options = this.traceurOptions || {};\n      options.modules = 'instantiate';\n      options.script = false;\n      options.sourceMaps = true;\n      options.filename = load.address;\n\n      var compiler = new traceur.Compiler(options);\n\n      var source = doCompile(load.source, compiler, options.filename);\n\n      if (!source)\n        throw new Error('Error evaluating module ' + load.address);\n\n      var sourceMap = compiler.getSourceMap();\n\n      if (__global.btoa && sourceMap)\n        source += '\\n//# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(sourceMap))) + '\\n';\n\n      source = 'var __moduleAddress = \"' + load.address + '\";' + source;\n\n      __eval(source, __global, load);\n    }\n  })();\n\n  if (typeof exports === 'object')\n    module.exports = Loader;\n\n  __global.Reflect = __global.Reflect || {};\n  __global.Reflect.Loader = __global.Reflect.Loader || Loader;\n  __global.Reflect.global = __global.Reflect.global || __global;\n  __global.LoaderPolyfill = Loader;\n\n})();\n\n/*\n*********************************************************************************************\n\n  System Loader Implementation\n\n    - Implemented to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js\n\n    - <script type=\"module\"> supported\n\n*********************************************************************************************\n*/\n\n\n\n(function() {\n  var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined' && !isWorker;\n  var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/);\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n\n  // Helpers\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n\n  function removeDotSegments(input) {\n    var output = [];\n    input.replace(/^(\\.\\.?(\\/|$))+/, '')\n      .replace(/\\/(\\.(\\/|$))+/g, '/')\n      .replace(/\\/\\.\\.$/, '/../')\n      .replace(/\\/?[^\\/]*/g, function (p) {\n        if (p === '/..')\n          output.pop();\n        else\n          output.push(p);\n    });\n    return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n  }\n\n  function toAbsoluteURL(base, href) {\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  var fetchTextFromURL;\n\n  if (typeof XMLHttpRequest != 'undefined') {\n    fetchTextFromURL = function(url, fulfill, reject) {\n      var xhr = new XMLHttpRequest();\n      var sameDomain = true;\n      if (!('withCredentials' in xhr)) {\n        // check if same domain\n        var domainCheck = /^(\\w+:)?\\/\\/([^\\/]+)/.exec(url);\n        if (domainCheck) {\n          sameDomain = domainCheck[2] === window.location.host;\n          if (domainCheck[1])\n            sameDomain &= domainCheck[1] === window.location.protocol;\n        }\n      }\n      if (!sameDomain && typeof XDomainRequest != 'undefined') {\n        xhr = new XDomainRequest();\n        xhr.onload = load;\n        xhr.onerror = error;\n        xhr.ontimeout = error;\n        // IE8/IE9 bug may hang requests unless all properties are defined. \n        // See: http://stackoverflow.com/a/9928073/3949247\n        xhr.onprogress = function() {};\n        xhr.timeout = 0;\n      }\n      function load() {\n        fulfill(xhr.responseText);\n      }\n      function error() {\n        reject(xhr.statusText + ': ' + url || 'XHR error');\n      }\n\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) {\n            load();\n          } else {\n            error();\n          }\n        }\n      };\n      xhr.open(\"GET\", url, true);\n      xhr.send(null);\n    }\n  }\n  else if (typeof require != 'undefined') {\n    var fs;\n    fetchTextFromURL = function(url, fulfill, reject) {\n      if (url.substr(0, 5) != 'file:')\n        throw 'Only file URLs of the form file: allowed running in Node.';\n      fs = fs || require('fs');\n      url = url.substr(5);\n      if (isWindows)\n        url = url.replace(/\\//g, '\\\\');\n      return fs.readFile(url, function(err, data) {\n        if (err)\n          return reject(err);\n        else\n          fulfill(data + '');\n      });\n    }\n  }\n  else {\n    throw new TypeError('No environment fetch API available.');\n  }\n\n  var SystemLoader = function($__super) {\n    function SystemLoader(options) {\n      $__super.call(this, options || {});\n\n      // Set default baseURL and paths\n      if (typeof location != 'undefined' && location.href) {\n        var href = __global.location.href.split('#')[0].split('?')[0];\n        this.baseURL = href.substring(0, href.lastIndexOf('/') + 1);\n      }\n      else if (typeof process != 'undefined' && process.cwd) {\n        this.baseURL = 'file:' + process.cwd() + '/';\n        if (isWindows)\n          this.baseURL = this.baseURL.replace(/\\\\/g, '/');\n      }\n      else {\n        throw new TypeError('No environment baseURL');\n      }\n      this.paths = { '*': '*.js' };\n    }\n\n    SystemLoader.__proto__ = ($__super !== null ? $__super : Function.prototype);\n    SystemLoader.prototype = $__Object$create(($__super !== null ? $__super.prototype : null));\n\n    $__Object$defineProperty(SystemLoader.prototype, \"constructor\", {\n      value: SystemLoader\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"global\", {\n      get: function() {\n        return isBrowser ? window : (isWorker ? self : __global);\n      },\n\n      enumerable: false\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"strict\", {\n      get: function() { return true; },\n      enumerable: false\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"normalize\", {\n      value: function(name, parentName, parentAddress) {\n        if (typeof name != 'string')\n          throw new TypeError('Module name must be a string');\n\n        var segments = name.split('/');\n\n        if (segments.length == 0)\n          throw new TypeError('No module name provided');\n\n        // current segment\n        var i = 0;\n        // is the module name relative\n        var rel = false;\n        // number of backtracking segments\n        var dotdots = 0;\n        if (segments[0] == '.') {\n          i++;\n          if (i == segments.length)\n            throw new TypeError('Illegal module name \"' + name + '\"');\n          rel = true;\n        }\n        else {\n          while (segments[i] == '..') {\n            i++;\n            if (i == segments.length)\n              throw new TypeError('Illegal module name \"' + name + '\"');\n          }\n          if (i)\n            rel = true;\n          dotdots = i;\n        }\n\n        for (var j = i; j < segments.length; j++) {\n          var segment = segments[j];\n          if (segment == '' || segment == '.' || segment == '..')\n            throw new TypeError('Illegal module name \"' + name + '\"');\n        }\n\n        if (!rel)\n          return name;\n\n        // build the full module name\n        var normalizedParts = [];\n        var parentParts = (parentName || '').split('/');\n        var normalizedLen = parentParts.length - 1 - dotdots;\n\n        normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots));\n        normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i));\n\n        return normalizedParts.join('/');\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"locate\", {\n      value: function(load) {\n        var name = load.name;\n\n        // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25\n\n        // most specific (longest) match wins\n        var pathMatch = '', wildcard;\n\n        // check to see if we have a paths entry\n        for (var p in this.paths) {\n          var pathParts = p.split('*');\n          if (pathParts.length > 2)\n            throw new TypeError('Only one wildcard in a path is permitted');\n\n          // exact path match\n          if (pathParts.length == 1) {\n            if (name == p && p.length > pathMatch.length) {\n              pathMatch = p;\n              break;\n            }\n          }\n\n          // wildcard path match\n          else {\n            if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) {\n              pathMatch = p;\n              wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length);\n            }\n          }\n        }\n\n        var outPath = this.paths[pathMatch];\n        if (wildcard)\n          outPath = outPath.replace('*', wildcard);\n\n        // percent encode just '#' in module names\n        // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238\n        // we should encode everything, but it breaks for servers that don't expect it \n        // like in (https://github.com/systemjs/systemjs/issues/168)\n        if (isBrowser)\n          outPath = outPath.replace(/#/g, '%23');\n\n        return toAbsoluteURL(this.baseURL, outPath);\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"fetch\", {\n      value: function(load) {\n        var self = this;\n        return new Promise(function(resolve, reject) {\n          fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) {\n            resolve(source);\n          }, reject);\n        });\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    return SystemLoader;\n  }(__global.LoaderPolyfill);\n\n  var System = new SystemLoader();\n\n  // note we have to export before runing \"init\" below\n  if (typeof exports === 'object')\n    module.exports = System;\n\n  __global.System = System;\n\n  // <script type=\"module\"> support\n  // allow a data-init function callback once loaded\n  if (isBrowser && typeof document.getElementsByTagName != 'undefined') {\n    var curScript = document.getElementsByTagName('script');\n    curScript = curScript[curScript.length - 1];\n\n    function completed() {\n      document.removeEventListener( \"DOMContentLoaded\", completed, false );\n      window.removeEventListener( \"load\", completed, false );\n      ready();\n    }\n\n    function ready() {\n      var scripts = document.getElementsByTagName('script');\n      for (var i = 0; i < scripts.length; i++) {\n        var script = scripts[i];\n        if (script.type == 'module') {\n          var source = script.innerHTML.substr(1);\n          System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); });\n        }\n      }\n    }\n\n    // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63\n    if (document.readyState === 'complete') {\n      setTimeout(ready);\n    }\n    else if (document.addEventListener) {\n      document.addEventListener('DOMContentLoaded', completed, false);\n      window.addEventListener('load', completed, false);\n    }\n\n    // run the data-init function on the script tag\n    if (curScript.getAttribute('data-init'))\n      window[curScript.getAttribute('data-init')]();\n  }\n})();\n\n\n// Define our eval outside of the scope of any other reference defined in this\n// file to avoid adding those references to the evaluation scope.\nfunction __eval(__source, __global, load) {\n  // Hijack System.register to set declare function\n  var __curRegister = System.register;\n  System.register = function(name, deps, declare) {\n    if (typeof name != 'string') {\n      declare = deps;\n      deps = name;\n    }\n    // store the registered declaration as load.declare\n    // store the deps as load.deps\n    load.declare = declare;\n    load.depsList = deps;\n  }\n  try {\n    eval('(function() { var __moduleName = \"' + (load.name || '').replace('\"', '\\\"') + '\"; ' + __source + ' \\n }).call(__global);');\n  }\n  catch(e) {\n    if (e.name == 'SyntaxError' || e.name == 'TypeError')\n      e.message = 'Evaluating ' + (load.name || load.address) + '\\n\\t' + e.message;\n    throw e;\n  }\n\n  System.register = __curRegister;\n}\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/es6-module-loader/dist/es6-module-loader.js",
    "content": "/*\n *  es6-module-loader v0.9.4\n *  https://github.com/ModuleLoader/es6-module-loader\n *  Copyright (c) 2014 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT\n */\n\n!function(a){\"object\"==typeof exports?module.exports=a():\"function\"==typeof define&&define.amd?define(a):\"undefined\"!=typeof window?window.Promise=a():\"undefined\"!=typeof global?global.Promise=a():\"undefined\"!=typeof self&&(self.Promise=a())}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error(\"Cannot find module '\"+g+\"'\")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){var c=a(\"../lib/decorators/unhandledRejection\"),d=c(a(\"../lib/Promise\"));b.exports=\"undefined\"!=typeof global?global.Promise=d:\"undefined\"!=typeof self?self.Promise=d:d},{\"../lib/Promise\":2,\"../lib/decorators/unhandledRejection\":4}],2:[function(b,c){!function(a){\"use strict\";a(function(a){var b=a(\"./makePromise\"),c=a(\"./Scheduler\"),d=a(\"./env\").asap;return b({scheduler:new c(d)})})}(\"function\"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{\"./Scheduler\":3,\"./env\":5,\"./makePromise\":6}],3:[function(b,c){!function(a){\"use strict\";a(function(){function a(a){this._async=a,this._running=!1,this._queue=new Array(65536),this._queueLen=0,this._afterQueue=new Array(16),this._afterQueueLen=0;var b=this;this.drain=function(){b._drain()}}return a.prototype.enqueue=function(a){this._queue[this._queueLen++]=a,this.run()},a.prototype.afterQueue=function(a){this._afterQueue[this._afterQueueLen++]=a,this.run()},a.prototype.run=function(){this._running||(this._running=!0,this._async(this.drain))},a.prototype._drain=function(){for(var a=0;a<this._queueLen;++a)this._queue[a].run(),this._queue[a]=void 0;for(this._queueLen=0,this._running=!1,a=0;a<this._afterQueueLen;++a)this._afterQueue[a].run(),this._afterQueue[a]=void 0;this._afterQueueLen=0},a})}(\"function\"==typeof a&&a.amd?a:function(a){c.exports=a()})},{}],4:[function(b,c){!function(a){\"use strict\";a(function(a){function b(a){var b=\"object\"==typeof a&&a.stack?a.stack:c(a);return a instanceof Error?b:b+\" (WARNING: non-Error used)\"}function c(a){var b=String(a);return\"[object Object]\"===b&&\"undefined\"!=typeof JSON&&(b=d(a,b)),b}function d(a,b){try{return JSON.stringify(a)}catch(a){return b}}function e(a){throw a}function f(){}var g=a(\"../env\").setTimer;return function(a){function d(a){a.handled||(o.push(a),l(\"Potentially unhandled rejection [\"+a.id+\"] \"+b(a.value)))}function h(a){var b=o.indexOf(a);b>=0&&(o.splice(b,1),m(\"Handled previous rejection [\"+a.id+\"] \"+c(a.value)))}function i(a,b){n.push(a,b),null===p&&(p=g(j,0))}function j(){for(p=null;n.length>0;)n.shift()(n.shift())}var k,l=f,m=f;\"undefined\"!=typeof console&&(k=console,l=\"undefined\"!=typeof k.error?function(a){k.error(a)}:function(a){k.log(a)},m=\"undefined\"!=typeof k.info?function(a){k.info(a)}:function(a){k.log(a)}),a.onPotentiallyUnhandledRejection=function(a){i(d,a)},a.onPotentiallyUnhandledRejectionHandled=function(a){i(h,a)},a.onFatalRejection=function(a){i(e,a.value)};var n=[],o=[],p=null;return a}})}(\"function\"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{\"../env\":5}],5:[function(b,c){!function(a){\"use strict\";a(function(a){function b(){return\"undefined\"!=typeof process&&null!==process&&\"function\"==typeof process.nextTick}function c(){return\"function\"==typeof MutationObserver&&MutationObserver||\"function\"==typeof WebKitMutationObserver&&WebKitMutationObserver}function d(a){function b(){var a=c;c=void 0,a()}var c,d=document.createTextNode(\"\"),e=new a(b);e.observe(d,{characterData:!0});var f=0;return function(a){c=a,d.data=f^=1}}var e,f=\"undefined\"!=typeof setTimeout&&setTimeout,g=function(a,b){return setTimeout(a,b)},h=function(a){return clearTimeout(a)},i=function(a){return f(a,0)};if(b())i=function(a){return process.nextTick(a)};else if(e=c())i=d(e);else if(!f){var j=a,k=j(\"vertx\");g=function(a,b){return k.setTimer(b,a)},h=k.cancelTimer,i=k.runOnLoop||k.runOnContext}return{setTimer:g,clearTimer:h,asap:i}})}(\"function\"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{}],6:[function(b,c){!function(a){\"use strict\";a(function(){return function(a){function b(a,b){this._handler=a===t?b:c(a)}function c(a){function b(a){e.resolve(a)}function c(a){e.reject(a)}function d(a){e.notify(a)}var e=new v;try{a(b,c,d)}catch(f){c(f)}return e}function d(a){return I(a)?a:new b(t,new w(q(a)))}function e(a){return new b(t,new w(new z(a)))}function f(){return Z}function g(){return new b(t,new v)}function h(a,b){var c=new v(a.receiver,a.join().context);return new b(t,c)}function i(a){return k(S,null,a)}function j(a,b){return k(N,a,b)}function k(a,c,d){function e(b,e,g){g.resolved||l(d,f,b,a(c,e,b),g)}function f(a,b,c){k[a]=b,0===--j&&c.become(new y(k))}for(var g,h=\"function\"==typeof c?e:f,i=new v,j=d.length>>>0,k=new Array(j),m=0;m<d.length&&!i.resolved;++m)g=d[m],void 0!==g||m in d?l(d,h,m,g,i):--j;return 0===j&&i.become(new y(k)),new b(t,i)}function l(a,b,c,d,e){if(J(d)){var f=r(d),g=f.state();0===g?f.fold(b,c,void 0,e):g>0?b(c,f.value,e):(e.become(f),m(a,c+1,f))}else b(c,d,e)}function m(a,b,c){for(var d=b;d<a.length;++d)n(q(a[d]),c)}function n(a,b){if(a!==b){var c=a.state();0===c?a.visit(a,void 0,a._unreport):0>c&&a._unreport()}}function o(a){return\"object\"!=typeof a||null===a?e(new TypeError(\"non-iterable passed to race()\")):0===a.length?f():1===a.length?d(a[0]):p(a)}function p(a){var c,d,e,f=new v;for(c=0;c<a.length;++c)if(d=a[c],void 0!==d||c in a){if(e=q(d),0!==e.state()){f.become(e),m(a,c+1,e);break}e.visit(f,f.resolve,f.reject)}return new b(t,f)}function q(a){return I(a)?a._handler.join():J(a)?s(a):new y(a)}function r(a){return I(a)?a._handler.join():s(a)}function s(a){try{var b=a.then;return\"function\"==typeof b?new x(b,a):new y(a)}catch(c){return new z(c)}}function t(){}function u(){}function v(a,c){b.createContext(this,c),this.consumers=void 0,this.receiver=a,this.handler=void 0,this.resolved=!1}function w(a){this.handler=a}function x(a,b){v.call(this),U.enqueue(new F(a,b,this))}function y(a){b.createContext(this),this.value=a}function z(a){b.createContext(this),this.id=++X,this.value=a,this.handled=!1,this.reported=!1,this._report()}function A(a,b){this.rejection=a,this.context=b}function B(a){this.rejection=a}function C(){return new z(new TypeError(\"Promise cycle\"))}function D(a,b){this.continuation=a,this.handler=b}function E(a,b){this.handler=b,this.value=a}function F(a,b,c){this._then=a,this.thenable=b,this.resolver=c}function G(a,b,c,d,e){try{a.call(b,c,d,e)}catch(f){d(f)}}function H(a,b,c,d){this.f=a,this.z=b,this.c=c,this.to=d,this.resolver=W,this.receiver=this}function I(a){return a instanceof b}function J(a){return(\"object\"==typeof a||\"function\"==typeof a)&&null!==a}function K(a,c,d,e){return\"function\"!=typeof a?e.become(c):(b.enterContext(c),O(a,c.value,d,e),void b.exitContext())}function L(a,c,d,e,f){return\"function\"!=typeof a?f.become(d):(b.enterContext(d),P(a,c,d.value,e,f),void b.exitContext())}function M(a,c,d,e,f){return\"function\"!=typeof a?f.notify(c):(b.enterContext(d),Q(a,c,e,f),void b.exitContext())}function N(a,b,c){try{return a(b,c)}catch(d){return e(d)}}function O(a,b,c,d){try{d.become(q(a.call(c,b)))}catch(e){d.become(new z(e))}}function P(a,b,c,d,e){try{a.call(d,b,c,e)}catch(f){e.become(new z(f))}}function Q(a,b,c,d){try{d.notify(a.call(c,b))}catch(e){d.notify(e)}}function R(a,b){b.prototype=V(a.prototype),b.prototype.constructor=b}function S(a,b){return b}function T(){}var U=a.scheduler,V=Object.create||function(a){function b(){}return b.prototype=a,new b};b.resolve=d,b.reject=e,b.never=f,b._defer=g,b._handler=q,b.prototype.then=function(a,b,c){var d=this._handler,e=d.join().state();if(\"function\"!=typeof a&&e>0||\"function\"!=typeof b&&0>e)return new this.constructor(t,d);var f=this._beget(),g=f._handler;return d.chain(g,d.receiver,a,b,c),f},b.prototype[\"catch\"]=function(a){return this.then(void 0,a)},b.prototype._beget=function(){return h(this._handler,this.constructor)},b.all=i,b.race=o,b._traverse=j,b._visitRemaining=m,t.prototype.when=t.prototype.become=t.prototype.notify=t.prototype.fail=t.prototype._unreport=t.prototype._report=T,t.prototype._state=0,t.prototype.state=function(){return this._state},t.prototype.join=function(){for(var a=this;void 0!==a.handler;)a=a.handler;return a},t.prototype.chain=function(a,b,c,d,e){this.when({resolver:a,receiver:b,fulfilled:c,rejected:d,progress:e})},t.prototype.visit=function(a,b,c,d){this.chain(W,a,b,c,d)},t.prototype.fold=function(a,b,c,d){this.when(new H(a,b,c,d))},R(t,u),u.prototype.become=function(a){a.fail()};var W=new u;R(t,v),v.prototype._state=0,v.prototype.resolve=function(a){this.become(q(a))},v.prototype.reject=function(a){this.resolved||this.become(new z(a))},v.prototype.join=function(){if(!this.resolved)return this;for(var a=this;void 0!==a.handler;)if(a=a.handler,a===this)return this.handler=C();return a},v.prototype.run=function(){var a=this.consumers,b=this.join();this.consumers=void 0;for(var c=0;c<a.length;++c)b.when(a[c])},v.prototype.become=function(a){this.resolved||(this.resolved=!0,this.handler=a,void 0!==this.consumers&&U.enqueue(this),void 0!==this.context&&a._report(this.context))},v.prototype.when=function(a){this.resolved?U.enqueue(new D(a,this.handler)):void 0===this.consumers?this.consumers=[a]:this.consumers.push(a)},v.prototype.notify=function(a){this.resolved||U.enqueue(new E(a,this))},v.prototype.fail=function(a){var b=\"undefined\"==typeof a?this.context:a;this.resolved&&this.handler.join().fail(b)},v.prototype._report=function(a){this.resolved&&this.handler.join()._report(a)},v.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()},R(t,w),w.prototype.when=function(a){U.enqueue(new D(a,this))},w.prototype._report=function(a){this.join()._report(a)},w.prototype._unreport=function(){this.join()._unreport()},R(v,x),R(t,y),y.prototype._state=1,y.prototype.fold=function(a,b,c,d){L(a,b,this,c,d)},y.prototype.when=function(a){K(a.fulfilled,this,a.receiver,a.resolver)};var X=0;R(t,z),z.prototype._state=-1,z.prototype.fold=function(a,b,c,d){d.become(this)},z.prototype.when=function(a){\"function\"==typeof a.rejected&&this._unreport(),K(a.rejected,this,a.receiver,a.resolver)},z.prototype._report=function(a){U.afterQueue(new A(this,a))},z.prototype._unreport=function(){this.handled||(this.handled=!0,U.afterQueue(new B(this)))},z.prototype.fail=function(a){b.onFatalRejection(this,void 0===a?this.context:a)},A.prototype.run=function(){this.rejection.handled||(this.rejection.reported=!0,b.onPotentiallyUnhandledRejection(this.rejection,this.context))},B.prototype.run=function(){this.rejection.reported&&b.onPotentiallyUnhandledRejectionHandled(this.rejection)},b.createContext=b.enterContext=b.exitContext=b.onPotentiallyUnhandledRejection=b.onPotentiallyUnhandledRejectionHandled=b.onFatalRejection=T;var Y=new t,Z=new b(t,Y);return D.prototype.run=function(){this.handler.join().when(this.continuation)},E.prototype.run=function(){var a=this.handler.consumers;if(void 0!==a)for(var b,c=0;c<a.length;++c)b=a[c],M(b.progress,this.value,this.handler,b.receiver,b.resolver)},F.prototype.run=function(){function a(a){d.resolve(a)}function b(a){d.reject(a)}function c(a){d.notify(a)}var d=this.resolver;G(this._then,this.thenable,a,b,c)},H.prototype.fulfilled=function(a){this.f.call(this.c,this.z,a,this.to)},H.prototype.rejected=function(a){this.to.reject(a)},H.prototype.progress=function(a){this.to.notify(a)},b}})}(\"function\"==typeof a&&a.amd?a:function(a){c.exports=a()})},{}]},{},[1])(1)}),function(__global){function __eval(__source,__global,load){var __curRegister=System.register;System.register=function(a,b,c){\"string\"!=typeof a&&(c=b,b=a),load.declare=c,load.depsList=b};try{eval('(function() { var __moduleName = \"'+(load.name||\"\").replace('\"','\"')+'\"; '+__source+\" \\n }).call(__global);\")}catch(e){throw(\"SyntaxError\"==e.name||\"TypeError\"==e.name)&&(e.message=\"Evaluating \"+(load.name||load.address)+\"\\n\t\"+e.message),e}System.register=__curRegister}$__Object$getPrototypeOf=Object.getPrototypeOf||function(a){return a.__proto__};var $__Object$defineProperty;!function(){try{Object.defineProperty({},\"a\",{})&&($__Object$defineProperty=Object.defineProperty)}catch(a){$__Object$defineProperty=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}(),$__Object$create=Object.create||function(a,b){function c(){}if(c.prototype=a,\"object\"==typeof b)for(prop in b)b.hasOwnProperty(prop)&&(c[prop]=b[prop]);return new c},function(){function a(a){return{status:\"loading\",name:a,linkSets:[],dependencies:[],metadata:{}}}function b(a,b,c){return new A(g({step:c.address?\"fetch\":\"locate\",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function c(b,c,e,f){return new A(function(a){a(b.loaderObj.normalize(c,e,f))}).then(function(c){var e;if(b.modules[c])return e=a(c),e.status=\"linked\",e;for(var f=0,g=b.loads.length;g>f;f++)if(e=b.loads[f],e.name==c)return e;return e=a(c),b.loads.push(e),d(b,e),e})}function d(a,b){e(a,b,A.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function e(a,b,c){f(a,b,c.then(function(c){return\"loading\"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function f(a,b,d){d.then(function(c){return\"loading\"==b.status?a.loaderObj.translate({name:b.name,metadata:b.metadata,address:b.address,source:c}):void 0}).then(function(c){return\"loading\"==b.status?(b.source=c,a.loaderObj.instantiate({name:b.name,metadata:b.metadata,address:b.address,source:c})):void 0}).then(function(d){if(\"loading\"==b.status){if(void 0===d)b.address=b.address||\"<Anonymous Module \"+ ++D+\">\",b.isDeclarative=!0,a.loaderObj.parse(b);else{if(\"object\"!=typeof d)throw TypeError(\"Invalid instantiate return value\");b.depsList=d.deps||[],b.execute=d.execute,b.isDeclarative=!1}b.dependencies=[];for(var e=b.depsList,f=[],g=0,h=e.length;h>g;g++)(function(d,e){f.push(c(a,d,b.name,b.address).then(function(a){if(b.dependencies[e]={key:d,value:a.name},\"linked\"!=a.status)for(var c=b.linkSets.concat([]),f=0,g=c.length;g>f;f++)i(c[f],a)}))})(e[g],g);return A.all(f)}}).then(function(){b.status=\"loaded\";for(var a=b.linkSets.concat([]),c=0,d=a.length;d>c;c++)k(a[c],b)})[\"catch\"](function(a){b.status=\"failed\",b.exception=a;for(var c=b.linkSets.concat([]),d=0,e=c.length;e>d;d++)l(c[d],b,a)})}function g(b){return function(c){var g=b.loader,i=b.moduleName,j=b.step;if(g.modules[i])throw new TypeError('\"'+i+'\" already exists in the module table');for(var k=0,l=g.loads.length;l>k;k++)if(g.loads[k].name==i)throw new TypeError('\"'+i+'\" already loading');var m=a(i);m.metadata=b.moduleMetadata;var n=h(g,m);g.loads.push(m),c(n.done),\"locate\"==j?d(g,m):\"fetch\"==j?e(g,m,A.resolve(b.moduleAddress)):(m.address=b.moduleAddress,f(g,m,A.resolve(b.moduleSource)))}}function h(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new A(function(a,b){c.resolve=a,c.reject=b}),i(c,b),c}function i(a,b){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),\"loaded\"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){i(a,e.loads[g]);break}}}function j(a){var b=!1;try{p(a,function(c,d){l(a,c,d),b=!0})}catch(c){l(a,null,c),b=!0}return b}function k(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:E({}),evaluated:!0}:{module:E({})},b.status=\"linked\",m(a.loader,b)}return a.resolve(c)}var g=j(a);g||a.resolve(c)}}function l(a,b,c){var d=a.loader;a.loads[0].name!=b.name&&(c=w(c,'Error loading \"'+b.name+'\" from \"'+a.loads[0].name+'\" at '+(a.loads[0].address||\"<unknown>\")+\"\\n\")),c=w(c,'Error loading \"'+b.name+'\" at '+(b.address||\"<unknown>\")+\"\\n\");for(var e=a.loads.concat([]),f=0,g=e.length;g>f;f++){var b=e[f];d.loaderObj.failed=d.loaderObj.failed||[],-1==B.call(d.loaderObj.failed,b)&&d.loaderObj.failed.push(b);var h=B.call(b.linkSets,a);if(b.linkSets.splice(h,1),0==b.linkSets.length){var i=B.call(a.loader.loads,b);-1!=i&&a.loader.loads.splice(i,1)}}a.reject(c)}function m(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?\"declarative\":\"dynamic\"}}b.name&&(a.modules[b.name]=b.module);var d=B.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=B.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function n(a,b,c,d){if(c[a.groupIndex]=c[a.groupIndex]||[],-1==B.call(c[a.groupIndex],a)){c[a.groupIndex].push(a);for(var e=0,f=b.length;f>e;e++)for(var g=b[e],h=0;h<a.dependencies.length;h++)if(g.name==a.dependencies[h].value){var i=a.groupIndex+(g.isDeclarative!=a.isDeclarative);if(void 0===g.groupIndex||g.groupIndex<i){if(g.groupIndex&&(c[g.groupIndex].splice(B.call(c[g.groupIndex],g),1),0==c[g.groupIndex].length))throw new TypeError(\"Mixed dependency cycle detected\");g.groupIndex=i}n(g,b,c,d)}}}function o(a,b,c){try{var d=b.execute()}catch(e){return void c(b,e)}return d&&d instanceof y?d:void c(b,new TypeError(\"Execution must define a Module instance\"))}function p(a,b){var c=a.loader;if(a.loads.length){var d=[],e=a.loads[0];e.groupIndex=0,n(e,a.loads,d,c);for(var f=e.isDeclarative==d.length%2,g=d.length-1;g>=0;g--){for(var h=d[g],i=0;i<h.length;i++){var j=h[i];if(f)r(j,a.loads,c);else{var k=o(a,j,b);if(!k)return;j.module={name:j.name,module:k},j.status=\"linked\"}m(c,j)}f=!f}}}function q(a,b){var c=b.moduleRecords;return c[a]||(c[a]={name:a,dependencies:[],module:new y,importers:[]})}function r(a,b,c){if(!a.module){var d=a.module=q(a.name,c),e=a.module.module,f=a.declare.call(__global,function(a,b){d.locked=!0,e[a]=b;for(var c=0,f=d.importers.length;f>c;c++){var g=d.importers[c];if(!g.locked){var h=B.call(g.dependencies,d);g.setters[h](e)}}return d.locked=!1,b});d.setters=f.setters,d.execute=f.execute;for(var g=0,h=a.dependencies.length;h>g;g++){var i=a.dependencies[g].value,j=c.modules[i];if(!j)for(var k=0;k<b.length;k++)b[k].name==i&&(b[k].module?j=q(i,c):(r(b[k],b,c),j=b[k].module));j.importers?(d.dependencies.push(j),j.importers.push(d)):d.dependencies.push(null),d.setters[g]&&d.setters[g](j.module)}a.status=\"linked\"}}function s(a,b){return u(b.module,[],a),b.module.module}function t(a){try{a.execute.call(__global)}catch(b){return b}}function u(a,b,c){var d=v(a,b,c);if(d)throw d}function v(a,b,c){if(!a.evaluated&&a.dependencies){b.push(a);for(var d,e=a.dependencies,f=0,g=e.length;g>f;f++){var h=e[f];if(h&&-1==B.call(b,h)&&(d=v(h,b,c)))return d=w(d,\"Error evaluating \"+h.name+\"\\n\")}if(a.failed)return new Error(\"Module failed execution.\");if(!a.evaluated)return a.evaluated=!0,d=t(a),d?a.failed=!0:Object.preventExtensions&&Object.preventExtensions(a.module),a.execute=void 0,d}}function w(a,b){return a instanceof Error?a.message=b+a.message:a=b+a,a}function x(a){if(\"object\"!=typeof a)throw new TypeError(\"Options must be an object\");a.normalize&&(this.normalize=a.normalize),a.locate&&(this.locate=a.locate),a.fetch&&(this.fetch=a.fetch),a.translate&&(this.translate=a.translate),a.instantiate&&(this.instantiate=a.instantiate),this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},C(this,\"global\",{get:function(){return __global}})}function y(){}function z(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}var A=__global.Promise||require(\"when/es6-shim/Promise\");console.assert=console.assert||function(){};var B=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},C=$__Object$defineProperty,D=0;x.prototype={constructor:x,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError(\"Module is already loading.\");return z(this,a,new A(g({step:\"translate\",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},\"delete\":function(a){return this._loader.modules[a]?delete this._loader.modules[a]:!1},get:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},\"import\":function(a,c){var d=this;return A.resolve(d.normalize(a,c&&c.name,c&&c.address)).then(function(a){var e=d._loader;return e.modules[a]?(u(e.modules[a],[],e._loader),e.modules[a].module):e.importPromises[a]||z(d,a,b(e,a,c||{}).then(function(b){return delete e.importPromises[a],s(e,b)}))})},load:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this._loader),A.resolve(this._loader.modules[a].module)):this._loader.importPromises[a]||z(this,a,b(this._loader,a,{}))},module:function(b,c){var d=a();d.address=c&&c.address;var e=h(this._loader,d),g=A.resolve(b),i=this._loader,j=e.done.then(function(){return s(i,d)});return f(i,d,g),j},newModule:function(a){if(\"object\"!=typeof a)throw new TypeError(\"Expected object\");var b=new y;for(var c in a)!function(c){C(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]}})}(c);return Object.preventExtensions&&Object.preventExtensions(b),b},set:function(a,b){if(!(b instanceof y))throw new TypeError(\"Loader.set(\"+a+\", module) must be a module\");this._loader.modules[a]={module:b}},normalize:function(a){return a},locate:function(a){return a.name},fetch:function(){throw new TypeError(\"Fetch not implemented\")},translate:function(a){return a.source},parse:function(){throw new TypeError(\"Loader.parse is not implemented\")},instantiate:function(){}};var E=x.prototype.newModule;!function(){function a(a,b,c){try{return b.compile(a,c)}catch(d){throw d[0]}}var b;x.prototype.parse=function(c){if(!b)if(\"undefined\"==typeof window&&\"undefined\"==typeof WorkerGlobalScope)b=require(\"traceur\");else{if(!__global.traceur)throw new TypeError(\"Include Traceur for module syntax support\");b=__global.traceur}c.isDeclarative=!0;var d=this.traceurOptions||{};d.modules=\"instantiate\",d.script=!1,d.sourceMaps=!0,d.filename=c.address;var e=new b.Compiler(d),f=a(c.source,e,d.filename);if(!f)throw new Error(\"Error evaluating module \"+c.address);var g=e.getSourceMap();__global.btoa&&g&&(f+=\"\\n//# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(g)))+\"\\n\"),f='var __moduleAddress = \"'+c.address+'\";'+f,__eval(f,__global,c)}}(),\"object\"==typeof exports&&(module.exports=x),__global.Reflect=__global.Reflect||{},__global.Reflect.Loader=__global.Reflect.Loader||x,__global.Reflect.global=__global.Reflect.global||__global,__global.LoaderPolyfill=x}(),function(){function a(a){var b=String(a).replace(/^\\s+|\\s+$/g,\"\").match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);return b?{href:b[0]||\"\",protocol:b[1]||\"\",authority:b[2]||\"\",host:b[3]||\"\",hostname:b[4]||\"\",port:b[5]||\"\",pathname:b[6]||\"\",search:b[7]||\"\",hash:b[8]||\"\"}:null}function b(a){var b=[];return a.replace(/^(\\.\\.?(\\/|$))+/,\"\").replace(/\\/(\\.(\\/|$))+/g,\"/\").replace(/\\/\\.\\.$/,\"/../\").replace(/\\/?[^\\/]*/g,function(a){\"/..\"===a?b.pop():b.push(a)}),b.join(\"\").replace(/^\\//,\"/\"===a.charAt(0)?\"/\":\"\")}function c(c,d){return d=a(d||\"\"),c=a(c||\"\"),d&&c?(d.protocol||c.protocol)+(d.protocol||d.authority?d.authority:c.authority)+b(d.protocol||d.authority||\"/\"===d.pathname.charAt(0)?d.pathname:d.pathname?(c.authority&&!c.pathname?\"/\":\"\")+c.pathname.slice(0,c.pathname.lastIndexOf(\"/\")+1)+d.pathname:c.pathname)+(d.protocol||d.authority||d.pathname?d.search:d.search||c.search)+d.hash:null}function d(){document.removeEventListener(\"DOMContentLoaded\",d,!1),window.removeEventListener(\"load\",d,!1),e()}function e(){for(var a=document.getElementsByTagName(\"script\"),b=0;b<a.length;b++){var c=a[b];if(\"module\"==c.type){var d=c.innerHTML.substr(1);m.module(d)[\"catch\"](function(a){setTimeout(function(){throw a})})}}}var f,g=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,h=\"undefined\"!=typeof window&&!g,i=\"undefined\"!=typeof process&&!!process.platform.match(/^win/),j=__global.Promise||require(\"when/es6-shim/Promise\");if(\"undefined\"!=typeof XMLHttpRequest)f=function(a,b,c){function d(){b(f.responseText)}function e(){c(f.statusText+\": \"+a||\"XHR error\")}var f=new XMLHttpRequest,g=!0;if(!(\"withCredentials\"in f)){var h=/^(\\w+:)?\\/\\/([^\\/]+)/.exec(a);h&&(g=h[2]===window.location.host,h[1]&&(g&=h[1]===window.location.protocol))}g||\"undefined\"==typeof XDomainRequest||(f=new XDomainRequest,f.onload=d,f.onerror=e,f.ontimeout=e,f.onprogress=function(){},f.timeout=0),f.onreadystatechange=function(){4===f.readyState&&(200===f.status||0==f.status&&f.responseText?d():e())},f.open(\"GET\",a,!0),f.send(null)};else{if(\"undefined\"==typeof require)throw new TypeError(\"No environment fetch API available.\");var k;f=function(a,b,c){if(\"file:\"!=a.substr(0,5))throw\"Only file URLs of the form file: allowed running in Node.\";return k=k||require(\"fs\"),a=a.substr(5),i&&(a=a.replace(/\\//g,\"\\\\\")),k.readFile(a,function(a,d){return a?c(a):void b(d+\"\")})}}var l=function(a){function b(b){if(a.call(this,b||{}),\"undefined\"!=typeof location&&location.href){var c=__global.location.href.split(\"#\")[0].split(\"?\")[0];this.baseURL=c.substring(0,c.lastIndexOf(\"/\")+1)}else{if(\"undefined\"==typeof process||!process.cwd)throw new TypeError(\"No environment baseURL\");this.baseURL=\"file:\"+process.cwd()+\"/\",i&&(this.baseURL=this.baseURL.replace(/\\\\/g,\"/\"))}this.paths={\"*\":\"*.js\"}}return b.__proto__=null!==a?a:Function.prototype,b.prototype=$__Object$create(null!==a?a.prototype:null),$__Object$defineProperty(b.prototype,\"constructor\",{value:b}),$__Object$defineProperty(b.prototype,\"global\",{get:function(){return h?window:g?self:__global},enumerable:!1}),$__Object$defineProperty(b.prototype,\"strict\",{get:function(){return!0},enumerable:!1}),$__Object$defineProperty(b.prototype,\"normalize\",{value:function(a,b){if(\"string\"!=typeof a)throw new TypeError(\"Module name must be a string\");var c=a.split(\"/\");if(0==c.length)throw new TypeError(\"No module name provided\");var d=0,e=!1,f=0;if(\".\"==c[0]){if(d++,d==c.length)throw new TypeError('Illegal module name \"'+a+'\"');e=!0}else{for(;\"..\"==c[d];)if(d++,d==c.length)throw new TypeError('Illegal module name \"'+a+'\"');d&&(e=!0),f=d}for(var g=d;g<c.length;g++){var h=c[g];if(\"\"==h||\".\"==h||\"..\"==h)throw new TypeError('Illegal module name \"'+a+'\"')}if(!e)return a;{var i=[],j=(b||\"\").split(\"/\");j.length-1-f}return i=i.concat(j.splice(0,j.length-1-f)),i=i.concat(c.splice(d,c.length-d)),i.join(\"/\")},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,\"locate\",{value:function(a){var b,d=a.name,e=\"\";for(var f in this.paths){var g=f.split(\"*\");if(g.length>2)throw new TypeError(\"Only one wildcard in a path is permitted\");if(1==g.length){if(d==f&&f.length>e.length){e=f;break}}else d.substr(0,g[0].length)==g[0]&&d.substr(d.length-g[1].length)==g[1]&&(e=f,b=d.substr(g[0].length,d.length-g[1].length-g[0].length))}var i=this.paths[e];return b&&(i=i.replace(\"*\",b)),h&&(i=i.replace(/#/g,\"%23\")),c(this.baseURL,i)},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,\"fetch\",{value:function(a){var b=this;return new j(function(d,e){f(c(b.baseURL,a.address),function(a){d(a)},e)})},enumerable:!1,writable:!0}),b}(__global.LoaderPolyfill),m=new l;if(\"object\"==typeof exports&&(module.exports=m),__global.System=m,h&&\"undefined\"!=typeof document.getElementsByTagName){var n=document.getElementsByTagName(\"script\");n=n[n.length-1],\"complete\"===document.readyState?setTimeout(e):document.addEventListener&&(document.addEventListener(\"DOMContentLoaded\",d,!1),window.addEventListener(\"load\",d,!1)),n.getAttribute(\"data-init\")&&window[n.getAttribute(\"data-init\")]()}}()}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope?self:global);\n//# sourceMappingURL=es6-module-loader.js.map"
  },
  {
    "path": "client/components/es6-module-loader/dist/es6-module-loader.src.js",
    "content": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=typeof window?window.Promise=e():\"undefined\"!=typeof global?global.Promise=e():\"undefined\"!=typeof self&&(self.Promise=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n/**\n * ES6 global Promise shim\n */\nvar unhandledRejections = require('../lib/decorators/unhandledRejection');\nvar PromiseConstructor = unhandledRejections(require('../lib/Promise'));\n\nmodule.exports = typeof global != 'undefined' ? (global.Promise = PromiseConstructor)\n\t           : typeof self   != 'undefined' ? (self.Promise   = PromiseConstructor)\n\t           : PromiseConstructor;\n\n},{\"../lib/Promise\":2,\"../lib/decorators/unhandledRejection\":4}],2:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function (require) {\n\n\tvar makePromise = require('./makePromise');\n\tvar Scheduler = require('./Scheduler');\n\tvar async = require('./env').asap;\n\n\treturn makePromise({\n\t\tscheduler: new Scheduler(async)\n\t});\n\n});\n})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });\n\n},{\"./Scheduler\":3,\"./env\":5,\"./makePromise\":6}],3:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function() {\n\n\t// Credit to Twisol (https://github.com/Twisol) for suggesting\n\t// this type of extensible queue + trampoline approach for next-tick conflation.\n\n\t/**\n\t * Async task scheduler\n\t * @param {function} async function to schedule a single async function\n\t * @constructor\n\t */\n\tfunction Scheduler(async) {\n\t\tthis._async = async;\n\t\tthis._running = false;\n\n\t\tthis._queue = new Array(1<<16);\n\t\tthis._queueLen = 0;\n\t\tthis._afterQueue = new Array(1<<4);\n\t\tthis._afterQueueLen = 0;\n\n\t\tvar self = this;\n\t\tthis.drain = function() {\n\t\t\tself._drain();\n\t\t};\n\t}\n\n\t/**\n\t * Enqueue a task\n\t * @param {{ run:function }} task\n\t */\n\tScheduler.prototype.enqueue = function(task) {\n\t\tthis._queue[this._queueLen++] = task;\n\t\tthis.run();\n\t};\n\n\t/**\n\t * Enqueue a task to run after the main task queue\n\t * @param {{ run:function }} task\n\t */\n\tScheduler.prototype.afterQueue = function(task) {\n\t\tthis._afterQueue[this._afterQueueLen++] = task;\n\t\tthis.run();\n\t};\n\n\tScheduler.prototype.run = function() {\n\t\tif (!this._running) {\n\t\t\tthis._running = true;\n\t\t\tthis._async(this.drain);\n\t\t}\n\t};\n\n\t/**\n\t * Drain the handler queue entirely, and then the after queue\n\t */\n\tScheduler.prototype._drain = function() {\n\t\tvar i = 0;\n\t\tfor (; i < this._queueLen; ++i) {\n\t\t\tthis._queue[i].run();\n\t\t\tthis._queue[i] = void 0;\n\t\t}\n\n\t\tthis._queueLen = 0;\n\t\tthis._running = false;\n\n\t\tfor (i = 0; i < this._afterQueueLen; ++i) {\n\t\t\tthis._afterQueue[i].run();\n\t\t\tthis._afterQueue[i] = void 0;\n\t\t}\n\n\t\tthis._afterQueueLen = 0;\n\t};\n\n\treturn Scheduler;\n\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));\n\n},{}],4:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function(require) {\n\n\tvar setTimer = require('../env').setTimer;\n\n\treturn function unhandledRejection(Promise) {\n\t\tvar logError = noop;\n\t\tvar logInfo = noop;\n\t\tvar localConsole;\n\n\t\tif(typeof console !== 'undefined') {\n\t\t\t// Alias console to prevent things like uglify's drop_console option from\n\t\t\t// removing console.log/error. Unhandled rejections fall into the same\n\t\t\t// category as uncaught exceptions, and build tools shouldn't silence them.\n\t\t\tlocalConsole = console;\n\t\t\tlogError = typeof localConsole.error !== 'undefined'\n\t\t\t\t? function (e) { localConsole.error(e); }\n\t\t\t\t: function (e) { localConsole.log(e); };\n\n\t\t\tlogInfo = typeof localConsole.info !== 'undefined'\n\t\t\t\t? function (e) { localConsole.info(e); }\n\t\t\t\t: function (e) { localConsole.log(e); };\n\t\t}\n\n\t\tPromise.onPotentiallyUnhandledRejection = function(rejection) {\n\t\t\tenqueue(report, rejection);\n\t\t};\n\n\t\tPromise.onPotentiallyUnhandledRejectionHandled = function(rejection) {\n\t\t\tenqueue(unreport, rejection);\n\t\t};\n\n\t\tPromise.onFatalRejection = function(rejection) {\n\t\t\tenqueue(throwit, rejection.value);\n\t\t};\n\n\t\tvar tasks = [];\n\t\tvar reported = [];\n\t\tvar running = null;\n\n\t\tfunction report(r) {\n\t\t\tif(!r.handled) {\n\t\t\t\treported.push(r);\n\t\t\t\tlogError('Potentially unhandled rejection [' + r.id + '] ' + formatError(r.value));\n\t\t\t}\n\t\t}\n\n\t\tfunction unreport(r) {\n\t\t\tvar i = reported.indexOf(r);\n\t\t\tif(i >= 0) {\n\t\t\t\treported.splice(i, 1);\n\t\t\t\tlogInfo('Handled previous rejection [' + r.id + '] ' + formatObject(r.value));\n\t\t\t}\n\t\t}\n\n\t\tfunction enqueue(f, x) {\n\t\t\ttasks.push(f, x);\n\t\t\tif(running === null) {\n\t\t\t\trunning = setTimer(flush, 0);\n\t\t\t}\n\t\t}\n\n\t\tfunction flush() {\n\t\t\trunning = null;\n\t\t\twhile(tasks.length > 0) {\n\t\t\t\ttasks.shift()(tasks.shift());\n\t\t\t}\n\t\t}\n\n\t\treturn Promise;\n\t};\n\n\tfunction formatError(e) {\n\t\tvar s = typeof e === 'object' && e.stack ? e.stack : formatObject(e);\n\t\treturn e instanceof Error ? s : s + ' (WARNING: non-Error used)';\n\t}\n\n\tfunction formatObject(o) {\n\t\tvar s = String(o);\n\t\tif(s === '[object Object]' && typeof JSON !== 'undefined') {\n\t\t\ts = tryStringify(o, s);\n\t\t}\n\t\treturn s;\n\t}\n\n\tfunction tryStringify(e, defaultValue) {\n\t\ttry {\n\t\t\treturn JSON.stringify(e);\n\t\t} catch(e) {\n\t\t\t// Ignore. Cannot JSON.stringify e, stick with String(e)\n\t\t\treturn defaultValue;\n\t\t}\n\t}\n\n\tfunction throwit(e) {\n\t\tthrow e;\n\t}\n\n\tfunction noop() {}\n\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));\n\n},{\"../env\":5}],5:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n/*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/\n(function(define) { 'use strict';\ndefine(function(require) {\n\t/*jshint maxcomplexity:6*/\n\n\t// Sniff \"best\" async scheduling option\n\t// Prefer process.nextTick or MutationObserver, then check for\n\t// setTimeout, and finally vertx, since its the only env that doesn't\n\t// have setTimeout\n\n\tvar MutationObs;\n\tvar capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout;\n\n\t// Default env\n\tvar setTimer = function(f, ms) { return setTimeout(f, ms); };\n\tvar clearTimer = function(t) { return clearTimeout(t); };\n\tvar asap = function (f) { return capturedSetTimeout(f, 0); };\n\n\t// Detect specific env\n\tif (isNode()) { // Node\n\t\tasap = function (f) { return process.nextTick(f); };\n\n\t} else if (MutationObs = hasMutationObserver()) { // Modern browser\n\t\tasap = initMutationObserver(MutationObs);\n\n\t} else if (!capturedSetTimeout) { // vert.x\n\t\tvar vertxRequire = require;\n\t\tvar vertx = vertxRequire('vertx');\n\t\tsetTimer = function (f, ms) { return vertx.setTimer(ms, f); };\n\t\tclearTimer = vertx.cancelTimer;\n\t\tasap = vertx.runOnLoop || vertx.runOnContext;\n\t}\n\n\treturn {\n\t\tsetTimer: setTimer,\n\t\tclearTimer: clearTimer,\n\t\tasap: asap\n\t};\n\n\tfunction isNode () {\n\t\treturn typeof process !== 'undefined' && process !== null &&\n\t\t\ttypeof process.nextTick === 'function';\n\t}\n\n\tfunction hasMutationObserver () {\n\t\treturn (typeof MutationObserver === 'function' && MutationObserver) ||\n\t\t\t(typeof WebKitMutationObserver === 'function' && WebKitMutationObserver);\n\t}\n\n\tfunction initMutationObserver(MutationObserver) {\n\t\tvar scheduled;\n\t\tvar node = document.createTextNode('');\n\t\tvar o = new MutationObserver(run);\n\t\to.observe(node, { characterData: true });\n\n\t\tfunction run() {\n\t\t\tvar f = scheduled;\n\t\t\tscheduled = void 0;\n\t\t\tf();\n\t\t}\n\n\t\tvar i = 0;\n\t\treturn function (f) {\n\t\t\tscheduled = f;\n\t\t\tnode.data = (i ^= 1);\n\t\t};\n\t}\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));\n\n},{}],6:[function(require,module,exports){\n/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function() {\n\n\treturn function makePromise(environment) {\n\n\t\tvar tasks = environment.scheduler;\n\n\t\tvar objectCreate = Object.create ||\n\t\t\tfunction(proto) {\n\t\t\t\tfunction Child() {}\n\t\t\t\tChild.prototype = proto;\n\t\t\t\treturn new Child();\n\t\t\t};\n\n\t\t/**\n\t\t * Create a promise whose fate is determined by resolver\n\t\t * @constructor\n\t\t * @returns {Promise} promise\n\t\t * @name Promise\n\t\t */\n\t\tfunction Promise(resolver, handler) {\n\t\t\tthis._handler = resolver === Handler ? handler : init(resolver);\n\t\t}\n\n\t\t/**\n\t\t * Run the supplied resolver\n\t\t * @param resolver\n\t\t * @returns {Pending}\n\t\t */\n\t\tfunction init(resolver) {\n\t\t\tvar handler = new Pending();\n\n\t\t\ttry {\n\t\t\t\tresolver(promiseResolve, promiseReject, promiseNotify);\n\t\t\t} catch (e) {\n\t\t\t\tpromiseReject(e);\n\t\t\t}\n\n\t\t\treturn handler;\n\n\t\t\t/**\n\t\t\t * Transition from pre-resolution state to post-resolution state, notifying\n\t\t\t * all listeners of the ultimate fulfillment or rejection\n\t\t\t * @param {*} x resolution value\n\t\t\t */\n\t\t\tfunction promiseResolve (x) {\n\t\t\t\thandler.resolve(x);\n\t\t\t}\n\t\t\t/**\n\t\t\t * Reject this promise with reason, which will be used verbatim\n\t\t\t * @param {Error|*} reason rejection reason, strongly suggested\n\t\t\t *   to be an Error type\n\t\t\t */\n\t\t\tfunction promiseReject (reason) {\n\t\t\t\thandler.reject(reason);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t * Issue a progress event, notifying all progress listeners\n\t\t\t * @param {*} x progress event payload to pass to all listeners\n\t\t\t */\n\t\t\tfunction promiseNotify (x) {\n\t\t\t\thandler.notify(x);\n\t\t\t}\n\t\t}\n\n\t\t// Creation\n\n\t\tPromise.resolve = resolve;\n\t\tPromise.reject = reject;\n\t\tPromise.never = never;\n\n\t\tPromise._defer = defer;\n\t\tPromise._handler = getHandler;\n\n\t\t/**\n\t\t * Returns a trusted promise. If x is already a trusted promise, it is\n\t\t * returned, otherwise returns a new trusted Promise which follows x.\n\t\t * @param  {*} x\n\t\t * @return {Promise} promise\n\t\t */\n\t\tfunction resolve(x) {\n\t\t\treturn isPromise(x) ? x\n\t\t\t\t: new Promise(Handler, new Async(getHandler(x)));\n\t\t}\n\n\t\t/**\n\t\t * Return a reject promise with x as its reason (x is used verbatim)\n\t\t * @param {*} x\n\t\t * @returns {Promise} rejected promise\n\t\t */\n\t\tfunction reject(x) {\n\t\t\treturn new Promise(Handler, new Async(new Rejected(x)));\n\t\t}\n\n\t\t/**\n\t\t * Return a promise that remains pending forever\n\t\t * @returns {Promise} forever-pending promise.\n\t\t */\n\t\tfunction never() {\n\t\t\treturn foreverPendingPromise; // Should be frozen\n\t\t}\n\n\t\t/**\n\t\t * Creates an internal {promise, resolver} pair\n\t\t * @private\n\t\t * @returns {Promise}\n\t\t */\n\t\tfunction defer() {\n\t\t\treturn new Promise(Handler, new Pending());\n\t\t}\n\n\t\t// Transformation and flow control\n\n\t\t/**\n\t\t * Transform this promise's fulfillment value, returning a new Promise\n\t\t * for the transformed result.  If the promise cannot be fulfilled, onRejected\n\t\t * is called with the reason.  onProgress *may* be called with updates toward\n\t\t * this promise's fulfillment.\n\t\t * @param {function=} onFulfilled fulfillment handler\n\t\t * @param {function=} onRejected rejection handler\n\t\t * @param {function=} onProgress @deprecated progress handler\n\t\t * @return {Promise} new promise\n\t\t */\n\t\tPromise.prototype.then = function(onFulfilled, onRejected, onProgress) {\n\t\t\tvar parent = this._handler;\n\t\t\tvar state = parent.join().state();\n\n\t\t\tif ((typeof onFulfilled !== 'function' && state > 0) ||\n\t\t\t\t(typeof onRejected !== 'function' && state < 0)) {\n\t\t\t\t// Short circuit: value will not change, simply share handler\n\t\t\t\treturn new this.constructor(Handler, parent);\n\t\t\t}\n\n\t\t\tvar p = this._beget();\n\t\t\tvar child = p._handler;\n\n\t\t\tparent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress);\n\n\t\t\treturn p;\n\t\t};\n\n\t\t/**\n\t\t * If this promise cannot be fulfilled due to an error, call onRejected to\n\t\t * handle the error. Shortcut for .then(undefined, onRejected)\n\t\t * @param {function?} onRejected\n\t\t * @return {Promise}\n\t\t */\n\t\tPromise.prototype['catch'] = function(onRejected) {\n\t\t\treturn this.then(void 0, onRejected);\n\t\t};\n\n\t\t/**\n\t\t * Creates a new, pending promise of the same type as this promise\n\t\t * @private\n\t\t * @returns {Promise}\n\t\t */\n\t\tPromise.prototype._beget = function() {\n\t\t\treturn begetFrom(this._handler, this.constructor);\n\t\t};\n\n\t\tfunction begetFrom(parent, Promise) {\n\t\t\tvar child = new Pending(parent.receiver, parent.join().context);\n\t\t\treturn new Promise(Handler, child);\n\t\t}\n\n\t\t// Array combinators\n\n\t\tPromise.all = all;\n\t\tPromise.race = race;\n\t\tPromise._traverse = traverse;\n\n\t\t/**\n\t\t * Return a promise that will fulfill when all promises in the\n\t\t * input array have fulfilled, or will reject when one of the\n\t\t * promises rejects.\n\t\t * @param {array} promises array of promises\n\t\t * @returns {Promise} promise for array of fulfillment values\n\t\t */\n\t\tfunction all(promises) {\n\t\t\treturn traverseWith(snd, null, promises);\n\t\t}\n\n\t\t/**\n\t\t * Array<Promise<X>> -> Promise<Array<f(X)>>\n\t\t * @private\n\t\t * @param {function} f function to apply to each promise's value\n\t\t * @param {Array} promises array of promises\n\t\t * @returns {Promise} promise for transformed values\n\t\t */\n\t\tfunction traverse(f, promises) {\n\t\t\treturn traverseWith(tryCatch2, f, promises);\n\t\t}\n\n\t\tfunction traverseWith(tryMap, f, promises) {\n\t\t\tvar handler = typeof f === 'function' ? mapAt : settleAt;\n\n\t\t\tvar resolver = new Pending();\n\t\t\tvar pending = promises.length >>> 0;\n\t\t\tvar results = new Array(pending);\n\n\t\t\tfor (var i = 0, x; i < promises.length && !resolver.resolved; ++i) {\n\t\t\t\tx = promises[i];\n\n\t\t\t\tif (x === void 0 && !(i in promises)) {\n\t\t\t\t\t--pending;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\ttraverseAt(promises, handler, i, x, resolver);\n\t\t\t}\n\n\t\t\tif(pending === 0) {\n\t\t\t\tresolver.become(new Fulfilled(results));\n\t\t\t}\n\n\t\t\treturn new Promise(Handler, resolver);\n\n\t\t\tfunction mapAt(i, x, resolver) {\n\t\t\t\tif(!resolver.resolved) {\n\t\t\t\t\ttraverseAt(promises, settleAt, i, tryMap(f, x, i), resolver);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction settleAt(i, x, resolver) {\n\t\t\t\tresults[i] = x;\n\t\t\t\tif(--pending === 0) {\n\t\t\t\t\tresolver.become(new Fulfilled(results));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction traverseAt(promises, handler, i, x, resolver) {\n\t\t\tif (maybeThenable(x)) {\n\t\t\t\tvar h = getHandlerMaybeThenable(x);\n\t\t\t\tvar s = h.state();\n\n\t\t\t\tif (s === 0) {\n\t\t\t\t\th.fold(handler, i, void 0, resolver);\n\t\t\t\t} else if (s > 0) {\n\t\t\t\t\thandler(i, h.value, resolver);\n\t\t\t\t} else {\n\t\t\t\t\tresolver.become(h);\n\t\t\t\t\tvisitRemaining(promises, i+1, h);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thandler(i, x, resolver);\n\t\t\t}\n\t\t}\n\n\t\tPromise._visitRemaining = visitRemaining;\n\t\tfunction visitRemaining(promises, start, handler) {\n\t\t\tfor(var i=start; i<promises.length; ++i) {\n\t\t\t\tmarkAsHandled(getHandler(promises[i]), handler);\n\t\t\t}\n\t\t}\n\n\t\tfunction markAsHandled(h, handler) {\n\t\t\tif(h === handler) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar s = h.state();\n\t\t\tif(s === 0) {\n\t\t\t\th.visit(h, void 0, h._unreport);\n\t\t\t} else if(s < 0) {\n\t\t\t\th._unreport();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Fulfill-reject competitive race. Return a promise that will settle\n\t\t * to the same state as the earliest input promise to settle.\n\t\t *\n\t\t * WARNING: The ES6 Promise spec requires that race()ing an empty array\n\t\t * must return a promise that is pending forever.  This implementation\n\t\t * returns a singleton forever-pending promise, the same singleton that is\n\t\t * returned by Promise.never(), thus can be checked with ===\n\t\t *\n\t\t * @param {array} promises array of promises to race\n\t\t * @returns {Promise} if input is non-empty, a promise that will settle\n\t\t * to the same outcome as the earliest input promise to settle. if empty\n\t\t * is empty, returns a promise that will never settle.\n\t\t */\n\t\tfunction race(promises) {\n\t\t\tif(typeof promises !== 'object' || promises === null) {\n\t\t\t\treturn reject(new TypeError('non-iterable passed to race()'));\n\t\t\t}\n\n\t\t\t// Sigh, race([]) is untestable unless we return *something*\n\t\t\t// that is recognizable without calling .then() on it.\n\t\t\treturn promises.length === 0 ? never()\n\t\t\t\t : promises.length === 1 ? resolve(promises[0])\n\t\t\t\t : runRace(promises);\n\t\t}\n\n\t\tfunction runRace(promises) {\n\t\t\tvar resolver = new Pending();\n\t\t\tvar i, x, h;\n\t\t\tfor(i=0; i<promises.length; ++i) {\n\t\t\t\tx = promises[i];\n\t\t\t\tif (x === void 0 && !(i in promises)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\th = getHandler(x);\n\t\t\t\tif(h.state() !== 0) {\n\t\t\t\t\tresolver.become(h);\n\t\t\t\t\tvisitRemaining(promises, i+1, h);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\th.visit(resolver, resolver.resolve, resolver.reject);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new Promise(Handler, resolver);\n\t\t}\n\n\t\t// Promise internals\n\t\t// Below this, everything is @private\n\n\t\t/**\n\t\t * Get an appropriate handler for x, without checking for cycles\n\t\t * @param {*} x\n\t\t * @returns {object} handler\n\t\t */\n\t\tfunction getHandler(x) {\n\t\t\tif(isPromise(x)) {\n\t\t\t\treturn x._handler.join();\n\t\t\t}\n\t\t\treturn maybeThenable(x) ? getHandlerUntrusted(x) : new Fulfilled(x);\n\t\t}\n\n\t\t/**\n\t\t * Get a handler for thenable x.\n\t\t * NOTE: You must only call this if maybeThenable(x) == true\n\t\t * @param {object|function|Promise} x\n\t\t * @returns {object} handler\n\t\t */\n\t\tfunction getHandlerMaybeThenable(x) {\n\t\t\treturn isPromise(x) ? x._handler.join() : getHandlerUntrusted(x);\n\t\t}\n\n\t\t/**\n\t\t * Get a handler for potentially untrusted thenable x\n\t\t * @param {*} x\n\t\t * @returns {object} handler\n\t\t */\n\t\tfunction getHandlerUntrusted(x) {\n\t\t\ttry {\n\t\t\t\tvar untrustedThen = x.then;\n\t\t\t\treturn typeof untrustedThen === 'function'\n\t\t\t\t\t? new Thenable(untrustedThen, x)\n\t\t\t\t\t: new Fulfilled(x);\n\t\t\t} catch(e) {\n\t\t\t\treturn new Rejected(e);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Handler for a promise that is pending forever\n\t\t * @constructor\n\t\t */\n\t\tfunction Handler() {}\n\n\t\tHandler.prototype.when\n\t\t\t= Handler.prototype.become\n\t\t\t= Handler.prototype.notify // deprecated\n\t\t\t= Handler.prototype.fail\n\t\t\t= Handler.prototype._unreport\n\t\t\t= Handler.prototype._report\n\t\t\t= noop;\n\n\t\tHandler.prototype._state = 0;\n\n\t\tHandler.prototype.state = function() {\n\t\t\treturn this._state;\n\t\t};\n\n\t\t/**\n\t\t * Recursively collapse handler chain to find the handler\n\t\t * nearest to the fully resolved value.\n\t\t * @returns {object} handler nearest the fully resolved value\n\t\t */\n\t\tHandler.prototype.join = function() {\n\t\t\tvar h = this;\n\t\t\twhile(h.handler !== void 0) {\n\t\t\t\th = h.handler;\n\t\t\t}\n\t\t\treturn h;\n\t\t};\n\n\t\tHandler.prototype.chain = function(to, receiver, fulfilled, rejected, progress) {\n\t\t\tthis.when({\n\t\t\t\tresolver: to,\n\t\t\t\treceiver: receiver,\n\t\t\t\tfulfilled: fulfilled,\n\t\t\t\trejected: rejected,\n\t\t\t\tprogress: progress\n\t\t\t});\n\t\t};\n\n\t\tHandler.prototype.visit = function(receiver, fulfilled, rejected, progress) {\n\t\t\tthis.chain(failIfRejected, receiver, fulfilled, rejected, progress);\n\t\t};\n\n\t\tHandler.prototype.fold = function(f, z, c, to) {\n\t\t\tthis.when(new Fold(f, z, c, to));\n\t\t};\n\n\t\t/**\n\t\t * Handler that invokes fail() on any handler it becomes\n\t\t * @constructor\n\t\t */\n\t\tfunction FailIfRejected() {}\n\n\t\tinherit(Handler, FailIfRejected);\n\n\t\tFailIfRejected.prototype.become = function(h) {\n\t\t\th.fail();\n\t\t};\n\n\t\tvar failIfRejected = new FailIfRejected();\n\n\t\t/**\n\t\t * Handler that manages a queue of consumers waiting on a pending promise\n\t\t * @constructor\n\t\t */\n\t\tfunction Pending(receiver, inheritedContext) {\n\t\t\tPromise.createContext(this, inheritedContext);\n\n\t\t\tthis.consumers = void 0;\n\t\t\tthis.receiver = receiver;\n\t\t\tthis.handler = void 0;\n\t\t\tthis.resolved = false;\n\t\t}\n\n\t\tinherit(Handler, Pending);\n\n\t\tPending.prototype._state = 0;\n\n\t\tPending.prototype.resolve = function(x) {\n\t\t\tthis.become(getHandler(x));\n\t\t};\n\n\t\tPending.prototype.reject = function(x) {\n\t\t\tif(this.resolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.become(new Rejected(x));\n\t\t};\n\n\t\tPending.prototype.join = function() {\n\t\t\tif (!this.resolved) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar h = this;\n\n\t\t\twhile (h.handler !== void 0) {\n\t\t\t\th = h.handler;\n\t\t\t\tif (h === this) {\n\t\t\t\t\treturn this.handler = cycle();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn h;\n\t\t};\n\n\t\tPending.prototype.run = function() {\n\t\t\tvar q = this.consumers;\n\t\t\tvar handler = this.join();\n\t\t\tthis.consumers = void 0;\n\n\t\t\tfor (var i = 0; i < q.length; ++i) {\n\t\t\t\thandler.when(q[i]);\n\t\t\t}\n\t\t};\n\n\t\tPending.prototype.become = function(handler) {\n\t\t\tif(this.resolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.resolved = true;\n\t\t\tthis.handler = handler;\n\t\t\tif(this.consumers !== void 0) {\n\t\t\t\ttasks.enqueue(this);\n\t\t\t}\n\n\t\t\tif(this.context !== void 0) {\n\t\t\t\thandler._report(this.context);\n\t\t\t}\n\t\t};\n\n\t\tPending.prototype.when = function(continuation) {\n\t\t\tif(this.resolved) {\n\t\t\t\ttasks.enqueue(new ContinuationTask(continuation, this.handler));\n\t\t\t} else {\n\t\t\t\tif(this.consumers === void 0) {\n\t\t\t\t\tthis.consumers = [continuation];\n\t\t\t\t} else {\n\t\t\t\t\tthis.consumers.push(continuation);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * @deprecated\n\t\t */\n\t\tPending.prototype.notify = function(x) {\n\t\t\tif(!this.resolved) {\n\t\t\t\ttasks.enqueue(new ProgressTask(x, this));\n\t\t\t}\n\t\t};\n\n\t\tPending.prototype.fail = function(context) {\n\t\t\tvar c = typeof context === 'undefined' ? this.context : context;\n\t\t\tthis.resolved && this.handler.join().fail(c);\n\t\t};\n\n\t\tPending.prototype._report = function(context) {\n\t\t\tthis.resolved && this.handler.join()._report(context);\n\t\t};\n\n\t\tPending.prototype._unreport = function() {\n\t\t\tthis.resolved && this.handler.join()._unreport();\n\t\t};\n\n\t\t/**\n\t\t * Wrap another handler and force it into a future stack\n\t\t * @param {object} handler\n\t\t * @constructor\n\t\t */\n\t\tfunction Async(handler) {\n\t\t\tthis.handler = handler;\n\t\t}\n\n\t\tinherit(Handler, Async);\n\n\t\tAsync.prototype.when = function(continuation) {\n\t\t\ttasks.enqueue(new ContinuationTask(continuation, this));\n\t\t};\n\n\t\tAsync.prototype._report = function(context) {\n\t\t\tthis.join()._report(context);\n\t\t};\n\n\t\tAsync.prototype._unreport = function() {\n\t\t\tthis.join()._unreport();\n\t\t};\n\n\t\t/**\n\t\t * Handler that wraps an untrusted thenable and assimilates it in a future stack\n\t\t * @param {function} then\n\t\t * @param {{then: function}} thenable\n\t\t * @constructor\n\t\t */\n\t\tfunction Thenable(then, thenable) {\n\t\t\tPending.call(this);\n\t\t\ttasks.enqueue(new AssimilateTask(then, thenable, this));\n\t\t}\n\n\t\tinherit(Pending, Thenable);\n\n\t\t/**\n\t\t * Handler for a fulfilled promise\n\t\t * @param {*} x fulfillment value\n\t\t * @constructor\n\t\t */\n\t\tfunction Fulfilled(x) {\n\t\t\tPromise.createContext(this);\n\t\t\tthis.value = x;\n\t\t}\n\n\t\tinherit(Handler, Fulfilled);\n\n\t\tFulfilled.prototype._state = 1;\n\n\t\tFulfilled.prototype.fold = function(f, z, c, to) {\n\t\t\trunContinuation3(f, z, this, c, to);\n\t\t};\n\n\t\tFulfilled.prototype.when = function(cont) {\n\t\t\trunContinuation1(cont.fulfilled, this, cont.receiver, cont.resolver);\n\t\t};\n\n\t\tvar errorId = 0;\n\n\t\t/**\n\t\t * Handler for a rejected promise\n\t\t * @param {*} x rejection reason\n\t\t * @constructor\n\t\t */\n\t\tfunction Rejected(x) {\n\t\t\tPromise.createContext(this);\n\n\t\t\tthis.id = ++errorId;\n\t\t\tthis.value = x;\n\t\t\tthis.handled = false;\n\t\t\tthis.reported = false;\n\n\t\t\tthis._report();\n\t\t}\n\n\t\tinherit(Handler, Rejected);\n\n\t\tRejected.prototype._state = -1;\n\n\t\tRejected.prototype.fold = function(f, z, c, to) {\n\t\t\tto.become(this);\n\t\t};\n\n\t\tRejected.prototype.when = function(cont) {\n\t\t\tif(typeof cont.rejected === 'function') {\n\t\t\t\tthis._unreport();\n\t\t\t}\n\t\t\trunContinuation1(cont.rejected, this, cont.receiver, cont.resolver);\n\t\t};\n\n\t\tRejected.prototype._report = function(context) {\n\t\t\ttasks.afterQueue(new ReportTask(this, context));\n\t\t};\n\n\t\tRejected.prototype._unreport = function() {\n\t\t\tif(this.handled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handled = true;\n\t\t\ttasks.afterQueue(new UnreportTask(this));\n\t\t};\n\n\t\tRejected.prototype.fail = function(context) {\n\t\t\tPromise.onFatalRejection(this, context === void 0 ? this.context : context);\n\t\t};\n\n\t\tfunction ReportTask(rejection, context) {\n\t\t\tthis.rejection = rejection;\n\t\t\tthis.context = context;\n\t\t}\n\n\t\tReportTask.prototype.run = function() {\n\t\t\tif(!this.rejection.handled) {\n\t\t\t\tthis.rejection.reported = true;\n\t\t\t\tPromise.onPotentiallyUnhandledRejection(this.rejection, this.context);\n\t\t\t}\n\t\t};\n\n\t\tfunction UnreportTask(rejection) {\n\t\t\tthis.rejection = rejection;\n\t\t}\n\n\t\tUnreportTask.prototype.run = function() {\n\t\t\tif(this.rejection.reported) {\n\t\t\t\tPromise.onPotentiallyUnhandledRejectionHandled(this.rejection);\n\t\t\t}\n\t\t};\n\n\t\t// Unhandled rejection hooks\n\t\t// By default, everything is a noop\n\n\t\t// TODO: Better names: \"annotate\"?\n\t\tPromise.createContext\n\t\t\t= Promise.enterContext\n\t\t\t= Promise.exitContext\n\t\t\t= Promise.onPotentiallyUnhandledRejection\n\t\t\t= Promise.onPotentiallyUnhandledRejectionHandled\n\t\t\t= Promise.onFatalRejection\n\t\t\t= noop;\n\n\t\t// Errors and singletons\n\n\t\tvar foreverPendingHandler = new Handler();\n\t\tvar foreverPendingPromise = new Promise(Handler, foreverPendingHandler);\n\n\t\tfunction cycle() {\n\t\t\treturn new Rejected(new TypeError('Promise cycle'));\n\t\t}\n\n\t\t// Task runners\n\n\t\t/**\n\t\t * Run a single consumer\n\t\t * @constructor\n\t\t */\n\t\tfunction ContinuationTask(continuation, handler) {\n\t\t\tthis.continuation = continuation;\n\t\t\tthis.handler = handler;\n\t\t}\n\n\t\tContinuationTask.prototype.run = function() {\n\t\t\tthis.handler.join().when(this.continuation);\n\t\t};\n\n\t\t/**\n\t\t * Run a queue of progress handlers\n\t\t * @constructor\n\t\t */\n\t\tfunction ProgressTask(value, handler) {\n\t\t\tthis.handler = handler;\n\t\t\tthis.value = value;\n\t\t}\n\n\t\tProgressTask.prototype.run = function() {\n\t\t\tvar q = this.handler.consumers;\n\t\t\tif(q === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var c, i = 0; i < q.length; ++i) {\n\t\t\t\tc = q[i];\n\t\t\t\trunNotify(c.progress, this.value, this.handler, c.receiver, c.resolver);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Assimilate a thenable, sending it's value to resolver\n\t\t * @param {function} then\n\t\t * @param {object|function} thenable\n\t\t * @param {object} resolver\n\t\t * @constructor\n\t\t */\n\t\tfunction AssimilateTask(then, thenable, resolver) {\n\t\t\tthis._then = then;\n\t\t\tthis.thenable = thenable;\n\t\t\tthis.resolver = resolver;\n\t\t}\n\n\t\tAssimilateTask.prototype.run = function() {\n\t\t\tvar h = this.resolver;\n\t\t\ttryAssimilate(this._then, this.thenable, _resolve, _reject, _notify);\n\n\t\t\tfunction _resolve(x) { h.resolve(x); }\n\t\t\tfunction _reject(x)  { h.reject(x); }\n\t\t\tfunction _notify(x)  { h.notify(x); }\n\t\t};\n\n\t\tfunction tryAssimilate(then, thenable, resolve, reject, notify) {\n\t\t\ttry {\n\t\t\t\tthen.call(thenable, resolve, reject, notify);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Fold a handler value with z\n\t\t * @constructor\n\t\t */\n\t\tfunction Fold(f, z, c, to) {\n\t\t\tthis.f = f; this.z = z; this.c = c; this.to = to;\n\t\t\tthis.resolver = failIfRejected;\n\t\t\tthis.receiver = this;\n\t\t}\n\n\t\tFold.prototype.fulfilled = function(x) {\n\t\t\tthis.f.call(this.c, this.z, x, this.to);\n\t\t};\n\n\t\tFold.prototype.rejected = function(x) {\n\t\t\tthis.to.reject(x);\n\t\t};\n\n\t\tFold.prototype.progress = function(x) {\n\t\t\tthis.to.notify(x);\n\t\t};\n\n\t\t// Other helpers\n\n\t\t/**\n\t\t * @param {*} x\n\t\t * @returns {boolean} true iff x is a trusted Promise\n\t\t */\n\t\tfunction isPromise(x) {\n\t\t\treturn x instanceof Promise;\n\t\t}\n\n\t\t/**\n\t\t * Test just enough to rule out primitives, in order to take faster\n\t\t * paths in some code\n\t\t * @param {*} x\n\t\t * @returns {boolean} false iff x is guaranteed *not* to be a thenable\n\t\t */\n\t\tfunction maybeThenable(x) {\n\t\t\treturn (typeof x === 'object' || typeof x === 'function') && x !== null;\n\t\t}\n\n\t\tfunction runContinuation1(f, h, receiver, next) {\n\t\t\tif(typeof f !== 'function') {\n\t\t\t\treturn next.become(h);\n\t\t\t}\n\n\t\t\tPromise.enterContext(h);\n\t\t\ttryCatchReject(f, h.value, receiver, next);\n\t\t\tPromise.exitContext();\n\t\t}\n\n\t\tfunction runContinuation3(f, x, h, receiver, next) {\n\t\t\tif(typeof f !== 'function') {\n\t\t\t\treturn next.become(h);\n\t\t\t}\n\n\t\t\tPromise.enterContext(h);\n\t\t\ttryCatchReject3(f, x, h.value, receiver, next);\n\t\t\tPromise.exitContext();\n\t\t}\n\n\t\t/**\n\t\t * @deprecated\n\t\t */\n\t\tfunction runNotify(f, x, h, receiver, next) {\n\t\t\tif(typeof f !== 'function') {\n\t\t\t\treturn next.notify(x);\n\t\t\t}\n\n\t\t\tPromise.enterContext(h);\n\t\t\ttryCatchReturn(f, x, receiver, next);\n\t\t\tPromise.exitContext();\n\t\t}\n\n\t\tfunction tryCatch2(f, a, b) {\n\t\t\ttry {\n\t\t\t\treturn f(a, b);\n\t\t\t} catch(e) {\n\t\t\t\treturn reject(e);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Return f.call(thisArg, x), or if it throws return a rejected promise for\n\t\t * the thrown exception\n\t\t */\n\t\tfunction tryCatchReject(f, x, thisArg, next) {\n\t\t\ttry {\n\t\t\t\tnext.become(getHandler(f.call(thisArg, x)));\n\t\t\t} catch(e) {\n\t\t\t\tnext.become(new Rejected(e));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Same as above, but includes the extra argument parameter.\n\t\t */\n\t\tfunction tryCatchReject3(f, x, y, thisArg, next) {\n\t\t\ttry {\n\t\t\t\tf.call(thisArg, x, y, next);\n\t\t\t} catch(e) {\n\t\t\t\tnext.become(new Rejected(e));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @deprecated\n\t\t * Return f.call(thisArg, x), or if it throws, *return* the exception\n\t\t */\n\t\tfunction tryCatchReturn(f, x, thisArg, next) {\n\t\t\ttry {\n\t\t\t\tnext.notify(f.call(thisArg, x));\n\t\t\t} catch(e) {\n\t\t\t\tnext.notify(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction inherit(Parent, Child) {\n\t\t\tChild.prototype = objectCreate(Parent.prototype);\n\t\t\tChild.prototype.constructor = Child;\n\t\t}\n\n\t\tfunction snd(x, y) {\n\t\t\treturn y;\n\t\t}\n\n\t\tfunction noop() {}\n\n\t\treturn Promise;\n\t};\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));\n\n},{}]},{},[1])\n(1)\n});\n;\n(function(__global) {\n  \n$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) {\n  return obj.__proto__;\n};\n\nvar $__Object$defineProperty;\n(function () {\n  try {\n    if (!!Object.defineProperty({}, 'a', {})) {\n      $__Object$defineProperty = Object.defineProperty;\n    }\n  } catch (e) {\n    $__Object$defineProperty = function (obj, prop, opt) {\n      try {\n        obj[prop] = opt.value || opt.get.call(obj);\n      }\n      catch(e) {}\n    }\n  }\n}());\n\n$__Object$create = Object.create || function(o, props) {\n  function F() {}\n  F.prototype = o;\n\n  if (typeof(props) === \"object\") {\n    for (prop in props) {\n      if (props.hasOwnProperty((prop))) {\n        F[prop] = props[prop];\n      }\n    }\n  }\n  return new F();\n};\n\n/*\n*********************************************************************************************\n\n  Loader Polyfill\n\n    - Implemented exactly to the 2014-07-18 Specification Draft.\n\n    - Functions are commented with their spec numbers, with spec differences commented.\n\n    - Spec bugs are commented in this code with links.\n\n    - Abstract functions have been combined where possible, and their associated functions\n      commented.\n\n    - Realm implementation is entirely omitted.\n\n    - Loader module table iteration currently not yet implemented.\n\n*********************************************************************************************\n*/\n\n// Some Helpers\n\n// logs a linkset snapshot for debugging\n/* function snapshot(loader) {\n  console.log('---Snapshot---');\n  for (var i = 0; i < loader.loads.length; i++) {\n    var load = loader.loads[i];\n    var linkSetLog = '  ' + load.name + ' (' + load.status + '): ';\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      linkSetLog += '{' + logloads(load.linkSets[j].loads) + '} ';\n    }\n    console.log(linkSetLog);\n  }\n  console.log('');\n}\nfunction logloads(loads) {\n  var log = '';\n  for (var k = 0; k < loads.length; k++)\n    log += loads[k].name + (k != loads.length - 1 ? ' ' : '');\n  return log;\n} */\n\n\n/* function checkInvariants() {\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2603#c1\n\n  var loads = System._loader.loads;\n  var linkSets = [];\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'Each load is loading or loaded');\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      var linkSet = load.linkSets[j];\n\n      for (var k = 0; k < linkSet.loads.length; k++)\n        console.assert(loads.indexOf(linkSet.loads[k]) != -1, 'linkSet loads are a subset of loader loads');\n\n      if (linkSets.indexOf(linkSet) == -1)\n        linkSets.push(linkSet);\n    }\n  }\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    for (var j = 0; j < linkSets.length; j++) {\n      var linkSet = linkSets[j];\n\n      if (linkSet.loads.indexOf(load) != -1)\n        console.assert(load.linkSets.indexOf(linkSet) != -1, 'linkSet contains load -> load contains linkSet');\n\n      if (load.linkSets.indexOf(linkSet) != -1)\n        console.assert(linkSet.loads.indexOf(load) != -1, 'load contains linkSet -> linkSet contains load');\n    }\n  }\n\n  for (var i = 0; i < linkSets.length; i++) {\n    var linkSet = linkSets[i];\n    for (var j = 0; j < linkSet.loads.length; j++) {\n      var load = linkSet.loads[j];\n\n      for (var k = 0; k < load.dependencies.length; k++) {\n        var depName = load.dependencies[k].value;\n        var depLoad;\n        for (var l = 0; l < loads.length; l++) {\n          if (loads[l].name != depName)\n            continue;\n          depLoad = loads[l];\n          break;\n        }\n\n        // loading records are allowed not to have their dependencies yet\n        // if (load.status != 'loading')\n        //  console.assert(depLoad, 'depLoad found');\n\n        // console.assert(linkSet.loads.indexOf(depLoad) != -1, 'linkset contains all dependencies');\n      }\n    }\n  }\n} */\n\n\n(function() {\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n  console.assert = console.assert || function() {};\n\n  // IE8 support\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, thisLen = this.length; i < thisLen; i++) {\n      if (this[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var defineProperty = $__Object$defineProperty;\n\n  // 15.2.3 - Runtime Semantics: Loader State\n\n  // 15.2.3.11\n  function createLoaderLoad(object) {\n    return {\n      // modules is an object for ES5 implementation\n      modules: {},\n      loads: [],\n      loaderObj: object\n    };\n  }\n\n  // 15.2.3.2 Load Records and LoadRequest Objects\n\n  // 15.2.3.2.1\n  function createLoad(name) {\n    return {\n      status: 'loading',\n      name: name,\n      linkSets: [],\n      dependencies: [],\n      metadata: {}\n    };\n  }\n\n  // 15.2.3.2.2 createLoadRequestObject, absorbed into calling functions\n\n  // 15.2.4\n\n  // 15.2.4.1\n  function loadModule(loader, name, options) {\n    return new Promise(asyncStartLoadPartwayThrough({\n      step: options.address ? 'fetch' : 'locate',\n      loader: loader,\n      moduleName: name,\n      // allow metadata for import https://bugs.ecmascript.org/show_bug.cgi?id=3091\n      moduleMetadata: options && options.metadata || {},\n      moduleSource: options.source,\n      moduleAddress: options.address\n    }));\n  }\n\n  // 15.2.4.2\n  function requestLoad(loader, request, refererName, refererAddress) {\n    // 15.2.4.2.1 CallNormalize\n    return new Promise(function(resolve, reject) {\n      resolve(loader.loaderObj.normalize(request, refererName, refererAddress));\n    })\n    // 15.2.4.2.2 GetOrCreateLoad\n    .then(function(name) {\n      var load;\n      if (loader.modules[name]) {\n        load = createLoad(name);\n        load.status = 'linked';\n        // https://bugs.ecmascript.org/show_bug.cgi?id=2795\n        // load.module = loader.modules[name];\n        return load;\n      }\n\n      for (var i = 0, l = loader.loads.length; i < l; i++) {\n        load = loader.loads[i];\n        if (load.name != name)\n          continue;\n        console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded');\n        return load;\n      }\n\n      load = createLoad(name);\n      loader.loads.push(load);\n\n      proceedToLocate(loader, load);\n\n      return load;\n    });\n  }\n\n  // 15.2.4.3\n  function proceedToLocate(loader, load) {\n    proceedToFetch(loader, load,\n      Promise.resolve()\n      // 15.2.4.3.1 CallLocate\n      .then(function() {\n        return loader.loaderObj.locate({ name: load.name, metadata: load.metadata });\n      })\n    );\n  }\n\n  // 15.2.4.4\n  function proceedToFetch(loader, load, p) {\n    proceedToTranslate(loader, load,\n      p\n      // 15.2.4.4.1 CallFetch\n      .then(function(address) {\n        // adjusted, see https://bugs.ecmascript.org/show_bug.cgi?id=2602\n        if (load.status != 'loading')\n          return;\n        load.address = address;\n\n        return loader.loaderObj.fetch({ name: load.name, metadata: load.metadata, address: address });\n      })\n    );\n  }\n\n  var anonCnt = 0;\n\n  // 15.2.4.5\n  function proceedToTranslate(loader, load, p) {\n    p\n    // 15.2.4.5.1 CallTranslate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      return loader.loaderObj.translate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.2 CallInstantiate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      load.source = source;\n      return loader.loaderObj.instantiate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.3 InstantiateSucceeded\n    .then(function(instantiateResult) {\n      if (load.status != 'loading')\n        return;\n\n      if (instantiateResult === undefined) {\n        load.address = load.address || '<Anonymous Module ' + ++anonCnt + '>';\n\n        // NB instead of load.kind, use load.isDeclarative\n        load.isDeclarative = true;\n        // parse sets load.declare, load.depsList\n        loader.loaderObj.parse(load);\n      }\n      else if (typeof instantiateResult == 'object') {\n        load.depsList = instantiateResult.deps || [];\n        load.execute = instantiateResult.execute;\n        load.isDeclarative = false;\n      }\n      else\n        throw TypeError('Invalid instantiate return value');\n\n      // 15.2.4.6 ProcessLoadDependencies\n      load.dependencies = [];\n      var depsList = load.depsList;\n\n      var loadPromises = [];\n      for (var i = 0, l = depsList.length; i < l; i++) (function(request, index) {\n        loadPromises.push(\n          requestLoad(loader, request, load.name, load.address)\n\n          // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)\n          .then(function(depLoad) {\n\n            console.assert(!load.dependencies.some(function(dep) {\n              return dep.key == request;\n            }), 'not already a dependency');\n\n            // adjusted from spec to maintain dependency order\n            // this is due to the System.register internal implementation needs\n            load.dependencies[index] = {\n              key: request,\n              value: depLoad.name\n            };\n\n            if (depLoad.status != 'linked') {\n              var linkSets = load.linkSets.concat([]);\n              for (var i = 0, l = linkSets.length; i < l; i++)\n                addLoadToLinkSet(linkSets[i], depLoad);\n            }\n\n            // console.log('AddDependencyLoad ' + depLoad.name + ' for ' + load.name);\n            // snapshot(loader);\n          })\n        );\n      })(depsList[i], i);\n\n      return Promise.all(loadPromises);\n    })\n\n    // 15.2.4.6.2 LoadSucceeded\n    .then(function() {\n      // console.log('LoadSucceeded ' + load.name);\n      // snapshot(loader);\n\n      console.assert(load.status == 'loading', 'is loading');\n\n      load.status = 'loaded';\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++)\n        updateLinkSetOnLoad(linkSets[i], load);\n    })\n\n    // 15.2.4.5.4 LoadFailed\n    ['catch'](function(exc) {\n      console.assert(load.status == 'loading', 'is loading on fail');\n      load.status = 'failed';\n      load.exception = exc;\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++) {\n        linkSetFailed(linkSets[i], load, exc);\n      }\n\n      console.assert(load.linkSets.length == 0, 'linkSets not removed');\n    });\n  }\n\n  // 15.2.4.7 PromiseOfStartLoadPartwayThrough absorbed into calling functions\n\n  // 15.2.4.7.1\n  function asyncStartLoadPartwayThrough(stepState) {\n    return function(resolve, reject) {\n      var loader = stepState.loader;\n      var name = stepState.moduleName;\n      var step = stepState.step;\n\n      if (loader.modules[name])\n        throw new TypeError('\"' + name + '\" already exists in the module table');\n\n      // NB this still seems wrong for LoadModule as we may load a dependency\n      // of another module directly before it has finished loading.\n      // see https://bugs.ecmascript.org/show_bug.cgi?id=2994\n      for (var i = 0, l = loader.loads.length; i < l; i++)\n        if (loader.loads[i].name == name)\n          throw new TypeError('\"' + name + '\" already loading');\n\n      var load = createLoad(name);\n\n      load.metadata = stepState.moduleMetadata;\n\n      var linkSet = createLinkSet(loader, load);\n\n      loader.loads.push(load);\n\n      resolve(linkSet.done);\n\n      if (step == 'locate')\n        proceedToLocate(loader, load);\n\n      else if (step == 'fetch')\n        proceedToFetch(loader, load, Promise.resolve(stepState.moduleAddress));\n\n      else {\n        console.assert(step == 'translate', 'translate step');\n        load.address = stepState.moduleAddress;\n        proceedToTranslate(loader, load, Promise.resolve(stepState.moduleSource));\n      }\n    }\n  }\n\n  // Declarative linking functions run through alternative implementation:\n  // 15.2.5.1.1 CreateModuleLinkageRecord not implemented\n  // 15.2.5.1.2 LookupExport not implemented\n  // 15.2.5.1.3 LookupModuleDependency not implemented\n\n  // 15.2.5.2.1\n  function createLinkSet(loader, startingLoad) {\n    var linkSet = {\n      loader: loader,\n      loads: [],\n      startingLoad: startingLoad, // added see spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n      loadingCount: 0\n    };\n    linkSet.done = new Promise(function(resolve, reject) {\n      linkSet.resolve = resolve;\n      linkSet.reject = reject;\n    });\n    addLoadToLinkSet(linkSet, startingLoad);\n    return linkSet;\n  }\n  // 15.2.5.2.2\n  function addLoadToLinkSet(linkSet, load) {\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set');\n\n    for (var i = 0, l = linkSet.loads.length; i < l; i++)\n      if (linkSet.loads[i] == load)\n        return;\n\n    linkSet.loads.push(load);\n    load.linkSets.push(linkSet);\n\n    // adjustment, see https://bugs.ecmascript.org/show_bug.cgi?id=2603\n    if (load.status != 'loaded') {\n      linkSet.loadingCount++;\n    }\n\n    var loader = linkSet.loader;\n\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var name = load.dependencies[i].value;\n\n      if (loader.modules[name])\n        continue;\n\n      for (var j = 0, d = loader.loads.length; j < d; j++) {\n        if (loader.loads[j].name != name)\n          continue;\n\n        addLoadToLinkSet(linkSet, loader.loads[j]);\n        break;\n      }\n    }\n    // console.log('add to linkset ' + load.name);\n    // snapshot(linkSet.loader);\n  }\n\n  // linking errors can be generic or load-specific\n  // this is necessary for debugging info\n  function doLink(linkSet) {\n    var error = false;\n    try {\n      link(linkSet, function(load, exc) {\n        linkSetFailed(linkSet, load, exc);\n        error = true;\n      });\n    }\n    catch(e) {\n      linkSetFailed(linkSet, null, e);\n      error = true;\n    }\n    return error;\n  }\n\n  // 15.2.5.2.3\n  function updateLinkSetOnLoad(linkSet, load) {\n    // console.log('update linkset on load ' + load.name);\n    // snapshot(linkSet.loader);\n\n    console.assert(load.status == 'loaded' || load.status == 'linked', 'loaded or linked');\n\n    linkSet.loadingCount--;\n\n    if (linkSet.loadingCount > 0)\n      return;\n\n    // adjusted for spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n    var startingLoad = linkSet.startingLoad;\n\n    // non-executing link variation for loader tracing\n    // on the server. Not in spec.\n    /***/\n    if (linkSet.loader.loaderObj.execute === false) {\n      var loads = [].concat(linkSet.loads);\n      for (var i = 0, l = loads.length; i < l; i++) {\n        var load = loads[i];\n        load.module = !load.isDeclarative ? {\n          module: _newModule({})\n        } : {\n          name: load.name,\n          module: _newModule({}),\n          evaluated: true\n        };\n        load.status = 'linked';\n        finishLoad(linkSet.loader, load);\n      }\n      return linkSet.resolve(startingLoad);\n    }\n    /***/\n\n    var abrupt = doLink(linkSet);\n\n    if (abrupt)\n      return;\n\n    console.assert(linkSet.loads.length == 0, 'loads cleared');\n\n    linkSet.resolve(startingLoad);\n  }\n\n  // 15.2.5.2.4\n  function linkSetFailed(linkSet, load, exc) {\n    var loader = linkSet.loader;\n\n    if (linkSet.loads[0].name != load.name)\n      exc = addToError(exc, 'Error loading \"' + load.name + '\" from \"' + linkSet.loads[0].name + '\" at ' + (linkSet.loads[0].address || '<unknown>') + '\\n');\n\n    exc = addToError(exc, 'Error loading \"' + load.name + '\" at ' + (load.address || '<unknown>') + '\\n');\n\n    var loads = linkSet.loads.concat([]);\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var load = loads[i];\n\n      // store all failed load records\n      loader.loaderObj.failed = loader.loaderObj.failed || [];\n      if (indexOf.call(loader.loaderObj.failed, load) == -1)\n        loader.loaderObj.failed.push(load);\n\n      var linkIndex = indexOf.call(load.linkSets, linkSet);\n      console.assert(linkIndex != -1, 'link not present');\n      load.linkSets.splice(linkIndex, 1);\n      if (load.linkSets.length == 0) {\n        var globalLoadsIndex = indexOf.call(linkSet.loader.loads, load);\n        if (globalLoadsIndex != -1)\n          linkSet.loader.loads.splice(globalLoadsIndex, 1);\n      }\n    }\n    linkSet.reject(exc);\n  }\n\n  // 15.2.5.2.5\n  function finishLoad(loader, load) {\n    // add to global trace if tracing\n    if (loader.loaderObj.trace) {\n      if (!loader.loaderObj.loads)\n        loader.loaderObj.loads = {};\n      var depMap = {};\n      load.dependencies.forEach(function(dep) {\n        depMap[dep.key] = dep.value;\n      });\n      loader.loaderObj.loads[load.name] = {\n        name: load.name,\n        deps: load.dependencies.map(function(dep){ return dep.key }),\n        depMap: depMap,\n        address: load.address,\n        metadata: load.metadata,\n        source: load.source,\n        kind: load.isDeclarative ? 'declarative' : 'dynamic'\n      };\n    }\n    // if not anonymous, add to the module table\n    if (load.name) {\n      console.assert(!loader.modules[load.name], 'load not in module table');\n      loader.modules[load.name] = load.module;\n    }\n    var loadIndex = indexOf.call(loader.loads, load);\n    if (loadIndex != -1)\n      loader.loads.splice(loadIndex, 1);\n    for (var i = 0, l = load.linkSets.length; i < l; i++) {\n      loadIndex = indexOf.call(load.linkSets[i].loads, load);\n      if (loadIndex != -1)\n        load.linkSets[i].loads.splice(loadIndex, 1);\n    }\n    load.linkSets.splice(0, load.linkSets.length);\n  }\n\n  // 15.2.5.3 Module Linking Groups\n\n  // 15.2.5.3.2 BuildLinkageGroups alternative implementation\n  // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755)\n  // 1. groups is an already-interleaved array of group kinds\n  // 2. load.groupIndex is set when this function runs\n  // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic)\n  function buildLinkageGroups(load, loads, groups, loader) {\n    groups[load.groupIndex] = groups[load.groupIndex] || [];\n\n    // if the load already has a group index and its in its group, its already been done\n    // this logic naturally handles cycles\n    if (indexOf.call(groups[load.groupIndex], load) != -1)\n      return;\n\n    // now add it to the group to indicate its been seen\n    groups[load.groupIndex].push(load);\n\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var loadDep = loads[i];\n\n      // dependencies not found are already linked\n      for (var j = 0; j < load.dependencies.length; j++) {\n        if (loadDep.name == load.dependencies[j].value) {\n          // by definition all loads in linkset are loaded, not linked\n          console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!');\n\n          // if it is a group transition, the index of the dependency has gone up\n          // otherwise it is the same as the parent\n          var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative);\n\n          // the group index of an entry is always the maximum\n          if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) {\n\n            // if already in a group, remove from the old group\n            if (loadDep.groupIndex) {\n              groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1);\n\n              // if the old group is empty, then we have a mixed depndency cycle\n              if (groups[loadDep.groupIndex].length == 0)\n                throw new TypeError(\"Mixed dependency cycle detected\");\n            }\n\n            loadDep.groupIndex = loadDepGroupIndex;\n          }\n\n          buildLinkageGroups(loadDep, loads, groups, loader);\n        }\n      }\n    }\n  }\n\n  function doDynamicExecute(linkSet, load, linkError) {\n    try {\n      var module = load.execute();\n    }\n    catch(e) {\n      linkError(load, e);\n      return;\n    }\n    if (!module || !(module instanceof Module))\n      linkError(load, new TypeError('Execution must define a Module instance'));\n    else\n      return module;\n  }\n\n  // 15.2.5.4\n  function link(linkSet, linkError) {\n\n    var loader = linkSet.loader;\n\n    if (!linkSet.loads.length)\n      return;\n\n    // console.log('linking {' + logloads(linkSet.loads) + '}');\n    // snapshot(loader);\n\n    // 15.2.5.3.1 LinkageGroups alternative implementation\n\n    // build all the groups\n    // because the first load represents the top of the tree\n    // for a given linkset, we can work down from there\n    var groups = [];\n    var startingLoad = linkSet.loads[0];\n    startingLoad.groupIndex = 0;\n    buildLinkageGroups(startingLoad, linkSet.loads, groups, loader);\n\n    // determine the kind of the bottom group\n    var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2;\n\n    // run through the groups from bottom to top\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var load = group[j];\n\n        // 15.2.5.5 LinkDeclarativeModules adjusted\n        if (curGroupDeclarative) {\n          linkDeclarativeModule(load, linkSet.loads, loader);\n        }\n        // 15.2.5.6 LinkDynamicModules adjusted\n        else {\n          var module = doDynamicExecute(linkSet, load, linkError);\n          if (!module)\n            return;\n          load.module = {\n            name: load.name,\n            module: module\n          };\n          load.status = 'linked';\n        }\n        finishLoad(loader, load);\n      }\n\n      // alternative current kind for next loop\n      curGroupDeclarative = !curGroupDeclarative;\n    }\n  }\n\n\n  // custom module records for binding graph\n  // store linking module records in a separate table\n  function getOrCreateModuleRecord(name, loader) {\n    var moduleRecords = loader.moduleRecords;\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      module: new Module(), // start from an empty module and extend\n      importers: []\n    });\n  }\n\n  // custom declarative linking function\n  function linkDeclarativeModule(load, loads, loader) {\n    if (load.module)\n      return;\n\n    var module = load.module = getOrCreateModuleRecord(load.name, loader);\n    var moduleObj = load.module.module;\n\n    var registryEntry = load.declare.call(__global, function(name, value) {\n      // NB This should be an Object.defineProperty, but that is very slow.\n      //    By disaling this module write-protection we gain performance.\n      //    It could be useful to allow an option to enable or disable this.\n      module.locked = true;\n      moduleObj[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](moduleObj);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n\n    // setup our setters and execution function\n    module.setters = registryEntry.setters;\n    module.execute = registryEntry.execute;\n\n    // now link all the module dependencies\n    // amending the depMap as we go\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var depName = load.dependencies[i].value;\n      var depModule = loader.modules[depName];\n\n      // if dependency not already in the module registry\n      // then try and link it now\n      if (!depModule) {\n        // get the dependency load record\n        for (var j = 0; j < loads.length; j++) {\n          if (loads[j].name != depName)\n            continue;\n\n          // only link if already not already started linking (stops at circular / dynamic)\n          if (!loads[j].module) {\n            linkDeclarativeModule(loads[j], loads, loader);\n            depModule = loads[j].module;\n          }\n          // if circular, create the module record\n          else {\n            depModule = getOrCreateModuleRecord(depName, loader);\n          }\n        }\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule.importers) {\n        module.dependencies.push(depModule);\n        depModule.importers.push(module);\n      }\n      else {\n        // track dynamic records as null module records as already linked\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depModule.module);\n    }\n\n    load.status = 'linked';\n  }\n\n\n\n  // 15.2.5.5.1 LinkImports not implemented\n  // 15.2.5.7 ResolveExportEntries not implemented\n  // 15.2.5.8 ResolveExports not implemented\n  // 15.2.5.9 ResolveExport not implemented\n  // 15.2.5.10 ResolveImportEntries not implemented\n\n  // 15.2.6.1\n  function evaluateLoadedModule(loader, load) {\n    console.assert(load.status == 'linked', 'is linked ' + load.name);\n\n    doEnsureEvaluated(load.module, [], loader);\n    return load.module.module;\n  }\n\n  /*\n   * Module Object non-exotic for ES5:\n   *\n   * module.module        bound module object\n   * module.execute       execution function for module\n   * module.dependencies  list of module objects for dependencies\n   * See getOrCreateModuleRecord for all properties\n   *\n   */\n  function doExecute(module) {\n    try {\n      module.execute.call(__global);\n    }\n    catch(e) {\n      return e;\n    }\n  }\n\n  // propogate execution errors\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2993\n  function doEnsureEvaluated(module, seen, loader) {\n    var err = ensureEvaluated(module, seen, loader);\n    if (err)\n      throw err;\n  }\n  // 15.2.6.2 EnsureEvaluated adjusted\n  function ensureEvaluated(module, seen, loader) {\n    if (module.evaluated || !module.dependencies)\n      return;\n\n    seen.push(module);\n\n    var deps = module.dependencies;\n    var err;\n\n    for (var i = 0, l = deps.length; i < l; i++) {\n      var dep = deps[i];\n      // dynamic dependencies are empty in module.dependencies\n      // as they are already linked\n      if (!dep)\n        continue;\n      if (indexOf.call(seen, dep) == -1) {\n        err = ensureEvaluated(dep, seen, loader);\n        // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996\n        if (err) {\n          err = addToError(err, 'Error evaluating ' + dep.name + '\\n');\n          return err;\n        }\n      }\n    }\n\n    if (module.failed)\n      return new Error('Module failed execution.');\n\n    if (module.evaluated)\n      return;\n\n    module.evaluated = true;\n    err = doExecute(module);\n    if (err) {\n      module.failed = true;\n    }\n    else if (Object.preventExtensions) {\n      // spec variation\n      // we don't create a new module here because it was created and ammended\n      // we just disable further extensions instead\n      Object.preventExtensions(module.module);\n    }\n\n    module.execute = undefined;\n    return err;\n  }\n\n  function addToError(err, msg) {\n    if (err instanceof Error)\n      err.message = msg + err.message;\n    else\n      err = msg + err;\n    return err;\n  }\n\n  // 26.3 Loader\n\n  // 26.3.1.1\n  function Loader(options) {\n    if (typeof options != 'object')\n      throw new TypeError('Options must be an object');\n\n    if (options.normalize)\n      this.normalize = options.normalize;\n    if (options.locate)\n      this.locate = options.locate;\n    if (options.fetch)\n      this.fetch = options.fetch;\n    if (options.translate)\n      this.translate = options.translate;\n    if (options.instantiate)\n      this.instantiate = options.instantiate;\n\n    this._loader = {\n      loaderObj: this,\n      loads: [],\n      modules: {},\n      importPromises: {},\n      moduleRecords: {}\n    };\n\n    // 26.3.3.6\n    defineProperty(this, 'global', {\n      get: function() {\n        return __global;\n      }\n    });\n\n    // 26.3.3.13 realm not implemented\n  }\n\n  function Module() {}\n\n  // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601\n  function createImportPromise(loader, name, promise) {\n    var importPromises = loader._loader.importPromises;\n    return importPromises[name] = promise.then(function(m) {\n      importPromises[name] = undefined;\n      return m;\n    }, function(e) {\n      importPromises[name] = undefined;\n      throw e;\n    });\n  }\n\n  Loader.prototype = {\n    // 26.3.3.1\n    constructor: Loader,\n    // 26.3.3.2\n    define: function(name, source, options) {\n      // check if already defined\n      if (this._loader.importPromises[name])\n        throw new TypeError('Module is already loading.');\n      return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({\n        step: 'translate',\n        loader: this._loader,\n        moduleName: name,\n        moduleMetadata: options && options.metadata || {},\n        moduleSource: source,\n        moduleAddress: options && options.address\n      })));\n    },\n    // 26.3.3.3\n    'delete': function(name) {\n      return this._loader.modules[name] ? delete this._loader.modules[name] : false;\n    },\n    // 26.3.3.4 entries not implemented\n    // 26.3.3.5\n    get: function(key) {\n      if (!this._loader.modules[key])\n        return;\n      doEnsureEvaluated(this._loader.modules[key], [], this);\n      return this._loader.modules[key].module;\n    },\n    // 26.3.3.7\n    has: function(name) {\n      return !!this._loader.modules[name];\n    },\n    // 26.3.3.8\n    'import': function(name, options) {\n      // run normalize first\n      var loaderObj = this;\n\n      // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659\n      return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address))\n      .then(function(name) {\n        var loader = loaderObj._loader;\n\n        if (loader.modules[name]) {\n          doEnsureEvaluated(loader.modules[name], [], loader._loader);\n          return loader.modules[name].module;\n        }\n\n        return loader.importPromises[name] || createImportPromise(loaderObj, name,\n          loadModule(loader, name, options || {})\n          .then(function(load) {\n            delete loader.importPromises[name];\n            return evaluateLoadedModule(loader, load);\n          }));\n      });\n    },\n    // 26.3.3.9 keys not implemented\n    // 26.3.3.10\n    load: function(name, options) {\n      if (this._loader.modules[name]) {\n        doEnsureEvaluated(this._loader.modules[name], [], this._loader);\n        return Promise.resolve(this._loader.modules[name].module);\n      }\n      return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {}));\n    },\n    // 26.3.3.11\n    module: function(source, options) {\n      var load = createLoad();\n      load.address = options && options.address;\n      var linkSet = createLinkSet(this._loader, load);\n      var sourcePromise = Promise.resolve(source);\n      var loader = this._loader;\n      var p = linkSet.done.then(function() {\n        return evaluateLoadedModule(loader, load);\n      });\n      proceedToTranslate(loader, load, sourcePromise);\n      return p;\n    },\n    // 26.3.3.12\n    newModule: function (obj) {\n      if (typeof obj != 'object')\n        throw new TypeError('Expected object');\n\n      // we do this to be able to tell if a module is a module privately in ES5\n      // by doing m instanceof Module\n      var m = new Module();\n\n      for (var key in obj) {\n        (function (key) {\n          defineProperty(m, key, {\n            configurable: false,\n            enumerable: true,\n            get: function () {\n              return obj[key];\n            }\n          });\n        })(key);\n      }\n\n      if (Object.preventExtensions)\n        Object.preventExtensions(m);\n\n      return m;\n    },\n    // 26.3.3.14\n    set: function(name, module) {\n      if (!(module instanceof Module))\n        throw new TypeError('Loader.set(' + name + ', module) must be a module');\n      this._loader.modules[name] = {\n        module: module\n      };\n    },\n    // 26.3.3.15 values not implemented\n    // 26.3.3.16 @@iterator not implemented\n    // 26.3.3.17 @@toStringTag not implemented\n\n    // 26.3.3.18.1\n    normalize: function(name, referrerName, referrerAddress) {\n      return name;\n    },\n    // 26.3.3.18.2\n    locate: function(load) {\n      return load.name;\n    },\n    // 26.3.3.18.3\n    fetch: function(load) {\n      throw new TypeError('Fetch not implemented');\n    },\n    // 26.3.3.18.4\n    translate: function(load) {\n      return load.source;\n    },\n    parse: function(load) {\n      throw new TypeError('Loader.parse is not implemented');\n    },\n    // 26.3.3.18.5\n    instantiate: function(load) {\n    }\n  };\n\n  var _newModule = Loader.prototype.newModule;\n\n\n  /*\n   * Traceur-specific Parsing Code for Loader\n   */\n  (function() {\n    // parse function is used to parse a load record\n    // Returns an array of ModuleSpecifiers\n    var traceur;\n\n    function doCompile(source, compiler, filename) {\n      try {\n        return compiler.compile(source, filename);\n      }\n      catch(e) {\n        // traceur throws an error array\n        throw e[0];\n      }\n    }\n    Loader.prototype.parse = function(load) {\n      if (!traceur) {\n        if (typeof window == 'undefined' &&\n           typeof WorkerGlobalScope == 'undefined')\n          traceur = require('traceur');\n        else if (__global.traceur)\n          traceur = __global.traceur;\n        else\n          throw new TypeError('Include Traceur for module syntax support');\n      }\n\n      console.assert(load.source, 'Non-empty source');\n\n      var depsList;\n\n      load.isDeclarative = true;\n\n      var options = this.traceurOptions || {};\n      options.modules = 'instantiate';\n      options.script = false;\n      options.sourceMaps = true;\n      options.filename = load.address;\n\n      var compiler = new traceur.Compiler(options);\n\n      var source = doCompile(load.source, compiler, options.filename);\n\n      if (!source)\n        throw new Error('Error evaluating module ' + load.address);\n\n      var sourceMap = compiler.getSourceMap();\n\n      if (__global.btoa && sourceMap)\n        source += '\\n//# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(sourceMap))) + '\\n';\n\n      source = 'var __moduleAddress = \"' + load.address + '\";' + source;\n\n      __eval(source, __global, load);\n    }\n  })();\n\n  if (typeof exports === 'object')\n    module.exports = Loader;\n\n  __global.Reflect = __global.Reflect || {};\n  __global.Reflect.Loader = __global.Reflect.Loader || Loader;\n  __global.Reflect.global = __global.Reflect.global || __global;\n  __global.LoaderPolyfill = Loader;\n\n})();\n\n/*\n*********************************************************************************************\n\n  System Loader Implementation\n\n    - Implemented to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js\n\n    - <script type=\"module\"> supported\n\n*********************************************************************************************\n*/\n\n\n\n(function() {\n  var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined' && !isWorker;\n  var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/);\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n\n  // Helpers\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n\n  function removeDotSegments(input) {\n    var output = [];\n    input.replace(/^(\\.\\.?(\\/|$))+/, '')\n      .replace(/\\/(\\.(\\/|$))+/g, '/')\n      .replace(/\\/\\.\\.$/, '/../')\n      .replace(/\\/?[^\\/]*/g, function (p) {\n        if (p === '/..')\n          output.pop();\n        else\n          output.push(p);\n    });\n    return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n  }\n\n  function toAbsoluteURL(base, href) {\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  var fetchTextFromURL;\n\n  if (typeof XMLHttpRequest != 'undefined') {\n    fetchTextFromURL = function(url, fulfill, reject) {\n      var xhr = new XMLHttpRequest();\n      var sameDomain = true;\n      if (!('withCredentials' in xhr)) {\n        // check if same domain\n        var domainCheck = /^(\\w+:)?\\/\\/([^\\/]+)/.exec(url);\n        if (domainCheck) {\n          sameDomain = domainCheck[2] === window.location.host;\n          if (domainCheck[1])\n            sameDomain &= domainCheck[1] === window.location.protocol;\n        }\n      }\n      if (!sameDomain && typeof XDomainRequest != 'undefined') {\n        xhr = new XDomainRequest();\n        xhr.onload = load;\n        xhr.onerror = error;\n        xhr.ontimeout = error;\n        // IE8/IE9 bug may hang requests unless all properties are defined. \n        // See: http://stackoverflow.com/a/9928073/3949247\n        xhr.onprogress = function() {};\n        xhr.timeout = 0;\n      }\n      function load() {\n        fulfill(xhr.responseText);\n      }\n      function error() {\n        reject(xhr.statusText + ': ' + url || 'XHR error');\n      }\n\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) {\n            load();\n          } else {\n            error();\n          }\n        }\n      };\n      xhr.open(\"GET\", url, true);\n      xhr.send(null);\n    }\n  }\n  else if (typeof require != 'undefined') {\n    var fs;\n    fetchTextFromURL = function(url, fulfill, reject) {\n      if (url.substr(0, 5) != 'file:')\n        throw 'Only file URLs of the form file: allowed running in Node.';\n      fs = fs || require('fs');\n      url = url.substr(5);\n      if (isWindows)\n        url = url.replace(/\\//g, '\\\\');\n      return fs.readFile(url, function(err, data) {\n        if (err)\n          return reject(err);\n        else\n          fulfill(data + '');\n      });\n    }\n  }\n  else {\n    throw new TypeError('No environment fetch API available.');\n  }\n\n  var SystemLoader = function($__super) {\n    function SystemLoader(options) {\n      $__super.call(this, options || {});\n\n      // Set default baseURL and paths\n      if (typeof location != 'undefined' && location.href) {\n        var href = __global.location.href.split('#')[0].split('?')[0];\n        this.baseURL = href.substring(0, href.lastIndexOf('/') + 1);\n      }\n      else if (typeof process != 'undefined' && process.cwd) {\n        this.baseURL = 'file:' + process.cwd() + '/';\n        if (isWindows)\n          this.baseURL = this.baseURL.replace(/\\\\/g, '/');\n      }\n      else {\n        throw new TypeError('No environment baseURL');\n      }\n      this.paths = { '*': '*.js' };\n    }\n\n    SystemLoader.__proto__ = ($__super !== null ? $__super : Function.prototype);\n    SystemLoader.prototype = $__Object$create(($__super !== null ? $__super.prototype : null));\n\n    $__Object$defineProperty(SystemLoader.prototype, \"constructor\", {\n      value: SystemLoader\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"global\", {\n      get: function() {\n        return isBrowser ? window : (isWorker ? self : __global);\n      },\n\n      enumerable: false\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"strict\", {\n      get: function() { return true; },\n      enumerable: false\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"normalize\", {\n      value: function(name, parentName, parentAddress) {\n        if (typeof name != 'string')\n          throw new TypeError('Module name must be a string');\n\n        var segments = name.split('/');\n\n        if (segments.length == 0)\n          throw new TypeError('No module name provided');\n\n        // current segment\n        var i = 0;\n        // is the module name relative\n        var rel = false;\n        // number of backtracking segments\n        var dotdots = 0;\n        if (segments[0] == '.') {\n          i++;\n          if (i == segments.length)\n            throw new TypeError('Illegal module name \"' + name + '\"');\n          rel = true;\n        }\n        else {\n          while (segments[i] == '..') {\n            i++;\n            if (i == segments.length)\n              throw new TypeError('Illegal module name \"' + name + '\"');\n          }\n          if (i)\n            rel = true;\n          dotdots = i;\n        }\n\n        for (var j = i; j < segments.length; j++) {\n          var segment = segments[j];\n          if (segment == '' || segment == '.' || segment == '..')\n            throw new TypeError('Illegal module name \"' + name + '\"');\n        }\n\n        if (!rel)\n          return name;\n\n        // build the full module name\n        var normalizedParts = [];\n        var parentParts = (parentName || '').split('/');\n        var normalizedLen = parentParts.length - 1 - dotdots;\n\n        normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots));\n        normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i));\n\n        return normalizedParts.join('/');\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"locate\", {\n      value: function(load) {\n        var name = load.name;\n\n        // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25\n\n        // most specific (longest) match wins\n        var pathMatch = '', wildcard;\n\n        // check to see if we have a paths entry\n        for (var p in this.paths) {\n          var pathParts = p.split('*');\n          if (pathParts.length > 2)\n            throw new TypeError('Only one wildcard in a path is permitted');\n\n          // exact path match\n          if (pathParts.length == 1) {\n            if (name == p && p.length > pathMatch.length) {\n              pathMatch = p;\n              break;\n            }\n          }\n\n          // wildcard path match\n          else {\n            if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) {\n              pathMatch = p;\n              wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length);\n            }\n          }\n        }\n\n        var outPath = this.paths[pathMatch];\n        if (wildcard)\n          outPath = outPath.replace('*', wildcard);\n\n        // percent encode just '#' in module names\n        // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238\n        // we should encode everything, but it breaks for servers that don't expect it \n        // like in (https://github.com/systemjs/systemjs/issues/168)\n        if (isBrowser)\n          outPath = outPath.replace(/#/g, '%23');\n\n        return toAbsoluteURL(this.baseURL, outPath);\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    $__Object$defineProperty(SystemLoader.prototype, \"fetch\", {\n      value: function(load) {\n        var self = this;\n        return new Promise(function(resolve, reject) {\n          fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) {\n            resolve(source);\n          }, reject);\n        });\n      },\n\n      enumerable: false,\n      writable: true\n    });\n\n    return SystemLoader;\n  }(__global.LoaderPolyfill);\n\n  var System = new SystemLoader();\n\n  // note we have to export before runing \"init\" below\n  if (typeof exports === 'object')\n    module.exports = System;\n\n  __global.System = System;\n\n  // <script type=\"module\"> support\n  // allow a data-init function callback once loaded\n  if (isBrowser && typeof document.getElementsByTagName != 'undefined') {\n    var curScript = document.getElementsByTagName('script');\n    curScript = curScript[curScript.length - 1];\n\n    function completed() {\n      document.removeEventListener( \"DOMContentLoaded\", completed, false );\n      window.removeEventListener( \"load\", completed, false );\n      ready();\n    }\n\n    function ready() {\n      var scripts = document.getElementsByTagName('script');\n      for (var i = 0; i < scripts.length; i++) {\n        var script = scripts[i];\n        if (script.type == 'module') {\n          var source = script.innerHTML.substr(1);\n          System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); });\n        }\n      }\n    }\n\n    // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63\n    if (document.readyState === 'complete') {\n      setTimeout(ready);\n    }\n    else if (document.addEventListener) {\n      document.addEventListener('DOMContentLoaded', completed, false);\n      window.addEventListener('load', completed, false);\n    }\n\n    // run the data-init function on the script tag\n    if (curScript.getAttribute('data-init'))\n      window[curScript.getAttribute('data-init')]();\n  }\n})();\n\n\n// Define our eval outside of the scope of any other reference defined in this\n// file to avoid adding those references to the evaluation scope.\nfunction __eval(__source, __global, load) {\n  // Hijack System.register to set declare function\n  var __curRegister = System.register;\n  System.register = function(name, deps, declare) {\n    if (typeof name != 'string') {\n      declare = deps;\n      deps = name;\n    }\n    // store the registered declaration as load.declare\n    // store the deps as load.deps\n    load.declare = declare;\n    load.depsList = deps;\n  }\n  try {\n    eval('(function() { var __moduleName = \"' + (load.name || '').replace('\"', '\\\"') + '\"; ' + __source + ' \\n }).call(__global);');\n  }\n  catch(e) {\n    if (e.name == 'SyntaxError' || e.name == 'TypeError')\n      e.message = 'Evaluating ' + (load.name || load.address) + '\\n\\t' + e.message;\n    throw e;\n  }\n\n  System.register = __curRegister;\n}\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/es6-module-loader/src/loader.js",
    "content": "/*\n*********************************************************************************************\n\n  Loader Polyfill\n\n    - Implemented exactly to the 2014-07-18 Specification Draft.\n\n    - Functions are commented with their spec numbers, with spec differences commented.\n\n    - Spec bugs are commented in this code with links.\n\n    - Abstract functions have been combined where possible, and their associated functions\n      commented.\n\n    - Realm implementation is entirely omitted.\n\n    - Loader module table iteration currently not yet implemented.\n\n*********************************************************************************************\n*/\n\n// Some Helpers\n\n// logs a linkset snapshot for debugging\n/* function snapshot(loader) {\n  console.log('---Snapshot---');\n  for (var i = 0; i < loader.loads.length; i++) {\n    var load = loader.loads[i];\n    var linkSetLog = '  ' + load.name + ' (' + load.status + '): ';\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      linkSetLog += '{' + logloads(load.linkSets[j].loads) + '} ';\n    }\n    console.log(linkSetLog);\n  }\n  console.log('');\n}\nfunction logloads(loads) {\n  var log = '';\n  for (var k = 0; k < loads.length; k++)\n    log += loads[k].name + (k != loads.length - 1 ? ' ' : '');\n  return log;\n} */\n\n\n/* function checkInvariants() {\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2603#c1\n\n  var loads = System._loader.loads;\n  var linkSets = [];\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'Each load is loading or loaded');\n\n    for (var j = 0; j < load.linkSets.length; j++) {\n      var linkSet = load.linkSets[j];\n\n      for (var k = 0; k < linkSet.loads.length; k++)\n        console.assert(loads.indexOf(linkSet.loads[k]) != -1, 'linkSet loads are a subset of loader loads');\n\n      if (linkSets.indexOf(linkSet) == -1)\n        linkSets.push(linkSet);\n    }\n  }\n\n  for (var i = 0; i < loads.length; i++) {\n    var load = loads[i];\n    for (var j = 0; j < linkSets.length; j++) {\n      var linkSet = linkSets[j];\n\n      if (linkSet.loads.indexOf(load) != -1)\n        console.assert(load.linkSets.indexOf(linkSet) != -1, 'linkSet contains load -> load contains linkSet');\n\n      if (load.linkSets.indexOf(linkSet) != -1)\n        console.assert(linkSet.loads.indexOf(load) != -1, 'load contains linkSet -> linkSet contains load');\n    }\n  }\n\n  for (var i = 0; i < linkSets.length; i++) {\n    var linkSet = linkSets[i];\n    for (var j = 0; j < linkSet.loads.length; j++) {\n      var load = linkSet.loads[j];\n\n      for (var k = 0; k < load.dependencies.length; k++) {\n        var depName = load.dependencies[k].value;\n        var depLoad;\n        for (var l = 0; l < loads.length; l++) {\n          if (loads[l].name != depName)\n            continue;\n          depLoad = loads[l];\n          break;\n        }\n\n        // loading records are allowed not to have their dependencies yet\n        // if (load.status != 'loading')\n        //  console.assert(depLoad, 'depLoad found');\n\n        // console.assert(linkSet.loads.indexOf(depLoad) != -1, 'linkset contains all dependencies');\n      }\n    }\n  }\n} */\n\n\n(function() {\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n  console.assert = console.assert || function() {};\n\n  // IE8 support\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, thisLen = this.length; i < thisLen; i++) {\n      if (this[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var defineProperty = $__Object$defineProperty;\n\n  // 15.2.3 - Runtime Semantics: Loader State\n\n  // 15.2.3.11\n  function createLoaderLoad(object) {\n    return {\n      // modules is an object for ES5 implementation\n      modules: {},\n      loads: [],\n      loaderObj: object\n    };\n  }\n\n  // 15.2.3.2 Load Records and LoadRequest Objects\n\n  // 15.2.3.2.1\n  function createLoad(name) {\n    return {\n      status: 'loading',\n      name: name,\n      linkSets: [],\n      dependencies: [],\n      metadata: {}\n    };\n  }\n\n  // 15.2.3.2.2 createLoadRequestObject, absorbed into calling functions\n\n  // 15.2.4\n\n  // 15.2.4.1\n  function loadModule(loader, name, options) {\n    return new Promise(asyncStartLoadPartwayThrough({\n      step: options.address ? 'fetch' : 'locate',\n      loader: loader,\n      moduleName: name,\n      // allow metadata for import https://bugs.ecmascript.org/show_bug.cgi?id=3091\n      moduleMetadata: options && options.metadata || {},\n      moduleSource: options.source,\n      moduleAddress: options.address\n    }));\n  }\n\n  // 15.2.4.2\n  function requestLoad(loader, request, refererName, refererAddress) {\n    // 15.2.4.2.1 CallNormalize\n    return new Promise(function(resolve, reject) {\n      resolve(loader.loaderObj.normalize(request, refererName, refererAddress));\n    })\n    // 15.2.4.2.2 GetOrCreateLoad\n    .then(function(name) {\n      var load;\n      if (loader.modules[name]) {\n        load = createLoad(name);\n        load.status = 'linked';\n        // https://bugs.ecmascript.org/show_bug.cgi?id=2795\n        // load.module = loader.modules[name];\n        return load;\n      }\n\n      for (var i = 0, l = loader.loads.length; i < l; i++) {\n        load = loader.loads[i];\n        if (load.name != name)\n          continue;\n        console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded');\n        return load;\n      }\n\n      load = createLoad(name);\n      loader.loads.push(load);\n\n      proceedToLocate(loader, load);\n\n      return load;\n    });\n  }\n\n  // 15.2.4.3\n  function proceedToLocate(loader, load) {\n    proceedToFetch(loader, load,\n      Promise.resolve()\n      // 15.2.4.3.1 CallLocate\n      .then(function() {\n        return loader.loaderObj.locate({ name: load.name, metadata: load.metadata });\n      })\n    );\n  }\n\n  // 15.2.4.4\n  function proceedToFetch(loader, load, p) {\n    proceedToTranslate(loader, load,\n      p\n      // 15.2.4.4.1 CallFetch\n      .then(function(address) {\n        // adjusted, see https://bugs.ecmascript.org/show_bug.cgi?id=2602\n        if (load.status != 'loading')\n          return;\n        load.address = address;\n\n        return loader.loaderObj.fetch({ name: load.name, metadata: load.metadata, address: address });\n      })\n    );\n  }\n\n  var anonCnt = 0;\n\n  // 15.2.4.5\n  function proceedToTranslate(loader, load, p) {\n    p\n    // 15.2.4.5.1 CallTranslate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      return loader.loaderObj.translate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.2 CallInstantiate\n    .then(function(source) {\n      if (load.status != 'loading')\n        return;\n      load.source = source;\n      return loader.loaderObj.instantiate({ name: load.name, metadata: load.metadata, address: load.address, source: source });\n    })\n\n    // 15.2.4.5.3 InstantiateSucceeded\n    .then(function(instantiateResult) {\n      if (load.status != 'loading')\n        return;\n\n      if (instantiateResult === undefined) {\n        load.address = load.address || '<Anonymous Module ' + ++anonCnt + '>';\n\n        // NB instead of load.kind, use load.isDeclarative\n        load.isDeclarative = true;\n        // parse sets load.declare, load.depsList\n        loader.loaderObj.parse(load);\n      }\n      else if (typeof instantiateResult == 'object') {\n        load.depsList = instantiateResult.deps || [];\n        load.execute = instantiateResult.execute;\n        load.isDeclarative = false;\n      }\n      else\n        throw TypeError('Invalid instantiate return value');\n\n      // 15.2.4.6 ProcessLoadDependencies\n      load.dependencies = [];\n      var depsList = load.depsList;\n\n      var loadPromises = [];\n      for (var i = 0, l = depsList.length; i < l; i++) (function(request, index) {\n        loadPromises.push(\n          requestLoad(loader, request, load.name, load.address)\n\n          // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)\n          .then(function(depLoad) {\n\n            console.assert(!load.dependencies.some(function(dep) {\n              return dep.key == request;\n            }), 'not already a dependency');\n\n            // adjusted from spec to maintain dependency order\n            // this is due to the System.register internal implementation needs\n            load.dependencies[index] = {\n              key: request,\n              value: depLoad.name\n            };\n\n            if (depLoad.status != 'linked') {\n              var linkSets = load.linkSets.concat([]);\n              for (var i = 0, l = linkSets.length; i < l; i++)\n                addLoadToLinkSet(linkSets[i], depLoad);\n            }\n\n            // console.log('AddDependencyLoad ' + depLoad.name + ' for ' + load.name);\n            // snapshot(loader);\n          })\n        );\n      })(depsList[i], i);\n\n      return Promise.all(loadPromises);\n    })\n\n    // 15.2.4.6.2 LoadSucceeded\n    .then(function() {\n      // console.log('LoadSucceeded ' + load.name);\n      // snapshot(loader);\n\n      console.assert(load.status == 'loading', 'is loading');\n\n      load.status = 'loaded';\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++)\n        updateLinkSetOnLoad(linkSets[i], load);\n    })\n\n    // 15.2.4.5.4 LoadFailed\n    ['catch'](function(exc) {\n      console.assert(load.status == 'loading', 'is loading on fail');\n      load.status = 'failed';\n      load.exception = exc;\n\n      var linkSets = load.linkSets.concat([]);\n      for (var i = 0, l = linkSets.length; i < l; i++) {\n        linkSetFailed(linkSets[i], load, exc);\n      }\n\n      console.assert(load.linkSets.length == 0, 'linkSets not removed');\n    });\n  }\n\n  // 15.2.4.7 PromiseOfStartLoadPartwayThrough absorbed into calling functions\n\n  // 15.2.4.7.1\n  function asyncStartLoadPartwayThrough(stepState) {\n    return function(resolve, reject) {\n      var loader = stepState.loader;\n      var name = stepState.moduleName;\n      var step = stepState.step;\n\n      if (loader.modules[name])\n        throw new TypeError('\"' + name + '\" already exists in the module table');\n\n      // NB this still seems wrong for LoadModule as we may load a dependency\n      // of another module directly before it has finished loading.\n      // see https://bugs.ecmascript.org/show_bug.cgi?id=2994\n      for (var i = 0, l = loader.loads.length; i < l; i++)\n        if (loader.loads[i].name == name)\n          throw new TypeError('\"' + name + '\" already loading');\n\n      var load = createLoad(name);\n\n      load.metadata = stepState.moduleMetadata;\n\n      var linkSet = createLinkSet(loader, load);\n\n      loader.loads.push(load);\n\n      resolve(linkSet.done);\n\n      if (step == 'locate')\n        proceedToLocate(loader, load);\n\n      else if (step == 'fetch')\n        proceedToFetch(loader, load, Promise.resolve(stepState.moduleAddress));\n\n      else {\n        console.assert(step == 'translate', 'translate step');\n        load.address = stepState.moduleAddress;\n        proceedToTranslate(loader, load, Promise.resolve(stepState.moduleSource));\n      }\n    }\n  }\n\n  // Declarative linking functions run through alternative implementation:\n  // 15.2.5.1.1 CreateModuleLinkageRecord not implemented\n  // 15.2.5.1.2 LookupExport not implemented\n  // 15.2.5.1.3 LookupModuleDependency not implemented\n\n  // 15.2.5.2.1\n  function createLinkSet(loader, startingLoad) {\n    var linkSet = {\n      loader: loader,\n      loads: [],\n      startingLoad: startingLoad, // added see spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n      loadingCount: 0\n    };\n    linkSet.done = new Promise(function(resolve, reject) {\n      linkSet.resolve = resolve;\n      linkSet.reject = reject;\n    });\n    addLoadToLinkSet(linkSet, startingLoad);\n    return linkSet;\n  }\n  // 15.2.5.2.2\n  function addLoadToLinkSet(linkSet, load) {\n    console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set');\n\n    for (var i = 0, l = linkSet.loads.length; i < l; i++)\n      if (linkSet.loads[i] == load)\n        return;\n\n    linkSet.loads.push(load);\n    load.linkSets.push(linkSet);\n\n    // adjustment, see https://bugs.ecmascript.org/show_bug.cgi?id=2603\n    if (load.status != 'loaded') {\n      linkSet.loadingCount++;\n    }\n\n    var loader = linkSet.loader;\n\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var name = load.dependencies[i].value;\n\n      if (loader.modules[name])\n        continue;\n\n      for (var j = 0, d = loader.loads.length; j < d; j++) {\n        if (loader.loads[j].name != name)\n          continue;\n\n        addLoadToLinkSet(linkSet, loader.loads[j]);\n        break;\n      }\n    }\n    // console.log('add to linkset ' + load.name);\n    // snapshot(linkSet.loader);\n  }\n\n  // linking errors can be generic or load-specific\n  // this is necessary for debugging info\n  function doLink(linkSet) {\n    var error = false;\n    try {\n      link(linkSet, function(load, exc) {\n        linkSetFailed(linkSet, load, exc);\n        error = true;\n      });\n    }\n    catch(e) {\n      linkSetFailed(linkSet, null, e);\n      error = true;\n    }\n    return error;\n  }\n\n  // 15.2.5.2.3\n  function updateLinkSetOnLoad(linkSet, load) {\n    // console.log('update linkset on load ' + load.name);\n    // snapshot(linkSet.loader);\n\n    console.assert(load.status == 'loaded' || load.status == 'linked', 'loaded or linked');\n\n    linkSet.loadingCount--;\n\n    if (linkSet.loadingCount > 0)\n      return;\n\n    // adjusted for spec bug https://bugs.ecmascript.org/show_bug.cgi?id=2995\n    var startingLoad = linkSet.startingLoad;\n\n    // non-executing link variation for loader tracing\n    // on the server. Not in spec.\n    /***/\n    if (linkSet.loader.loaderObj.execute === false) {\n      var loads = [].concat(linkSet.loads);\n      for (var i = 0, l = loads.length; i < l; i++) {\n        var load = loads[i];\n        load.module = !load.isDeclarative ? {\n          module: _newModule({})\n        } : {\n          name: load.name,\n          module: _newModule({}),\n          evaluated: true\n        };\n        load.status = 'linked';\n        finishLoad(linkSet.loader, load);\n      }\n      return linkSet.resolve(startingLoad);\n    }\n    /***/\n\n    var abrupt = doLink(linkSet);\n\n    if (abrupt)\n      return;\n\n    console.assert(linkSet.loads.length == 0, 'loads cleared');\n\n    linkSet.resolve(startingLoad);\n  }\n\n  // 15.2.5.2.4\n  function linkSetFailed(linkSet, load, exc) {\n    var loader = linkSet.loader;\n\n    if (linkSet.loads[0].name != load.name)\n      exc = addToError(exc, 'Error loading \"' + load.name + '\" from \"' + linkSet.loads[0].name + '\" at ' + (linkSet.loads[0].address || '<unknown>') + '\\n');\n\n    exc = addToError(exc, 'Error loading \"' + load.name + '\" at ' + (load.address || '<unknown>') + '\\n');\n\n    var loads = linkSet.loads.concat([]);\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var load = loads[i];\n\n      // store all failed load records\n      loader.loaderObj.failed = loader.loaderObj.failed || [];\n      if (indexOf.call(loader.loaderObj.failed, load) == -1)\n        loader.loaderObj.failed.push(load);\n\n      var linkIndex = indexOf.call(load.linkSets, linkSet);\n      console.assert(linkIndex != -1, 'link not present');\n      load.linkSets.splice(linkIndex, 1);\n      if (load.linkSets.length == 0) {\n        var globalLoadsIndex = indexOf.call(linkSet.loader.loads, load);\n        if (globalLoadsIndex != -1)\n          linkSet.loader.loads.splice(globalLoadsIndex, 1);\n      }\n    }\n    linkSet.reject(exc);\n  }\n\n  // 15.2.5.2.5\n  function finishLoad(loader, load) {\n    // add to global trace if tracing\n    if (loader.loaderObj.trace) {\n      if (!loader.loaderObj.loads)\n        loader.loaderObj.loads = {};\n      var depMap = {};\n      load.dependencies.forEach(function(dep) {\n        depMap[dep.key] = dep.value;\n      });\n      loader.loaderObj.loads[load.name] = {\n        name: load.name,\n        deps: load.dependencies.map(function(dep){ return dep.key }),\n        depMap: depMap,\n        address: load.address,\n        metadata: load.metadata,\n        source: load.source,\n        kind: load.isDeclarative ? 'declarative' : 'dynamic'\n      };\n    }\n    // if not anonymous, add to the module table\n    if (load.name) {\n      console.assert(!loader.modules[load.name], 'load not in module table');\n      loader.modules[load.name] = load.module;\n    }\n    var loadIndex = indexOf.call(loader.loads, load);\n    if (loadIndex != -1)\n      loader.loads.splice(loadIndex, 1);\n    for (var i = 0, l = load.linkSets.length; i < l; i++) {\n      loadIndex = indexOf.call(load.linkSets[i].loads, load);\n      if (loadIndex != -1)\n        load.linkSets[i].loads.splice(loadIndex, 1);\n    }\n    load.linkSets.splice(0, load.linkSets.length);\n  }\n\n  // 15.2.5.3 Module Linking Groups\n\n  // 15.2.5.3.2 BuildLinkageGroups alternative implementation\n  // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755)\n  // 1. groups is an already-interleaved array of group kinds\n  // 2. load.groupIndex is set when this function runs\n  // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic)\n  function buildLinkageGroups(load, loads, groups, loader) {\n    groups[load.groupIndex] = groups[load.groupIndex] || [];\n\n    // if the load already has a group index and its in its group, its already been done\n    // this logic naturally handles cycles\n    if (indexOf.call(groups[load.groupIndex], load) != -1)\n      return;\n\n    // now add it to the group to indicate its been seen\n    groups[load.groupIndex].push(load);\n\n    for (var i = 0, l = loads.length; i < l; i++) {\n      var loadDep = loads[i];\n\n      // dependencies not found are already linked\n      for (var j = 0; j < load.dependencies.length; j++) {\n        if (loadDep.name == load.dependencies[j].value) {\n          // by definition all loads in linkset are loaded, not linked\n          console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!');\n\n          // if it is a group transition, the index of the dependency has gone up\n          // otherwise it is the same as the parent\n          var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative);\n\n          // the group index of an entry is always the maximum\n          if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) {\n\n            // if already in a group, remove from the old group\n            if (loadDep.groupIndex) {\n              groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1);\n\n              // if the old group is empty, then we have a mixed depndency cycle\n              if (groups[loadDep.groupIndex].length == 0)\n                throw new TypeError(\"Mixed dependency cycle detected\");\n            }\n\n            loadDep.groupIndex = loadDepGroupIndex;\n          }\n\n          buildLinkageGroups(loadDep, loads, groups, loader);\n        }\n      }\n    }\n  }\n\n  function doDynamicExecute(linkSet, load, linkError) {\n    try {\n      var module = load.execute();\n    }\n    catch(e) {\n      linkError(load, e);\n      return;\n    }\n    if (!module || !(module instanceof Module))\n      linkError(load, new TypeError('Execution must define a Module instance'));\n    else\n      return module;\n  }\n\n  // 15.2.5.4\n  function link(linkSet, linkError) {\n\n    var loader = linkSet.loader;\n\n    if (!linkSet.loads.length)\n      return;\n\n    // console.log('linking {' + logloads(linkSet.loads) + '}');\n    // snapshot(loader);\n\n    // 15.2.5.3.1 LinkageGroups alternative implementation\n\n    // build all the groups\n    // because the first load represents the top of the tree\n    // for a given linkset, we can work down from there\n    var groups = [];\n    var startingLoad = linkSet.loads[0];\n    startingLoad.groupIndex = 0;\n    buildLinkageGroups(startingLoad, linkSet.loads, groups, loader);\n\n    // determine the kind of the bottom group\n    var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2;\n\n    // run through the groups from bottom to top\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var load = group[j];\n\n        // 15.2.5.5 LinkDeclarativeModules adjusted\n        if (curGroupDeclarative) {\n          linkDeclarativeModule(load, linkSet.loads, loader);\n        }\n        // 15.2.5.6 LinkDynamicModules adjusted\n        else {\n          var module = doDynamicExecute(linkSet, load, linkError);\n          if (!module)\n            return;\n          load.module = {\n            name: load.name,\n            module: module\n          };\n          load.status = 'linked';\n        }\n        finishLoad(loader, load);\n      }\n\n      // alternative current kind for next loop\n      curGroupDeclarative = !curGroupDeclarative;\n    }\n  }\n\n\n  // custom module records for binding graph\n  // store linking module records in a separate table\n  function getOrCreateModuleRecord(name, loader) {\n    var moduleRecords = loader.moduleRecords;\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      module: new Module(), // start from an empty module and extend\n      importers: []\n    });\n  }\n\n  // custom declarative linking function\n  function linkDeclarativeModule(load, loads, loader) {\n    if (load.module)\n      return;\n\n    var module = load.module = getOrCreateModuleRecord(load.name, loader);\n    var moduleObj = load.module.module;\n\n    var registryEntry = load.declare.call(__global, function(name, value) {\n      // NB This should be an Object.defineProperty, but that is very slow.\n      //    By disaling this module write-protection we gain performance.\n      //    It could be useful to allow an option to enable or disable this.\n      module.locked = true;\n      moduleObj[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](moduleObj);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n\n    // setup our setters and execution function\n    module.setters = registryEntry.setters;\n    module.execute = registryEntry.execute;\n\n    // now link all the module dependencies\n    // amending the depMap as we go\n    for (var i = 0, l = load.dependencies.length; i < l; i++) {\n      var depName = load.dependencies[i].value;\n      var depModule = loader.modules[depName];\n\n      // if dependency not already in the module registry\n      // then try and link it now\n      if (!depModule) {\n        // get the dependency load record\n        for (var j = 0; j < loads.length; j++) {\n          if (loads[j].name != depName)\n            continue;\n\n          // only link if already not already started linking (stops at circular / dynamic)\n          if (!loads[j].module) {\n            linkDeclarativeModule(loads[j], loads, loader);\n            depModule = loads[j].module;\n          }\n          // if circular, create the module record\n          else {\n            depModule = getOrCreateModuleRecord(depName, loader);\n          }\n        }\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule.importers) {\n        module.dependencies.push(depModule);\n        depModule.importers.push(module);\n      }\n      else {\n        // track dynamic records as null module records as already linked\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depModule.module);\n    }\n\n    load.status = 'linked';\n  }\n\n\n\n  // 15.2.5.5.1 LinkImports not implemented\n  // 15.2.5.7 ResolveExportEntries not implemented\n  // 15.2.5.8 ResolveExports not implemented\n  // 15.2.5.9 ResolveExport not implemented\n  // 15.2.5.10 ResolveImportEntries not implemented\n\n  // 15.2.6.1\n  function evaluateLoadedModule(loader, load) {\n    console.assert(load.status == 'linked', 'is linked ' + load.name);\n\n    doEnsureEvaluated(load.module, [], loader);\n    return load.module.module;\n  }\n\n  /*\n   * Module Object non-exotic for ES5:\n   *\n   * module.module        bound module object\n   * module.execute       execution function for module\n   * module.dependencies  list of module objects for dependencies\n   * See getOrCreateModuleRecord for all properties\n   *\n   */\n  function doExecute(module) {\n    try {\n      module.execute.call(__global);\n    }\n    catch(e) {\n      return e;\n    }\n  }\n\n  // propogate execution errors\n  // see https://bugs.ecmascript.org/show_bug.cgi?id=2993\n  function doEnsureEvaluated(module, seen, loader) {\n    var err = ensureEvaluated(module, seen, loader);\n    if (err)\n      throw err;\n  }\n  // 15.2.6.2 EnsureEvaluated adjusted\n  function ensureEvaluated(module, seen, loader) {\n    if (module.evaluated || !module.dependencies)\n      return;\n\n    seen.push(module);\n\n    var deps = module.dependencies;\n    var err;\n\n    for (var i = 0, l = deps.length; i < l; i++) {\n      var dep = deps[i];\n      // dynamic dependencies are empty in module.dependencies\n      // as they are already linked\n      if (!dep)\n        continue;\n      if (indexOf.call(seen, dep) == -1) {\n        err = ensureEvaluated(dep, seen, loader);\n        // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996\n        if (err) {\n          err = addToError(err, 'Error evaluating ' + dep.name + '\\n');\n          return err;\n        }\n      }\n    }\n\n    if (module.failed)\n      return new Error('Module failed execution.');\n\n    if (module.evaluated)\n      return;\n\n    module.evaluated = true;\n    err = doExecute(module);\n    if (err) {\n      module.failed = true;\n    }\n    else if (Object.preventExtensions) {\n      // spec variation\n      // we don't create a new module here because it was created and ammended\n      // we just disable further extensions instead\n      Object.preventExtensions(module.module);\n    }\n\n    module.execute = undefined;\n    return err;\n  }\n\n  function addToError(err, msg) {\n    if (err instanceof Error)\n      err.message = msg + err.message;\n    else\n      err = msg + err;\n    return err;\n  }\n\n  // 26.3 Loader\n\n  // 26.3.1.1\n  function Loader(options) {\n    if (typeof options != 'object')\n      throw new TypeError('Options must be an object');\n\n    if (options.normalize)\n      this.normalize = options.normalize;\n    if (options.locate)\n      this.locate = options.locate;\n    if (options.fetch)\n      this.fetch = options.fetch;\n    if (options.translate)\n      this.translate = options.translate;\n    if (options.instantiate)\n      this.instantiate = options.instantiate;\n\n    this._loader = {\n      loaderObj: this,\n      loads: [],\n      modules: {},\n      importPromises: {},\n      moduleRecords: {}\n    };\n\n    // 26.3.3.6\n    defineProperty(this, 'global', {\n      get: function() {\n        return __global;\n      }\n    });\n\n    // 26.3.3.13 realm not implemented\n  }\n\n  function Module() {}\n\n  // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601\n  function createImportPromise(loader, name, promise) {\n    var importPromises = loader._loader.importPromises;\n    return importPromises[name] = promise.then(function(m) {\n      importPromises[name] = undefined;\n      return m;\n    }, function(e) {\n      importPromises[name] = undefined;\n      throw e;\n    });\n  }\n\n  Loader.prototype = {\n    // 26.3.3.1\n    constructor: Loader,\n    // 26.3.3.2\n    define: function(name, source, options) {\n      // check if already defined\n      if (this._loader.importPromises[name])\n        throw new TypeError('Module is already loading.');\n      return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({\n        step: 'translate',\n        loader: this._loader,\n        moduleName: name,\n        moduleMetadata: options && options.metadata || {},\n        moduleSource: source,\n        moduleAddress: options && options.address\n      })));\n    },\n    // 26.3.3.3\n    'delete': function(name) {\n      return this._loader.modules[name] ? delete this._loader.modules[name] : false;\n    },\n    // 26.3.3.4 entries not implemented\n    // 26.3.3.5\n    get: function(key) {\n      if (!this._loader.modules[key])\n        return;\n      doEnsureEvaluated(this._loader.modules[key], [], this);\n      return this._loader.modules[key].module;\n    },\n    // 26.3.3.7\n    has: function(name) {\n      return !!this._loader.modules[name];\n    },\n    // 26.3.3.8\n    'import': function(name, options) {\n      // run normalize first\n      var loaderObj = this;\n\n      // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659\n      return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address))\n      .then(function(name) {\n        var loader = loaderObj._loader;\n\n        if (loader.modules[name]) {\n          doEnsureEvaluated(loader.modules[name], [], loader._loader);\n          return loader.modules[name].module;\n        }\n\n        return loader.importPromises[name] || createImportPromise(loaderObj, name,\n          loadModule(loader, name, options || {})\n          .then(function(load) {\n            delete loader.importPromises[name];\n            return evaluateLoadedModule(loader, load);\n          }));\n      });\n    },\n    // 26.3.3.9 keys not implemented\n    // 26.3.3.10\n    load: function(name, options) {\n      if (this._loader.modules[name]) {\n        doEnsureEvaluated(this._loader.modules[name], [], this._loader);\n        return Promise.resolve(this._loader.modules[name].module);\n      }\n      return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {}));\n    },\n    // 26.3.3.11\n    module: function(source, options) {\n      var load = createLoad();\n      load.address = options && options.address;\n      var linkSet = createLinkSet(this._loader, load);\n      var sourcePromise = Promise.resolve(source);\n      var loader = this._loader;\n      var p = linkSet.done.then(function() {\n        return evaluateLoadedModule(loader, load);\n      });\n      proceedToTranslate(loader, load, sourcePromise);\n      return p;\n    },\n    // 26.3.3.12\n    newModule: function (obj) {\n      if (typeof obj != 'object')\n        throw new TypeError('Expected object');\n\n      // we do this to be able to tell if a module is a module privately in ES5\n      // by doing m instanceof Module\n      var m = new Module();\n\n      for (var key in obj) {\n        (function (key) {\n          defineProperty(m, key, {\n            configurable: false,\n            enumerable: true,\n            get: function () {\n              return obj[key];\n            }\n          });\n        })(key);\n      }\n\n      if (Object.preventExtensions)\n        Object.preventExtensions(m);\n\n      return m;\n    },\n    // 26.3.3.14\n    set: function(name, module) {\n      if (!(module instanceof Module))\n        throw new TypeError('Loader.set(' + name + ', module) must be a module');\n      this._loader.modules[name] = {\n        module: module\n      };\n    },\n    // 26.3.3.15 values not implemented\n    // 26.3.3.16 @@iterator not implemented\n    // 26.3.3.17 @@toStringTag not implemented\n\n    // 26.3.3.18.1\n    normalize: function(name, referrerName, referrerAddress) {\n      return name;\n    },\n    // 26.3.3.18.2\n    locate: function(load) {\n      return load.name;\n    },\n    // 26.3.3.18.3\n    fetch: function(load) {\n      throw new TypeError('Fetch not implemented');\n    },\n    // 26.3.3.18.4\n    translate: function(load) {\n      return load.source;\n    },\n    parse: function(load) {\n      throw new TypeError('Loader.parse is not implemented');\n    },\n    // 26.3.3.18.5\n    instantiate: function(load) {\n    }\n  };\n\n  var _newModule = Loader.prototype.newModule;\n\n\n  /*\n   * Traceur-specific Parsing Code for Loader\n   */\n  (function() {\n    // parse function is used to parse a load record\n    // Returns an array of ModuleSpecifiers\n    var traceur;\n\n    function doCompile(source, compiler, filename) {\n      try {\n        return compiler.compile(source, filename);\n      }\n      catch(e) {\n        // traceur throws an error array\n        throw e[0];\n      }\n    }\n    Loader.prototype.parse = function(load) {\n      if (!traceur) {\n        if (typeof window == 'undefined' &&\n           typeof WorkerGlobalScope == 'undefined')\n          traceur = require('traceur');\n        else if (__global.traceur)\n          traceur = __global.traceur;\n        else\n          throw new TypeError('Include Traceur for module syntax support');\n      }\n\n      console.assert(load.source, 'Non-empty source');\n\n      var depsList;\n\n      load.isDeclarative = true;\n\n      var options = this.traceurOptions || {};\n      options.modules = 'instantiate';\n      options.script = false;\n      options.sourceMaps = true;\n      options.filename = load.address;\n\n      var compiler = new traceur.Compiler(options);\n\n      var source = doCompile(load.source, compiler, options.filename);\n\n      if (!source)\n        throw new Error('Error evaluating module ' + load.address);\n\n      var sourceMap = compiler.getSourceMap();\n\n      if (__global.btoa && sourceMap)\n        source += '\\n//# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(sourceMap))) + '\\n';\n\n      source = 'var __moduleAddress = \"' + load.address + '\";' + source;\n\n      __eval(source, __global, load);\n    }\n  })();\n\n  if (typeof exports === 'object')\n    module.exports = Loader;\n\n  __global.Reflect = __global.Reflect || {};\n  __global.Reflect.Loader = __global.Reflect.Loader || Loader;\n  __global.Reflect.global = __global.Reflect.global || __global;\n  __global.LoaderPolyfill = Loader;\n\n})();\n\n"
  },
  {
    "path": "client/components/es6-module-loader/src/polyfill-wrapper-end.js",
    "content": "\n// Define our eval outside of the scope of any other reference defined in this\n// file to avoid adding those references to the evaluation scope.\nfunction __eval(__source, __global, load) {\n  // Hijack System.register to set declare function\n  var __curRegister = System.register;\n  System.register = function(name, deps, declare) {\n    if (typeof name != 'string') {\n      declare = deps;\n      deps = name;\n    }\n    // store the registered declaration as load.declare\n    // store the deps as load.deps\n    load.declare = declare;\n    load.depsList = deps;\n  }\n  try {\n    eval('(function() { var __moduleName = \"' + (load.name || '').replace('\"', '\\\"') + '\"; ' + __source + ' \\n }).call(__global);');\n  }\n  catch(e) {\n    if (e.name == 'SyntaxError' || e.name == 'TypeError')\n      e.message = 'Evaluating ' + (load.name || load.address) + '\\n\\t' + e.message;\n    throw e;\n  }\n\n  System.register = __curRegister;\n}\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/es6-module-loader/src/polyfill-wrapper-start.js",
    "content": "(function(__global) {\n  \n$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) {\n  return obj.__proto__;\n};\n\nvar $__Object$defineProperty;\n(function () {\n  try {\n    if (!!Object.defineProperty({}, 'a', {})) {\n      $__Object$defineProperty = Object.defineProperty;\n    }\n  } catch (e) {\n    $__Object$defineProperty = function (obj, prop, opt) {\n      try {\n        obj[prop] = opt.value || opt.get.call(obj);\n      }\n      catch(e) {}\n    }\n  }\n}());\n\n$__Object$create = Object.create || function(o, props) {\n  function F() {}\n  F.prototype = o;\n\n  if (typeof(props) === \"object\") {\n    for (prop in props) {\n      if (props.hasOwnProperty((prop))) {\n        F[prop] = props[prop];\n      }\n    }\n  }\n  return new F();\n};\n"
  },
  {
    "path": "client/components/es6-module-loader/src/system.js",
    "content": "/*\n*********************************************************************************************\n\n  System Loader Implementation\n\n    - Implemented to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js\n\n    - <script type=\"module\"> supported\n\n*********************************************************************************************\n*/\n\n(function() {\n\n  var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined' && !isWorker;\n  var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/);\n  var Promise = __global.Promise || require('when/es6-shim/Promise');\n\n  // Helpers\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n  function removeDotSegments(input) {\n    var output = [];\n    input.replace(/^(\\.\\.?(\\/|$))+/, '')\n      .replace(/\\/(\\.(\\/|$))+/g, '/')\n      .replace(/\\/\\.\\.$/, '/../')\n      .replace(/\\/?[^\\/]*/g, function (p) {\n        if (p === '/..')\n          output.pop();\n        else\n          output.push(p);\n    });\n    return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n  }\n  function toAbsoluteURL(base, href) {\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  var fetchTextFromURL;\n  if (typeof XMLHttpRequest != 'undefined') {\n    fetchTextFromURL = function(url, fulfill, reject) {\n      var xhr = new XMLHttpRequest();\n      var sameDomain = true;\n      if (!('withCredentials' in xhr)) {\n        // check if same domain\n        var domainCheck = /^(\\w+:)?\\/\\/([^\\/]+)/.exec(url);\n        if (domainCheck) {\n          sameDomain = domainCheck[2] === window.location.host;\n          if (domainCheck[1])\n            sameDomain &= domainCheck[1] === window.location.protocol;\n        }\n      }\n      if (!sameDomain && typeof XDomainRequest != 'undefined') {\n        xhr = new XDomainRequest();\n        xhr.onload = load;\n        xhr.onerror = error;\n        xhr.ontimeout = error;\n        // IE8/IE9 bug may hang requests unless all properties are defined. \n        // See: http://stackoverflow.com/a/9928073/3949247\n        xhr.onprogress = function() {};\n        xhr.timeout = 0;\n      }\n      function load() {\n        fulfill(xhr.responseText);\n      }\n      function error() {\n        reject(xhr.statusText + ': ' + url || 'XHR error');\n      }\n\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) {\n            load();\n          } else {\n            error();\n          }\n        }\n      };\n      xhr.open(\"GET\", url, true);\n      xhr.send(null);\n    }\n  }\n  else if (typeof require != 'undefined') {\n    var fs;\n    fetchTextFromURL = function(url, fulfill, reject) {\n      if (url.substr(0, 5) != 'file:')\n        throw 'Only file URLs of the form file: allowed running in Node.';\n      fs = fs || require('fs');\n      url = url.substr(5);\n      if (isWindows)\n        url = url.replace(/\\//g, '\\\\');\n      return fs.readFile(url, function(err, data) {\n        if (err)\n          return reject(err);\n        else\n          fulfill(data + '');\n      });\n    }\n  }\n  else {\n    throw new TypeError('No environment fetch API available.');\n  }\n\n  class SystemLoader extends __global.LoaderPolyfill {\n\n    constructor(options) {\n      super(options || {});\n\n      // Set default baseURL and paths\n      if (typeof location != 'undefined' && location.href) {\n        var href = __global.location.href.split('#')[0].split('?')[0];\n        this.baseURL = href.substring(0, href.lastIndexOf('/') + 1);\n      }\n      else if (typeof process != 'undefined' && process.cwd) {\n        this.baseURL = 'file:' + process.cwd() + '/';\n        if (isWindows)\n          this.baseURL = this.baseURL.replace(/\\\\/g, '/');\n      }\n      else {\n        throw new TypeError('No environment baseURL');\n      }\n      this.paths = { '*': '*.js' };\n    }\n\n    get global() {\n      return isBrowser ? window : (isWorker ? self : __global);\n    }\n   \n    get strict() { return true; }\n\n    normalize(name, parentName, parentAddress) {\n      if (typeof name != 'string')\n        throw new TypeError('Module name must be a string');\n\n      var segments = name.split('/');\n\n      if (segments.length == 0)\n        throw new TypeError('No module name provided');\n\n      // current segment\n      var i = 0;\n      // is the module name relative\n      var rel = false;\n      // number of backtracking segments\n      var dotdots = 0;\n      if (segments[0] == '.') {\n        i++;\n        if (i == segments.length)\n          throw new TypeError('Illegal module name \"' + name + '\"');\n        rel = true;\n      }\n      else {\n        while (segments[i] == '..') {\n          i++;\n          if (i == segments.length)\n            throw new TypeError('Illegal module name \"' + name + '\"');\n        }\n        if (i)\n          rel = true;\n        dotdots = i;\n      }\n\n      for (var j = i; j < segments.length; j++) {\n        var segment = segments[j];\n        if (segment == '' || segment == '.' || segment == '..')\n          throw new TypeError('Illegal module name \"' + name + '\"');\n      }\n\n      if (!rel)\n        return name;\n\n      // build the full module name\n      var normalizedParts = [];\n      var parentParts = (parentName || '').split('/');\n      var normalizedLen = parentParts.length - 1 - dotdots;\n\n      normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots));\n      normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i));\n\n      return normalizedParts.join('/');\n    }\n\n    locate(load) {\n      var name = load.name;\n\n      // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25\n\n      // most specific (longest) match wins\n      var pathMatch = '', wildcard;\n\n      // check to see if we have a paths entry\n      for (var p in this.paths) {\n        var pathParts = p.split('*');\n        if (pathParts.length > 2)\n          throw new TypeError('Only one wildcard in a path is permitted');\n\n        // exact path match\n        if (pathParts.length == 1) {\n          if (name == p && p.length > pathMatch.length) {\n            pathMatch = p;\n            break;\n          }\n        }\n\n        // wildcard path match\n        else {\n          if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) {\n            pathMatch = p;\n            wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length);\n          }\n        }\n      }\n\n      var outPath = this.paths[pathMatch];\n      if (wildcard)\n        outPath = outPath.replace('*', wildcard);\n\n      // percent encode just '#' in module names\n      // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238\n      // we should encode everything, but it breaks for servers that don't expect it \n      // like in (https://github.com/systemjs/systemjs/issues/168)\n      if (isBrowser)\n        outPath = outPath.replace(/#/g, '%23');\n\n      return toAbsoluteURL(this.baseURL, outPath);\n    }\n\n    fetch(load) {\n      var self = this;\n      return new Promise(function(resolve, reject) {\n        fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) {\n          resolve(source);\n        }, reject);\n      });\n    }\n\n  }\n\n  var System = new SystemLoader();\n\n  // note we have to export before runing \"init\" below\n  if (typeof exports === 'object')\n    module.exports = System;\n\n  __global.System = System;\n\n  // <script type=\"module\"> support\n  // allow a data-init function callback once loaded\n  if (isBrowser && typeof document.getElementsByTagName != 'undefined') {\n    var curScript = document.getElementsByTagName('script');\n    curScript = curScript[curScript.length - 1];\n\n    function completed() {\n      document.removeEventListener( \"DOMContentLoaded\", completed, false );\n      window.removeEventListener( \"load\", completed, false );\n      ready();\n    }\n\n    function ready() {\n      var scripts = document.getElementsByTagName('script');\n      for (var i = 0; i < scripts.length; i++) {\n        var script = scripts[i];\n        if (script.type == 'module') {\n          var source = script.innerHTML.substr(1);\n          System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); });\n        }\n      }\n    }\n\n    // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63\n    if (document.readyState === 'complete') {\n      setTimeout(ready);\n    }\n    else if (document.addEventListener) {\n      document.addEventListener('DOMContentLoaded', completed, false);\n      window.addEventListener('load', completed, false);\n    }\n\n    // run the data-init function on the script tag\n    if (curScript.getAttribute('data-init'))\n      window[curScript.getAttribute('data-init')]();\n  }\n})();\n"
  },
  {
    "path": "client/components/lodash/.bower.json",
    "content": "{\n  \"name\": \"lodash\",\n  \"version\": \"2.4.1\",\n  \"main\": \"dist/lodash.compat.js\",\n  \"ignore\": [\n    \".*\",\n    \"*.custom.*\",\n    \"*.template.*\",\n    \"*.map\",\n    \"*.md\",\n    \"/*.min.*\",\n    \"/lodash.js\",\n    \"index.js\",\n    \"component.json\",\n    \"package.json\",\n    \"doc\",\n    \"modularize\",\n    \"node_modules\",\n    \"perf\",\n    \"test\",\n    \"vendor\"\n  ],\n  \"homepage\": \"https://github.com/lodash/lodash\",\n  \"_release\": \"2.4.1\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"2.4.1\",\n    \"commit\": \"c7aa842eded639d6d90a5714d3195a8802c86687\"\n  },\n  \"_source\": \"git://github.com/lodash/lodash.git\",\n  \"_target\": \"~2.4.1\",\n  \"_originalSource\": \"lodash\"\n}"
  },
  {
    "path": "client/components/lodash/LICENSE.txt",
    "content": "Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\nBased on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas,\nDocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "client/components/lodash/bower.json",
    "content": "{\n  \"name\": \"lodash\",\n  \"version\": \"2.4.1\",\n  \"main\": \"dist/lodash.compat.js\",\n  \"ignore\": [\n    \".*\",\n    \"*.custom.*\",\n    \"*.template.*\",\n    \"*.map\",\n    \"*.md\",\n    \"/*.min.*\",\n    \"/lodash.js\",\n    \"index.js\",\n    \"component.json\",\n    \"package.json\",\n    \"doc\",\n    \"modularize\",\n    \"node_modules\",\n    \"perf\",\n    \"test\",\n    \"vendor\"\n  ]\n}\n"
  },
  {
    "path": "client/components/lodash/dist/lodash.compat.js",
    "content": "/**\n * @license\n * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>\n * Build: `lodash -o ./dist/lodash.compat.js`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre ES5 environments */\n  var undefined;\n\n  /** Used to pool arrays and objects used internally */\n  var arrayPool = [],\n      objectPool = [];\n\n  /** Used to generate unique IDs */\n  var idCounter = 0;\n\n  /** Used internally to indicate various things */\n  var indicatorObject = {};\n\n  /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */\n  var keyPrefix = +new Date + '';\n\n  /** Used as the size when optimizations are enabled for large arrays */\n  var largeArraySize = 75;\n\n  /** Used as the max size of the `arrayPool` and `objectPool` */\n  var maxPoolSize = 40;\n\n  /** Used to detect and test whitespace */\n  var whitespace = (\n    // whitespace\n    ' \\t\\x0B\\f\\xA0\\ufeff' +\n\n    // line terminators\n    '\\n\\r\\u2028\\u2029' +\n\n    // unicode category \"Zs\" space separators\n    '\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'\n  );\n\n  /** Used to match empty string literals in compiled template source */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /**\n   * Used to match ES6 template delimiters\n   * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match regexp flags from their coerced string values */\n  var reFlags = /\\w*$/;\n\n  /** Used to detected named functions */\n  var reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n  /** Used to match \"interpolate\" template delimiters */\n  var reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match leading whitespace and zeros to be removed */\n  var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');\n\n  /** Used to ensure capturing order of template delimiters */\n  var reNoMatch = /($^)/;\n\n  /** Used to detect functions containing a `this` reference */\n  var reThis = /\\bthis\\b/;\n\n  /** Used to match unescaped characters in compiled string literals */\n  var reUnescapedString = /['\\n\\r\\t\\u2028\\u2029\\\\]/g;\n\n  /** Used to assign default `context` object properties */\n  var contextProps = [\n    'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object',\n    'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',\n    'parseInt', 'setTimeout'\n  ];\n\n  /** Used to fix the JScript [[DontEnum]] bug */\n  var shadowedProps = [\n    'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n    'toLocaleString', 'toString', 'valueOf'\n  ];\n\n  /** Used to make template sourceURLs easier to identify */\n  var templateCounter = 0;\n\n  /** `Object#toString` result shortcuts */\n  var argsClass = '[object Arguments]',\n      arrayClass = '[object Array]',\n      boolClass = '[object Boolean]',\n      dateClass = '[object Date]',\n      errorClass = '[object Error]',\n      funcClass = '[object Function]',\n      numberClass = '[object Number]',\n      objectClass = '[object Object]',\n      regexpClass = '[object RegExp]',\n      stringClass = '[object String]';\n\n  /** Used to identify object classifications that `_.clone` supports */\n  var cloneableClasses = {};\n  cloneableClasses[funcClass] = false;\n  cloneableClasses[argsClass] = cloneableClasses[arrayClass] =\n  cloneableClasses[boolClass] = cloneableClasses[dateClass] =\n  cloneableClasses[numberClass] = cloneableClasses[objectClass] =\n  cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;\n\n  /** Used as an internal `_.debounce` options object */\n  var debounceOptions = {\n    'leading': false,\n    'maxWait': 0,\n    'trailing': false\n  };\n\n  /** Used as the property descriptor for `__bindData__` */\n  var descriptor = {\n    'configurable': false,\n    'enumerable': false,\n    'value': null,\n    'writable': false\n  };\n\n  /** Used as the data object for `iteratorTemplate` */\n  var iteratorData = {\n    'args': '',\n    'array': null,\n    'bottom': '',\n    'firstArg': '',\n    'init': '',\n    'keys': null,\n    'loop': '',\n    'shadowedProps': null,\n    'support': null,\n    'top': '',\n    'useHas': false\n  };\n\n  /** Used to determine if values are of the language type Object */\n  var objectTypes = {\n    'boolean': false,\n    'function': true,\n    'object': true,\n    'number': false,\n    'string': false,\n    'undefined': false\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\t': 't',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Used as a reference to the global object */\n  var root = (objectTypes[typeof window] && window) || this;\n\n  /** Detect free variable `exports` */\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module` */\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports` */\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */\n  var freeGlobal = objectTypes[typeof global] && global;\n  if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * The base implementation of `_.indexOf` without support for binary searches\n   * or `fromIndex` constraints.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {number} [fromIndex=0] The index to search from.\n   * @returns {number} Returns the index of the matched value or `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    var index = (fromIndex || 0) - 1,\n        length = array ? array.length : 0;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * An implementation of `_.contains` for cache objects that mimics the return\n   * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.\n   *\n   * @private\n   * @param {Object} cache The cache object to inspect.\n   * @param {*} value The value to search for.\n   * @returns {number} Returns `0` if `value` is found, else `-1`.\n   */\n  function cacheIndexOf(cache, value) {\n    var type = typeof value;\n    cache = cache.cache;\n\n    if (type == 'boolean' || value == null) {\n      return cache[value] ? 0 : -1;\n    }\n    if (type != 'number' && type != 'string') {\n      type = 'object';\n    }\n    var key = type == 'number' ? value : keyPrefix + value;\n    cache = (cache = cache[type]) && cache[key];\n\n    return type == 'object'\n      ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)\n      : (cache ? 0 : -1);\n  }\n\n  /**\n   * Adds a given value to the corresponding cache object.\n   *\n   * @private\n   * @param {*} value The value to add to the cache.\n   */\n  function cachePush(value) {\n    var cache = this.cache,\n        type = typeof value;\n\n    if (type == 'boolean' || value == null) {\n      cache[value] = true;\n    } else {\n      if (type != 'number' && type != 'string') {\n        type = 'object';\n      }\n      var key = type == 'number' ? value : keyPrefix + value,\n          typeCache = cache[type] || (cache[type] = {});\n\n      if (type == 'object') {\n        (typeCache[key] || (typeCache[key] = [])).push(value);\n      } else {\n        typeCache[key] = true;\n      }\n    }\n  }\n\n  /**\n   * Used by `_.max` and `_.min` as the default callback when a given\n   * collection is a string value.\n   *\n   * @private\n   * @param {string} value The character to inspect.\n   * @returns {number} Returns the code unit of given character.\n   */\n  function charAtCallback(value) {\n    return value.charCodeAt(0);\n  }\n\n  /**\n   * Used by `sortBy` to compare transformed `collection` elements, stable sorting\n   * them in ascending order.\n   *\n   * @private\n   * @param {Object} a The object to compare to `b`.\n   * @param {Object} b The object to compare to `a`.\n   * @returns {number} Returns the sort order indicator of `1` or `-1`.\n   */\n  function compareAscending(a, b) {\n    var ac = a.criteria,\n        bc = b.criteria,\n        index = -1,\n        length = ac.length;\n\n    while (++index < length) {\n      var value = ac[index],\n          other = bc[index];\n\n      if (value !== other) {\n        if (value > other || typeof value == 'undefined') {\n          return 1;\n        }\n        if (value < other || typeof other == 'undefined') {\n          return -1;\n        }\n      }\n    }\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n    // that causes it, under certain circumstances, to return the same value for\n    // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247\n    //\n    // This also ensures a stable sort in V8 and other engines.\n    // See http://code.google.com/p/v8/issues/detail?id=90\n    return a.index - b.index;\n  }\n\n  /**\n   * Creates a cache object to optimize linear searches of large arrays.\n   *\n   * @private\n   * @param {Array} [array=[]] The array to search.\n   * @returns {null|Object} Returns the cache object or `null` if caching should not be used.\n   */\n  function createCache(array) {\n    var index = -1,\n        length = array.length,\n        first = array[0],\n        mid = array[(length / 2) | 0],\n        last = array[length - 1];\n\n    if (first && typeof first == 'object' &&\n        mid && typeof mid == 'object' && last && typeof last == 'object') {\n      return false;\n    }\n    var cache = getObject();\n    cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;\n\n    var result = getObject();\n    result.array = array;\n    result.cache = cache;\n    result.push = cachePush;\n\n    while (++index < length) {\n      result.push(array[index]);\n    }\n    return result;\n  }\n\n  /**\n   * Used by `template` to escape characters for inclusion in compiled\n   * string literals.\n   *\n   * @private\n   * @param {string} match The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(match) {\n    return '\\\\' + stringEscapes[match];\n  }\n\n  /**\n   * Gets an array from the array pool or creates a new one if the pool is empty.\n   *\n   * @private\n   * @returns {Array} The array from the pool.\n   */\n  function getArray() {\n    return arrayPool.pop() || [];\n  }\n\n  /**\n   * Gets an object from the object pool or creates a new one if the pool is empty.\n   *\n   * @private\n   * @returns {Object} The object from the pool.\n   */\n  function getObject() {\n    return objectPool.pop() || {\n      'array': null,\n      'cache': null,\n      'criteria': null,\n      'false': false,\n      'index': 0,\n      'null': false,\n      'number': null,\n      'object': null,\n      'push': null,\n      'string': null,\n      'true': false,\n      'undefined': false,\n      'value': null\n    };\n  }\n\n  /**\n   * Checks if `value` is a DOM node in IE < 9.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`.\n   */\n  function isNode(value) {\n    // IE < 9 presents DOM nodes as `Object` objects except they have `toString`\n    // methods that are `typeof` \"string\" and still can coerce nodes to strings\n    return typeof value.toString != 'function' && typeof (value + '') == 'string';\n  }\n\n  /**\n   * Releases the given array back to the array pool.\n   *\n   * @private\n   * @param {Array} [array] The array to release.\n   */\n  function releaseArray(array) {\n    array.length = 0;\n    if (arrayPool.length < maxPoolSize) {\n      arrayPool.push(array);\n    }\n  }\n\n  /**\n   * Releases the given object back to the object pool.\n   *\n   * @private\n   * @param {Object} [object] The object to release.\n   */\n  function releaseObject(object) {\n    var cache = object.cache;\n    if (cache) {\n      releaseObject(cache);\n    }\n    object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;\n    if (objectPool.length < maxPoolSize) {\n      objectPool.push(object);\n    }\n  }\n\n  /**\n   * Slices the `collection` from the `start` index up to, but not including,\n   * the `end` index.\n   *\n   * Note: This function is used instead of `Array#slice` to support node lists\n   * in IE < 9 and to ensure dense arrays are returned.\n   *\n   * @private\n   * @param {Array|Object|string} collection The collection to slice.\n   * @param {number} start The start index.\n   * @param {number} end The end index.\n   * @returns {Array} Returns the new array.\n   */\n  function slice(array, start, end) {\n    start || (start = 0);\n    if (typeof end == 'undefined') {\n      end = array ? array.length : 0;\n    }\n    var index = -1,\n        length = end - start || 0,\n        result = Array(length < 0 ? 0 : length);\n\n    while (++index < length) {\n      result[index] = array[start + index];\n    }\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new `lodash` function using the given context object.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns the `lodash` function.\n   */\n  function runInContext(context) {\n    // Avoid issues with some ES3 environments that attempt to use values, named\n    // after built-in constructors like `Object`, for the creation of literals.\n    // ES5 clears this up by stating that literals must use built-in constructors.\n    // See http://es5.github.io/#x11.1.5.\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n    /** Native constructor references */\n    var Array = context.Array,\n        Boolean = context.Boolean,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /**\n     * Used for `Array` method references.\n     *\n     * Normally `Array.prototype` would suffice, however, using an array literal\n     * avoids issues in Narwhal.\n     */\n    var arrayRef = [];\n\n    /** Used for native method references */\n    var errorProto = Error.prototype,\n        objectProto = Object.prototype,\n        stringProto = String.prototype;\n\n    /** Used to restore the original `_` reference in `noConflict` */\n    var oldDash = context._;\n\n    /** Used to resolve the internal [[Class]] of values */\n    var toString = objectProto.toString;\n\n    /** Used to detect if a method is native */\n    var reNative = RegExp('^' +\n      String(toString)\n        .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n        .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n    );\n\n    /** Native method shortcuts */\n    var ceil = Math.ceil,\n        clearTimeout = context.clearTimeout,\n        floor = Math.floor,\n        fnToString = Function.prototype.toString,\n        getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n        hasOwnProperty = objectProto.hasOwnProperty,\n        push = arrayRef.push,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        setTimeout = context.setTimeout,\n        splice = arrayRef.splice,\n        unshift = arrayRef.unshift;\n\n    /** Used to set meta data on functions */\n    var defineProperty = (function() {\n      // IE 8 only accepts DOM elements\n      try {\n        var o = {},\n            func = isNative(func = Object.defineProperty) && func,\n            result = func(o, o, o) && func;\n      } catch(e) { }\n      return result;\n    }());\n\n    /* Native method shortcuts for methods with the same name as other `lodash` methods */\n    var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,\n        nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n        nativeIsFinite = context.isFinite,\n        nativeIsNaN = context.isNaN,\n        nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n\n    /** Used to lookup a built-in constructor by [[Class]] */\n    var ctorByClass = {};\n    ctorByClass[arrayClass] = Array;\n    ctorByClass[boolClass] = Boolean;\n    ctorByClass[dateClass] = Date;\n    ctorByClass[funcClass] = Function;\n    ctorByClass[objectClass] = Object;\n    ctorByClass[numberClass] = Number;\n    ctorByClass[regexpClass] = RegExp;\n    ctorByClass[stringClass] = String;\n\n    /** Used to avoid iterating non-enumerable properties in IE < 9 */\n    var nonEnumProps = {};\n    nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\n    nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true };\n    nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true };\n    nonEnumProps[objectClass] = { 'constructor': true };\n\n    (function() {\n      var length = shadowedProps.length;\n      while (length--) {\n        var key = shadowedProps[length];\n        for (var className in nonEnumProps) {\n          if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) {\n            nonEnumProps[className][key] = false;\n          }\n        }\n      }\n    }());\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps the given value to enable intuitive\n     * method chaining.\n     *\n     * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:\n     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,\n     * and `unshift`\n     *\n     * Chaining is supported in custom builds as long as the `value` method is\n     * implicitly or explicitly included in the build.\n     *\n     * The chainable wrapper functions are:\n     * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,\n     * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,\n     * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,\n     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\n     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\n     * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,\n     * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,\n     * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,\n     * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,\n     * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,\n     * and `zip`\n     *\n     * The non-chainable wrapper functions are:\n     * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,\n     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,\n     * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\n     * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,\n     * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,\n     * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,\n     * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,\n     * `template`, `unescape`, `uniqueId`, and `value`\n     *\n     * The wrapper functions `first` and `last` return wrapped values when `n` is\n     * provided, otherwise they return unwrapped values.\n     *\n     * Explicit chaining can be enabled by using the `_.chain` method.\n     *\n     * @name _\n     * @constructor\n     * @category Chaining\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns a `lodash` instance.\n     * @example\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // returns an unwrapped value\n     * wrapped.reduce(function(sum, num) {\n     *   return sum + num;\n     * });\n     * // => 6\n     *\n     * // returns a wrapped value\n     * var squares = wrapped.map(function(num) {\n     *   return num * num;\n     * });\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor\n      return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))\n       ? value\n       : new lodashWrapper(value);\n    }\n\n    /**\n     * A fast path for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @param {boolean} chainAll A flag to enable chaining for all methods\n     * @returns {Object} Returns a `lodash` instance.\n     */\n    function lodashWrapper(value, chainAll) {\n      this.__chain__ = !!chainAll;\n      this.__wrapped__ = value;\n    }\n    // ensure `new lodashWrapper` is an instance of `lodash`\n    lodashWrapper.prototype = lodash.prototype;\n\n    /**\n     * An object used to flag environments features.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    var support = lodash.support = {};\n\n    (function() {\n      var ctor = function() { this.x = 1; },\n          object = { '0': 1, 'length': 1 },\n          props = [];\n\n      ctor.prototype = { 'valueOf': 1, 'y': 1 };\n      for (var key in new ctor) { props.push(key); }\n      for (key in arguments) { }\n\n      /**\n       * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.argsClass = toString.call(arguments) == argsClass;\n\n      /**\n       * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);\n\n      /**\n       * Detect if `name` or `message` properties of `Error.prototype` are\n       * enumerable by default. (IE < 9, Safari < 5.1)\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name');\n\n      /**\n       * Detect if `prototype` properties are enumerable by default.\n       *\n       * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n       * (if the prototype or a property on the prototype has been set)\n       * incorrectly sets a function's `prototype` property [[Enumerable]]\n       * value to `true`.\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype');\n\n      /**\n       * Detect if functions can be decompiled by `Function#toString`\n       * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);\n\n      /**\n       * Detect if `Function#name` is supported (all but IE).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.funcNames = typeof Function.name == 'string';\n\n      /**\n       * Detect if `arguments` object indexes are non-enumerable\n       * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.nonEnumArgs = key != 0;\n\n      /**\n       * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n       *\n       * In IE < 9 an objects own properties, shadowing non-enumerable ones, are\n       * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.nonEnumShadows = !/valueOf/.test(props);\n\n      /**\n       * Detect if own properties are iterated after inherited properties (all but IE < 9).\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.ownLast = props[0] != 'x';\n\n      /**\n       * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.\n       *\n       * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`\n       * and `splice()` functions that fail to remove the last element, `value[0]`,\n       * of array-like objects even though the `length` property is set to `0`.\n       * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`\n       * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);\n\n      /**\n       * Detect lack of support for accessing string characters by index.\n       *\n       * IE < 8 can't access characters by index and IE 8 can only access\n       * characters by index on string literals.\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n\n      /**\n       * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9)\n       * and that the JS engine errors when attempting to coerce an object to\n       * a string without a `toString` function.\n       *\n       * @memberOf _.support\n       * @type boolean\n       */\n      try {\n        support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));\n      } catch(e) {\n        support.nodeClass = true;\n      }\n    }(1));\n\n    /**\n     * By default, the template delimiters used by Lo-Dash are similar to those in\n     * embedded Ruby (ERB). Change the following template settings to use alternative\n     * delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'escape': /<%-([\\s\\S]+?)%>/g,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'evaluate': /<%([\\s\\S]+?)%>/g,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type string\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type Object\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type Function\n         */\n        '_': lodash\n      }\n    };\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * The template used to create iterator functions.\n     *\n     * @private\n     * @param {Object} data The data object used to populate the text.\n     * @returns {string} Returns the interpolated text.\n     */\n    var iteratorTemplate = function(obj) {\n\n      var __p = 'var index, iterable = ' +\n      (obj.firstArg) +\n      ', result = ' +\n      (obj.init) +\n      ';\\nif (!iterable) return result;\\n' +\n      (obj.top) +\n      ';';\n       if (obj.array) {\n      __p += '\\nvar length = iterable.length; index = -1;\\nif (' +\n      (obj.array) +\n      ') {  ';\n       if (support.unindexedChars) {\n      __p += '\\n  if (isString(iterable)) {\\n    iterable = iterable.split(\\'\\')\\n  }  ';\n       }\n      __p += '\\n  while (++index < length) {\\n    ' +\n      (obj.loop) +\n      ';\\n  }\\n}\\nelse {  ';\n       } else if (support.nonEnumArgs) {\n      __p += '\\n  var length = iterable.length; index = -1;\\n  if (length && isArguments(iterable)) {\\n    while (++index < length) {\\n      index += \\'\\';\\n      ' +\n      (obj.loop) +\n      ';\\n    }\\n  } else {  ';\n       }\n\n       if (support.enumPrototypes) {\n      __p += '\\n  var skipProto = typeof iterable == \\'function\\';\\n  ';\n       }\n\n       if (support.enumErrorProps) {\n      __p += '\\n  var skipErrorProps = iterable === errorProto || iterable instanceof Error;\\n  ';\n       }\n\n          var conditions = [];    if (support.enumPrototypes) { conditions.push('!(skipProto && index == \"prototype\")'); }    if (support.enumErrorProps)  { conditions.push('!(skipErrorProps && (index == \"message\" || index == \"name\"))'); }\n\n       if (obj.useHas && obj.keys) {\n      __p += '\\n  var ownIndex = -1,\\n      ownProps = objectTypes[typeof iterable] && keys(iterable),\\n      length = ownProps ? ownProps.length : 0;\\n\\n  while (++ownIndex < length) {\\n    index = ownProps[ownIndex];\\n';\n          if (conditions.length) {\n      __p += '    if (' +\n      (conditions.join(' && ')) +\n      ') {\\n  ';\n       }\n      __p +=\n      (obj.loop) +\n      ';    ';\n       if (conditions.length) {\n      __p += '\\n    }';\n       }\n      __p += '\\n  }  ';\n       } else {\n      __p += '\\n  for (index in iterable) {\\n';\n          if (obj.useHas) { conditions.push(\"hasOwnProperty.call(iterable, index)\"); }    if (conditions.length) {\n      __p += '    if (' +\n      (conditions.join(' && ')) +\n      ') {\\n  ';\n       }\n      __p +=\n      (obj.loop) +\n      ';    ';\n       if (conditions.length) {\n      __p += '\\n    }';\n       }\n      __p += '\\n  }    ';\n       if (support.nonEnumShadows) {\n      __p += '\\n\\n  if (iterable !== objectProto) {\\n    var ctor = iterable.constructor,\\n        isProto = iterable === (ctor && ctor.prototype),\\n        className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\\n        nonEnum = nonEnumProps[className];\\n      ';\n       for (k = 0; k < 7; k++) {\n      __p += '\\n    index = \\'' +\n      (obj.shadowedProps[k]) +\n      '\\';\\n    if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))';\n              if (!obj.useHas) {\n      __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])';\n       }\n      __p += ') {\\n      ' +\n      (obj.loop) +\n      ';\\n    }      ';\n       }\n      __p += '\\n  }    ';\n       }\n\n       }\n\n       if (obj.array || support.nonEnumArgs) {\n      __p += '\\n}';\n       }\n      __p +=\n      (obj.bottom) +\n      ';\\nreturn result';\n\n      return __p\n    };\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * The base implementation of `_.bind` that creates the bound function and\n     * sets its meta data.\n     *\n     * @private\n     * @param {Array} bindData The bind data array.\n     * @returns {Function} Returns the new bound function.\n     */\n    function baseBind(bindData) {\n      var func = bindData[0],\n          partialArgs = bindData[2],\n          thisArg = bindData[4];\n\n      function bound() {\n        // `Function#bind` spec\n        // http://es5.github.io/#x15.3.4.5\n        if (partialArgs) {\n          // avoid `arguments` object deoptimizations by using `slice` instead\n          // of `Array.prototype.slice.call` and not assigning `arguments` to a\n          // variable as a ternary expression\n          var args = slice(partialArgs);\n          push.apply(args, arguments);\n        }\n        // mimic the constructor's `return` behavior\n        // http://es5.github.io/#x13.2.2\n        if (this instanceof bound) {\n          // ensure `new bound` is an instance of `func`\n          var thisBinding = baseCreate(func.prototype),\n              result = func.apply(thisBinding, args || arguments);\n          return isObject(result) ? result : thisBinding;\n        }\n        return func.apply(thisArg, args || arguments);\n      }\n      setBindData(bound, bindData);\n      return bound;\n    }\n\n    /**\n     * The base implementation of `_.clone` without argument juggling or support\n     * for `thisArg` binding.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep=false] Specify a deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates clones with source counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, isDeep, callback, stackA, stackB) {\n      if (callback) {\n        var result = callback(value);\n        if (typeof result != 'undefined') {\n          return result;\n        }\n      }\n      // inspect [[Class]]\n      var isObj = isObject(value);\n      if (isObj) {\n        var className = toString.call(value);\n        if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {\n          return value;\n        }\n        var ctor = ctorByClass[className];\n        switch (className) {\n          case boolClass:\n          case dateClass:\n            return new ctor(+value);\n\n          case numberClass:\n          case stringClass:\n            return new ctor(value);\n\n          case regexpClass:\n            result = ctor(value.source, reFlags.exec(value));\n            result.lastIndex = value.lastIndex;\n            return result;\n        }\n      } else {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isDeep) {\n        // check for circular references and return corresponding clone\n        var initedStack = !stackA;\n        stackA || (stackA = getArray());\n        stackB || (stackB = getArray());\n\n        var length = stackA.length;\n        while (length--) {\n          if (stackA[length] == value) {\n            return stackB[length];\n          }\n        }\n        result = isArr ? ctor(value.length) : {};\n      }\n      else {\n        result = isArr ? slice(value) : assign({}, value);\n      }\n      // add array properties assigned by `RegExp#exec`\n      if (isArr) {\n        if (hasOwnProperty.call(value, 'index')) {\n          result.index = value.index;\n        }\n        if (hasOwnProperty.call(value, 'input')) {\n          result.input = value.input;\n        }\n      }\n      // exit for shallow clone\n      if (!isDeep) {\n        return result;\n      }\n      // add the source value to the stack of traversed objects\n      // and associate it with its clone\n      stackA.push(value);\n      stackB.push(result);\n\n      // recursively populate clone (susceptible to call stack limits)\n      (isArr ? baseEach : forOwn)(value, function(objValue, key) {\n        result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);\n      });\n\n      if (initedStack) {\n        releaseArray(stackA);\n        releaseArray(stackB);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} prototype The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    function baseCreate(prototype, properties) {\n      return isObject(prototype) ? nativeCreate(prototype) : {};\n    }\n    // fallback for browsers without `Object.create`\n    if (!nativeCreate) {\n      baseCreate = (function() {\n        function Object() {}\n        return function(prototype) {\n          if (isObject(prototype)) {\n            Object.prototype = prototype;\n            var result = new Object;\n            Object.prototype = null;\n          }\n          return result || context.Object();\n        };\n      }());\n    }\n\n    /**\n     * The base implementation of `_.createCallback` without support for creating\n     * \"_.pluck\" or \"_.where\" style callbacks.\n     *\n     * @private\n     * @param {*} [func=identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of the created callback.\n     * @param {number} [argCount] The number of arguments the callback accepts.\n     * @returns {Function} Returns a callback function.\n     */\n    function baseCreateCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      // exit early for no `thisArg` or already bound by `Function#bind`\n      if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n        return func;\n      }\n      var bindData = func.__bindData__;\n      if (typeof bindData == 'undefined') {\n        if (support.funcNames) {\n          bindData = !func.name;\n        }\n        bindData = bindData || !support.funcDecomp;\n        if (!bindData) {\n          var source = fnToString.call(func);\n          if (!support.funcNames) {\n            bindData = !reFuncName.test(source);\n          }\n          if (!bindData) {\n            // checks if `func` references the `this` keyword and stores the result\n            bindData = reThis.test(source);\n            setBindData(func, bindData);\n          }\n        }\n      }\n      // exit early if there are no `this` references or `func` is bound\n      if (bindData === false || (bindData !== true && bindData[1] & 1)) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 2: return function(a, b) {\n          return func.call(thisArg, a, b);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n      }\n      return bind(func, thisArg);\n    }\n\n    /**\n     * The base implementation of `createWrapper` that creates the wrapper and\n     * sets its meta data.\n     *\n     * @private\n     * @param {Array} bindData The bind data array.\n     * @returns {Function} Returns the new function.\n     */\n    function baseCreateWrapper(bindData) {\n      var func = bindData[0],\n          bitmask = bindData[1],\n          partialArgs = bindData[2],\n          partialRightArgs = bindData[3],\n          thisArg = bindData[4],\n          arity = bindData[5];\n\n      var isBind = bitmask & 1,\n          isBindKey = bitmask & 2,\n          isCurry = bitmask & 4,\n          isCurryBound = bitmask & 8,\n          key = func;\n\n      function bound() {\n        var thisBinding = isBind ? thisArg : this;\n        if (partialArgs) {\n          var args = slice(partialArgs);\n          push.apply(args, arguments);\n        }\n        if (partialRightArgs || isCurry) {\n          args || (args = slice(arguments));\n          if (partialRightArgs) {\n            push.apply(args, partialRightArgs);\n          }\n          if (isCurry && args.length < arity) {\n            bitmask |= 16 & ~32;\n            return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n          }\n        }\n        args || (args = arguments);\n        if (isBindKey) {\n          func = thisBinding[key];\n        }\n        if (this instanceof bound) {\n          thisBinding = baseCreate(func.prototype);\n          var result = func.apply(thisBinding, args);\n          return isObject(result) ? result : thisBinding;\n        }\n        return func.apply(thisBinding, args);\n      }\n      setBindData(bound, bindData);\n      return bound;\n    }\n\n    /**\n     * The base implementation of `_.difference` that accepts a single array\n     * of values to exclude.\n     *\n     * @private\n     * @param {Array} array The array to process.\n     * @param {Array} [values] The array of values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     */\n    function baseDifference(array, values) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array ? array.length : 0,\n          isLarge = length >= largeArraySize && indexOf === baseIndexOf,\n          result = [];\n\n      if (isLarge) {\n        var cache = createCache(values);\n        if (cache) {\n          indexOf = cacheIndexOf;\n          values = cache;\n        } else {\n          isLarge = false;\n        }\n      }\n      while (++index < length) {\n        var value = array[index];\n        if (indexOf(values, value) < 0) {\n          result.push(value);\n        }\n      }\n      if (isLarge) {\n        releaseObject(values);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` without support for callback\n     * shorthands or `thisArg` binding.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n     * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.\n     * @param {number} [fromIndex=0] The index to start from.\n     * @returns {Array} Returns a new flattened array.\n     */\n    function baseFlatten(array, isShallow, isStrict, fromIndex) {\n      var index = (fromIndex || 0) - 1,\n          length = array ? array.length : 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n\n        if (value && typeof value == 'object' && typeof value.length == 'number'\n            && (isArray(value) || isArguments(value))) {\n          // recursively flatten arrays (susceptible to call stack limits)\n          if (!isShallow) {\n            value = baseFlatten(value, isShallow, isStrict);\n          }\n          var valIndex = -1,\n              valLength = value.length,\n              resIndex = result.length;\n\n          result.length += valLength;\n          while (++valIndex < valLength) {\n            result[resIndex++] = value[valIndex];\n          }\n        } else if (!isStrict) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.isEqual`, without support for `thisArg` binding,\n     * that allows partial \"_.where\" style comparisons.\n     *\n     * @private\n     * @param {*} a The value to compare.\n     * @param {*} b The other value to compare.\n     * @param {Function} [callback] The function to customize comparing values.\n     * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.\n     * @param {Array} [stackA=[]] Tracks traversed `a` objects.\n     * @param {Array} [stackB=[]] Tracks traversed `b` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {\n      // used to indicate that when comparing objects, `a` has at least the properties of `b`\n      if (callback) {\n        var result = callback(a, b);\n        if (typeof result != 'undefined') {\n          return !!result;\n        }\n      }\n      // exit early for identical values\n      if (a === b) {\n        // treat `+0` vs. `-0` as not equal\n        return a !== 0 || (1 / a == 1 / b);\n      }\n      var type = typeof a,\n          otherType = typeof b;\n\n      // exit early for unlike primitive values\n      if (a === a &&\n          !(a && objectTypes[type]) &&\n          !(b && objectTypes[otherType])) {\n        return false;\n      }\n      // exit early for `null` and `undefined` avoiding ES3's Function#call behavior\n      // http://es5.github.io/#x15.3.4.4\n      if (a == null || b == null) {\n        return a === b;\n      }\n      // compare [[Class]] names\n      var className = toString.call(a),\n          otherClass = toString.call(b);\n\n      if (className == argsClass) {\n        className = objectClass;\n      }\n      if (otherClass == argsClass) {\n        otherClass = objectClass;\n      }\n      if (className != otherClass) {\n        return false;\n      }\n      switch (className) {\n        case boolClass:\n        case dateClass:\n          // coerce dates and booleans to numbers, dates to milliseconds and booleans\n          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal\n          return +a == +b;\n\n        case numberClass:\n          // treat `NaN` vs. `NaN` as equal\n          return (a != +a)\n            ? b != +b\n            // but treat `+0` vs. `-0` as not equal\n            : (a == 0 ? (1 / a == 1 / b) : a == +b);\n\n        case regexpClass:\n        case stringClass:\n          // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)\n          // treat string primitives and their corresponding object instances as equal\n          return a == String(b);\n      }\n      var isArr = className == arrayClass;\n      if (!isArr) {\n        // unwrap any `lodash` wrapped values\n        var aWrapped = hasOwnProperty.call(a, '__wrapped__'),\n            bWrapped = hasOwnProperty.call(b, '__wrapped__');\n\n        if (aWrapped || bWrapped) {\n          return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);\n        }\n        // exit for functions and DOM nodes\n        if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) {\n          return false;\n        }\n        // in older versions of Opera, `arguments` objects have `Array` constructors\n        var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor,\n            ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor;\n\n        // non `Object` object instances with different constructors are not equal\n        if (ctorA != ctorB &&\n              !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&\n              ('constructor' in a && 'constructor' in b)\n            ) {\n          return false;\n        }\n      }\n      // assume cyclic structures are equal\n      // the algorithm for detecting cyclic structures is adapted from ES 5.1\n      // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)\n      var initedStack = !stackA;\n      stackA || (stackA = getArray());\n      stackB || (stackB = getArray());\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == a) {\n          return stackB[length] == b;\n        }\n      }\n      var size = 0;\n      result = true;\n\n      // add `a` and `b` to the stack of traversed objects\n      stackA.push(a);\n      stackB.push(b);\n\n      // recursively compare objects and arrays (susceptible to call stack limits)\n      if (isArr) {\n        // compare lengths to determine if a deep comparison is necessary\n        length = a.length;\n        size = b.length;\n        result = size == length;\n\n        if (result || isWhere) {\n          // deep compare the contents, ignoring non-numeric properties\n          while (size--) {\n            var index = length,\n                value = b[size];\n\n            if (isWhere) {\n              while (index--) {\n                if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {\n                  break;\n                }\n              }\n            } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {\n              break;\n            }\n          }\n        }\n      }\n      else {\n        // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`\n        // which, in this case, is more costly\n        forIn(b, function(value, key, b) {\n          if (hasOwnProperty.call(b, key)) {\n            // count the number of properties.\n            size++;\n            // deep compare each property value.\n            return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));\n          }\n        });\n\n        if (result && !isWhere) {\n          // ensure both objects have the same number of properties\n          forIn(a, function(value, key, a) {\n            if (hasOwnProperty.call(a, key)) {\n              // `size` will be `-1` if `a` has more properties than `b`\n              return (result = --size > -1);\n            }\n          });\n        }\n      }\n      stackA.pop();\n      stackB.pop();\n\n      if (initedStack) {\n        releaseArray(stackA);\n        releaseArray(stackB);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.merge` without argument juggling or support\n     * for `thisArg` binding.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {Function} [callback] The function to customize merging properties.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\n     */\n    function baseMerge(object, source, callback, stackA, stackB) {\n      (isArray(source) ? forEach : forOwn)(source, function(source, key) {\n        var found,\n            isArr,\n            result = source,\n            value = object[key];\n\n        if (source && ((isArr = isArray(source)) || isPlainObject(source))) {\n          // avoid merging previously merged cyclic sources\n          var stackLength = stackA.length;\n          while (stackLength--) {\n            if ((found = stackA[stackLength] == source)) {\n              value = stackB[stackLength];\n              break;\n            }\n          }\n          if (!found) {\n            var isShallow;\n            if (callback) {\n              result = callback(value, source);\n              if ((isShallow = typeof result != 'undefined')) {\n                value = result;\n              }\n            }\n            if (!isShallow) {\n              value = isArr\n                ? (isArray(value) ? value : [])\n                : (isPlainObject(value) ? value : {});\n            }\n            // add `source` and associated `value` to the stack of traversed objects\n            stackA.push(source);\n            stackB.push(value);\n\n            // recursively merge objects and arrays (susceptible to call stack limits)\n            if (!isShallow) {\n              baseMerge(value, source, callback, stackA, stackB);\n            }\n          }\n        }\n        else {\n          if (callback) {\n            result = callback(value, source);\n            if (typeof result == 'undefined') {\n              result = source;\n            }\n          }\n          if (typeof result != 'undefined') {\n            value = result;\n          }\n        }\n        object[key] = value;\n      });\n    }\n\n    /**\n     * The base implementation of `_.random` without argument juggling or support\n     * for returning floating-point numbers.\n     *\n     * @private\n     * @param {number} min The minimum possible value.\n     * @param {number} max The maximum possible value.\n     * @returns {number} Returns a random number.\n     */\n    function baseRandom(min, max) {\n      return min + floor(nativeRandom() * (max - min + 1));\n    }\n\n    /**\n     * The base implementation of `_.uniq` without support for callback shorthands\n     * or `thisArg` binding.\n     *\n     * @private\n     * @param {Array} array The array to process.\n     * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n     * @param {Function} [callback] The function called per iteration.\n     * @returns {Array} Returns a duplicate-value-free array.\n     */\n    function baseUniq(array, isSorted, callback) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array ? array.length : 0,\n          result = [];\n\n      var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,\n          seen = (callback || isLarge) ? getArray() : result;\n\n      if (isLarge) {\n        var cache = createCache(seen);\n        indexOf = cacheIndexOf;\n        seen = cache;\n      }\n      while (++index < length) {\n        var value = array[index],\n            computed = callback ? callback(value, index, array) : value;\n\n        if (isSorted\n              ? !index || seen[seen.length - 1] !== computed\n              : indexOf(seen, computed) < 0\n            ) {\n          if (callback || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      if (isLarge) {\n        releaseArray(seen.array);\n        releaseObject(seen);\n      } else if (callback) {\n        releaseArray(seen);\n      }\n      return result;\n    }\n\n    /**\n     * Creates a function that aggregates a collection, creating an object composed\n     * of keys generated from the results of running each element of the collection\n     * through a callback. The given `setter` function sets the keys and values\n     * of the composed object.\n     *\n     * @private\n     * @param {Function} setter The setter function.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter) {\n      return function(collection, callback, thisArg) {\n        var result = {};\n        callback = lodash.createCallback(callback, thisArg, 3);\n\n        if (isArray(collection)) {\n          var index = -1,\n              length = collection.length;\n\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, callback(value, index, collection), collection);\n          }\n        } else {\n          baseEach(collection, function(value, key, collection) {\n            setter(result, value, callback(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that, when called, either curries or invokes `func`\n     * with an optional `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to reference.\n     * @param {number} bitmask The bitmask of method flags to compose.\n     *  The bitmask may be composed of the following flags:\n     *  1 - `_.bind`\n     *  2 - `_.bindKey`\n     *  4 - `_.curry`\n     *  8 - `_.curry` (bound)\n     *  16 - `_.partial`\n     *  32 - `_.partialRight`\n     * @param {Array} [partialArgs] An array of arguments to prepend to those\n     *  provided to the new function.\n     * @param {Array} [partialRightArgs] An array of arguments to append to those\n     *  provided to the new function.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new function.\n     */\n    function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n      var isBind = bitmask & 1,\n          isBindKey = bitmask & 2,\n          isCurry = bitmask & 4,\n          isCurryBound = bitmask & 8,\n          isPartial = bitmask & 16,\n          isPartialRight = bitmask & 32;\n\n      if (!isBindKey && !isFunction(func)) {\n        throw new TypeError;\n      }\n      if (isPartial && !partialArgs.length) {\n        bitmask &= ~16;\n        isPartial = partialArgs = false;\n      }\n      if (isPartialRight && !partialRightArgs.length) {\n        bitmask &= ~32;\n        isPartialRight = partialRightArgs = false;\n      }\n      var bindData = func && func.__bindData__;\n      if (bindData && bindData !== true) {\n        // clone `bindData`\n        bindData = slice(bindData);\n        if (bindData[2]) {\n          bindData[2] = slice(bindData[2]);\n        }\n        if (bindData[3]) {\n          bindData[3] = slice(bindData[3]);\n        }\n        // set `thisBinding` is not previously bound\n        if (isBind && !(bindData[1] & 1)) {\n          bindData[4] = thisArg;\n        }\n        // set if previously bound but not currently (subsequent curried functions)\n        if (!isBind && bindData[1] & 1) {\n          bitmask |= 8;\n        }\n        // set curried arity if not yet set\n        if (isCurry && !(bindData[1] & 4)) {\n          bindData[5] = arity;\n        }\n        // append partial left arguments\n        if (isPartial) {\n          push.apply(bindData[2] || (bindData[2] = []), partialArgs);\n        }\n        // append partial right arguments\n        if (isPartialRight) {\n          unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);\n        }\n        // merge flags\n        bindData[1] |= bitmask;\n        return createWrapper.apply(null, bindData);\n      }\n      // fast path for `_.bind`\n      var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n      return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n    }\n\n    /**\n     * Creates compiled iteration functions.\n     *\n     * @private\n     * @param {...Object} [options] The compile options object(s).\n     * @param {string} [options.array] Code to determine if the iterable is an array or array-like.\n     * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop.\n     * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration.\n     * @param {string} [options.args] A comma separated string of iteration function arguments.\n     * @param {string} [options.top] Code to execute before the iteration branches.\n     * @param {string} [options.loop] Code to execute in the object loop.\n     * @param {string} [options.bottom] Code to execute after the iteration branches.\n     * @returns {Function} Returns the compiled function.\n     */\n    function createIterator() {\n      // data properties\n      iteratorData.shadowedProps = shadowedProps;\n\n      // iterator options\n      iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';\n      iteratorData.init = 'iterable';\n      iteratorData.useHas = true;\n\n      // merge options into a template data object\n      for (var object, index = 0; object = arguments[index]; index++) {\n        for (var key in object) {\n          iteratorData[key] = object[key];\n        }\n      }\n      var args = iteratorData.args;\n      iteratorData.firstArg = /^[^,]+/.exec(args)[0];\n\n      // create the function factory\n      var factory = Function(\n          'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +\n          'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +\n          'objectTypes, nonEnumProps, stringClass, stringProto, toString',\n        'return function(' + args + ') {\\n' + iteratorTemplate(iteratorData) + '\\n}'\n      );\n\n      // return the compiled function\n      return factory(\n        baseCreateCallback, errorClass, errorProto, hasOwnProperty,\n        indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,\n        objectTypes, nonEnumProps, stringClass, stringProto, toString\n      );\n    }\n\n    /**\n     * Used by `escape` to convert characters to HTML entities.\n     *\n     * @private\n     * @param {string} match The matched character to escape.\n     * @returns {string} Returns the escaped character.\n     */\n    function escapeHtmlChar(match) {\n      return htmlEscapes[match];\n    }\n\n    /**\n     * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n     * customized, this method returns the custom method, otherwise it returns\n     * the `baseIndexOf` function.\n     *\n     * @private\n     * @returns {Function} Returns the \"indexOf\" function.\n     */\n    function getIndexOf() {\n      var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;\n      return result;\n    }\n\n    /**\n     * Checks if `value` is a native function.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.\n     */\n    function isNative(value) {\n      return typeof value == 'function' && reNative.test(value);\n    }\n\n    /**\n     * Sets `this` binding data on a given function.\n     *\n     * @private\n     * @param {Function} func The function to set data on.\n     * @param {Array} value The data array to set.\n     */\n    var setBindData = !defineProperty ? noop : function(func, value) {\n      descriptor.value = value;\n      defineProperty(func, '__bindData__', descriptor);\n    };\n\n    /**\n     * A fallback implementation of `isPlainObject` which checks if a given value\n     * is an object created by the `Object` constructor, assuming objects created\n     * by the `Object` constructor have no inherited enumerable properties and that\n     * there are no `Object.prototype` extensions.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     */\n    function shimIsPlainObject(value) {\n      var ctor,\n          result;\n\n      // avoid non Object objects, `arguments` objects, and DOM elements\n      if (!(value && toString.call(value) == objectClass) ||\n          (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) ||\n          (!support.argsClass && isArguments(value)) ||\n          (!support.nodeClass && isNode(value))) {\n        return false;\n      }\n      // IE < 9 iterates inherited properties before own properties. If the first\n      // iterated property is an object's own property then there are no inherited\n      // enumerable properties.\n      if (support.ownLast) {\n        forIn(value, function(value, key, object) {\n          result = hasOwnProperty.call(object, key);\n          return false;\n        });\n        return result !== false;\n      }\n      // In most environments an object's own properties are iterated before\n      // its inherited properties. If the last iterated property is an object's\n      // own property then there are no inherited enumerable properties.\n      forIn(value, function(value, key) {\n        result = key;\n      });\n      return typeof result == 'undefined' || hasOwnProperty.call(value, result);\n    }\n\n    /**\n     * Used by `unescape` to convert HTML entities to characters.\n     *\n     * @private\n     * @param {string} match The matched character to unescape.\n     * @returns {string} Returns the unescaped character.\n     */\n    function unescapeHtmlChar(match) {\n      return htmlUnescapes[match];\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Checks if `value` is an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.\n     * @example\n     *\n     * (function() { return _.isArguments(arguments); })(1, 2, 3);\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    function isArguments(value) {\n      return value && typeof value == 'object' && typeof value.length == 'number' &&\n        toString.call(value) == argsClass || false;\n    }\n    // fallback for browsers that can't detect `arguments` objects by [[Class]]\n    if (!support.argsClass) {\n      isArguments = function(value) {\n        return value && typeof value == 'object' && typeof value.length == 'number' &&\n          hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;\n      };\n    }\n\n    /**\n     * Checks if `value` is an array.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an array, else `false`.\n     * @example\n     *\n     * (function() { return _.isArray(arguments); })();\n     * // => false\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     */\n    var isArray = nativeIsArray || function(value) {\n      return value && typeof value == 'object' && typeof value.length == 'number' &&\n        toString.call(value) == arrayClass || false;\n    };\n\n    /**\n     * A fallback implementation of `Object.keys` which produces an array of the\n     * given object's own enumerable property names.\n     *\n     * @private\n     * @type Function\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names.\n     */\n    var shimKeys = createIterator({\n      'args': 'object',\n      'init': '[]',\n      'top': 'if (!(objectTypes[typeof object])) return result',\n      'loop': 'result.push(index)'\n    });\n\n    /**\n     * Creates an array composed of the own enumerable property names of an object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names.\n     * @example\n     *\n     * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n     */\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      if (!isObject(object)) {\n        return [];\n      }\n      if ((support.enumPrototypes && typeof object == 'function') ||\n          (support.nonEnumArgs && object.length && isArguments(object))) {\n        return shimKeys(object);\n      }\n      return nativeKeys(object);\n    };\n\n    /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */\n    var eachIteratorOptions = {\n      'args': 'collection, callback, thisArg',\n      'top': \"callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)\",\n      'array': \"typeof length == 'number'\",\n      'keys': keys,\n      'loop': 'if (callback(iterable[index], index, collection) === false) return result'\n    };\n\n    /** Reusable iterator options for `assign` and `defaults` */\n    var defaultsIteratorOptions = {\n      'args': 'object, source, guard',\n      'top':\n        'var args = arguments,\\n' +\n        '    argsIndex = 0,\\n' +\n        \"    argsLength = typeof guard == 'number' ? 2 : args.length;\\n\" +\n        'while (++argsIndex < argsLength) {\\n' +\n        '  iterable = args[argsIndex];\\n' +\n        '  if (iterable && objectTypes[typeof iterable]) {',\n      'keys': keys,\n      'loop': \"if (typeof result[index] == 'undefined') result[index] = iterable[index]\",\n      'bottom': '  }\\n}'\n    };\n\n    /** Reusable iterator options for `forIn` and `forOwn` */\n    var forOwnIteratorOptions = {\n      'top': 'if (!objectTypes[typeof iterable]) return result;\\n' + eachIteratorOptions.top,\n      'array': false\n    };\n\n    /**\n     * Used to convert characters to HTML entities:\n     *\n     * Though the `>` character is escaped for symmetry, characters like `>` and `/`\n     * don't require escaping in HTML and have no special meaning unless they're part\n     * of a tag or an unquoted attribute value.\n     * http://mathiasbynens.be/notes/ambiguous-ampersands (under \"semi-related fun fact\")\n     */\n    var htmlEscapes = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#39;'\n    };\n\n    /** Used to convert HTML entities to characters */\n    var htmlUnescapes = invert(htmlEscapes);\n\n    /** Used to match HTML entities and HTML characters */\n    var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),\n        reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');\n\n    /**\n     * A function compiled to iterate `arguments` objects, arrays, objects, and\n     * strings consistenly across environments, executing the callback for each\n     * element in the collection. The callback is bound to `thisArg` and invoked\n     * with three arguments; (value, index|key, collection). Callbacks may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @type Function\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array|Object|string} Returns `collection`.\n     */\n    var baseEach = createIterator(eachIteratorOptions);\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object. Subsequent sources will overwrite property assignments of previous\n     * sources. If a callback is provided it will be executed to produce the\n     * assigned values. The callback is bound to `thisArg` and invoked with two\n     * arguments; (objectValue, sourceValue).\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @alias extend\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param {Function} [callback] The function to customize assigning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });\n     * // => { 'name': 'fred', 'employer': 'slate' }\n     *\n     * var defaults = _.partialRight(_.assign, function(a, b) {\n     *   return typeof a == 'undefined' ? b : a;\n     * });\n     *\n     * var object = { 'name': 'barney' };\n     * defaults(object, { 'name': 'fred', 'employer': 'slate' });\n     * // => { 'name': 'barney', 'employer': 'slate' }\n     */\n    var assign = createIterator(defaultsIteratorOptions, {\n      'top':\n        defaultsIteratorOptions.top.replace(';',\n          ';\\n' +\n          \"if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\\n\" +\n          '  var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\\n' +\n          \"} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\\n\" +\n          '  callback = args[--argsLength];\\n' +\n          '}'\n        ),\n      'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'\n    });\n\n    /**\n     * Creates a clone of `value`. If `isDeep` is `true` nested objects will also\n     * be cloned, otherwise they will be assigned by reference. If a callback\n     * is provided it will be executed to produce the cloned values. If the\n     * callback returns `undefined` cloning will be handled by the method instead.\n     * The callback is bound to `thisArg` and invoked with one argument; (value).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep=false] Specify a deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the cloned value.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * var shallow = _.clone(characters);\n     * shallow[0] === characters[0];\n     * // => true\n     *\n     * var deep = _.clone(characters, true);\n     * deep[0] === characters[0];\n     * // => false\n     *\n     * _.mixin({\n     *   'clone': _.partialRight(_.clone, function(value) {\n     *     return _.isElement(value) ? value.cloneNode(false) : undefined;\n     *   })\n     * });\n     *\n     * var clone = _.clone(document.body);\n     * clone.childNodes.length;\n     * // => 0\n     */\n    function clone(value, isDeep, callback, thisArg) {\n      // allows working with \"Collections\" methods without using their `index`\n      // and `collection` arguments for `isDeep` and `callback`\n      if (typeof isDeep != 'boolean' && isDeep != null) {\n        thisArg = callback;\n        callback = isDeep;\n        isDeep = false;\n      }\n      return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n    }\n\n    /**\n     * Creates a deep clone of `value`. If a callback is provided it will be\n     * executed to produce the cloned values. If the callback returns `undefined`\n     * cloning will be handled by the method instead. The callback is bound to\n     * `thisArg` and invoked with one argument; (value).\n     *\n     * Note: This method is loosely based on the structured clone algorithm. Functions\n     * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and\n     * objects created by constructors other than `Object` are cloned to plain `Object` objects.\n     * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the deep cloned value.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * var deep = _.cloneDeep(characters);\n     * deep[0] === characters[0];\n     * // => false\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'node': element\n     * };\n     *\n     * var clone = _.cloneDeep(view, function(value) {\n     *   return _.isElement(value) ? value.cloneNode(true) : undefined;\n     * });\n     *\n     * clone.node == view.node;\n     * // => false\n     */\n    function cloneDeep(value, callback, thisArg) {\n      return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n    }\n\n    /**\n     * Creates an object that inherits from the given `prototype` object. If a\n     * `properties` object is provided its own enumerable properties are assigned\n     * to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties ? assign(result, properties) : result;\n    }\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object for all destination properties that resolve to `undefined`. Once a\n     * property is set, additional defaults of the same property will be ignored.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param- {Object} [guard] Allows working with `_.reduce` without using its\n     *  `key` and `object` arguments as sources.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * var object = { 'name': 'barney' };\n     * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });\n     * // => { 'name': 'barney', 'employer': 'slate' }\n     */\n    var defaults = createIterator(defaultsIteratorOptions);\n\n    /**\n     * This method is like `_.findIndex` except that it returns the key of the\n     * first element that passes the callback check, instead of the element itself.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [callback=identity] The function called per\n     *  iteration. If a property name or object is provided it will be used to\n     *  create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n     * @example\n     *\n     * var characters = {\n     *   'barney': {  'age': 36, 'blocked': false },\n     *   'fred': {    'age': 40, 'blocked': true },\n     *   'pebbles': { 'age': 1,  'blocked': false }\n     * };\n     *\n     * _.findKey(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => 'barney' (property order is not guaranteed across environments)\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findKey(characters, { 'age': 1 });\n     * // => 'pebbles'\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findKey(characters, 'blocked');\n     * // => 'fred'\n     */\n    function findKey(object, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forOwn(object, function(value, key, object) {\n        if (callback(value, key, object)) {\n          result = key;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [callback=identity] The function called per\n     *  iteration. If a property name or object is provided it will be used to\n     *  create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n     * @example\n     *\n     * var characters = {\n     *   'barney': {  'age': 36, 'blocked': true },\n     *   'fred': {    'age': 40, 'blocked': false },\n     *   'pebbles': { 'age': 1,  'blocked': true }\n     * };\n     *\n     * _.findLastKey(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => returns `pebbles`, assuming `_.findKey` returns `barney`\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findLastKey(characters, { 'age': 40 });\n     * // => 'fred'\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findLastKey(characters, 'blocked');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forOwnRight(object, function(value, key, object) {\n        if (callback(value, key, object)) {\n          result = key;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * Iterates over own and inherited enumerable properties of an object,\n     * executing the callback for each property. The callback is bound to `thisArg`\n     * and invoked with three arguments; (value, key, object). Callbacks may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * Shape.prototype.move = function(x, y) {\n     *   this.x += x;\n     *   this.y += y;\n     * };\n     *\n     * _.forIn(new Shape, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)\n     */\n    var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {\n      'useHas': false\n    });\n\n    /**\n     * This method is like `_.forIn` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * Shape.prototype.move = function(x, y) {\n     *   this.x += x;\n     *   this.y += y;\n     * };\n     *\n     * _.forInRight(new Shape, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'\n     */\n    function forInRight(object, callback, thisArg) {\n      var pairs = [];\n\n      forIn(object, function(value, key) {\n        pairs.push(key, value);\n      });\n\n      var length = pairs.length;\n      callback = baseCreateCallback(callback, thisArg, 3);\n      while (length--) {\n        if (callback(pairs[length--], pairs[length], object) === false) {\n          break;\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Iterates over own enumerable properties of an object, executing the callback\n     * for each property. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, key, object). Callbacks may exit iteration early by\n     * explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n     *   console.log(key);\n     * });\n     * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n     */\n    var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'\n     */\n    function forOwnRight(object, callback, thisArg) {\n      var props = keys(object),\n          length = props.length;\n\n      callback = baseCreateCallback(callback, thisArg, 3);\n      while (length--) {\n        var key = props[length];\n        if (callback(object[key], key, object) === false) {\n          break;\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Creates a sorted array of property names of all enumerable properties,\n     * own and inherited, of `object` that have function values.\n     *\n     * @static\n     * @memberOf _\n     * @alias methods\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names that have function values.\n     * @example\n     *\n     * _.functions(_);\n     * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]\n     */\n    function functions(object) {\n      var result = [];\n      forIn(object, function(value, key) {\n        if (isFunction(value)) {\n          result.push(key);\n        }\n      });\n      return result.sort();\n    }\n\n    /**\n     * Checks if the specified property name exists as a direct property of `object`,\n     * instead of an inherited property.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @param {string} key The name of the property to check.\n     * @returns {boolean} Returns `true` if key is a direct property, else `false`.\n     * @example\n     *\n     * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');\n     * // => true\n     */\n    function has(object, key) {\n      return object ? hasOwnProperty.call(object, key) : false;\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of the given object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the created inverted object.\n     * @example\n     *\n     * _.invert({ 'first': 'fred', 'second': 'barney' });\n     * // => { 'fred': 'first', 'barney': 'second' }\n     */\n    function invert(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        result[object[key]] = key;\n      }\n      return result;\n    }\n\n    /**\n     * Checks if `value` is a boolean value.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.\n     * @example\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        value && typeof value == 'object' && toString.call(value) == boolClass || false;\n    }\n\n    /**\n     * Checks if `value` is a date.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a date, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     */\n    function isDate(value) {\n      return value && typeof value == 'object' && toString.call(value) == dateClass || false;\n    }\n\n    /**\n     * Checks if `value` is a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     */\n    function isElement(value) {\n      return value && value.nodeType === 1 || false;\n    }\n\n    /**\n     * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a\n     * length of `0` and objects with no own enumerable properties are considered\n     * \"empty\".\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Array|Object|string} value The value to inspect.\n     * @returns {boolean} Returns `true` if the `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({});\n     * // => true\n     *\n     * _.isEmpty('');\n     * // => true\n     */\n    function isEmpty(value) {\n      var result = true;\n      if (!value) {\n        return result;\n      }\n      var className = toString.call(value),\n          length = value.length;\n\n      if ((className == arrayClass || className == stringClass ||\n          (support.argsClass ? className == argsClass : isArguments(value))) ||\n          (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {\n        return !length;\n      }\n      forOwn(value, function() {\n        return (result = false);\n      });\n      return result;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent to each other. If a callback is provided it will be executed\n     * to compare values. If the callback returns `undefined` comparisons will\n     * be handled by the method instead. The callback is bound to `thisArg` and\n     * invoked with two arguments; (a, b).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} a The value to compare.\n     * @param {*} b The other value to compare.\n     * @param {Function} [callback] The function to customize comparing values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * var copy = { 'name': 'fred' };\n     *\n     * object == copy;\n     * // => false\n     *\n     * _.isEqual(object, copy);\n     * // => true\n     *\n     * var words = ['hello', 'goodbye'];\n     * var otherWords = ['hi', 'goodbye'];\n     *\n     * _.isEqual(words, otherWords, function(a, b) {\n     *   var reGreet = /^(?:hello|hi)$/i,\n     *       aGreet = _.isString(a) && reGreet.test(a),\n     *       bGreet = _.isString(b) && reGreet.test(b);\n     *\n     *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;\n     * });\n     * // => true\n     */\n    function isEqual(a, b, callback, thisArg) {\n      return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));\n    }\n\n    /**\n     * Checks if `value` is, or can be coerced to, a finite number.\n     *\n     * Note: This is not the same as native `isFinite` which will return true for\n     * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is finite, else `false`.\n     * @example\n     *\n     * _.isFinite(-101);\n     * // => true\n     *\n     * _.isFinite('10');\n     * // => true\n     *\n     * _.isFinite(true);\n     * // => false\n     *\n     * _.isFinite('');\n     * // => false\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     */\n    function isFinite(value) {\n      return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));\n    }\n\n    /**\n     * Checks if `value` is a function.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     */\n    function isFunction(value) {\n      return typeof value == 'function';\n    }\n    // fallback for older versions of Chrome and Safari\n    if (isFunction(/x/)) {\n      isFunction = function(value) {\n        return typeof value == 'function' && toString.call(value) == funcClass;\n      };\n    }\n\n    /**\n     * Checks if `value` is the language type of Object.\n     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(1);\n     * // => false\n     */\n    function isObject(value) {\n      // check if the value is the ECMAScript language type of Object\n      // http://es5.github.io/#x8\n      // and avoid a V8 bug\n      // http://code.google.com/p/v8/issues/detail?id=2291\n      return !!(value && objectTypes[typeof value]);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * Note: This is not the same as native `isNaN` which will return `true` for\n     * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // `NaN` as a primitive is the only value that is not equal to itself\n      // (perform the [[Class]] check first to avoid errors with some host objects in IE)\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(undefined);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is a number.\n     *\n     * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(8.4 * 5);\n     * // => true\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        value && typeof value == 'object' && toString.call(value) == numberClass || false;\n    }\n\n    /**\n     * Checks if `value` is an object created by the `Object` constructor.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * _.isPlainObject(new Shape);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     */\n    var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n      if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) {\n        return false;\n      }\n      var valueOf = value.valueOf,\n          objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n      return objProto\n        ? (value == objProto || getPrototypeOf(value) == objProto)\n        : shimIsPlainObject(value);\n    };\n\n    /**\n     * Checks if `value` is a regular expression.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.\n     * @example\n     *\n     * _.isRegExp(/fred/);\n     * // => true\n     */\n    function isRegExp(value) {\n      return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;\n    }\n\n    /**\n     * Checks if `value` is a string.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('fred');\n     * // => true\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        value && typeof value == 'object' && toString.call(value) == stringClass || false;\n    }\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     */\n    function isUndefined(value) {\n      return typeof value == 'undefined';\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated by\n     * running each own enumerable property of `object` through the callback.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new object with values of the results of each `callback` execution.\n     * @example\n     *\n     * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     *\n     * var characters = {\n     *   'fred': { 'name': 'fred', 'age': 40 },\n     *   'pebbles': { 'name': 'pebbles', 'age': 1 }\n     * };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.mapValues(characters, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 }\n     */\n    function mapValues(object, callback, thisArg) {\n      var result = {};\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      forOwn(object, function(value, key, object) {\n        result[key] = callback(value, key, object);\n      });\n      return result;\n    }\n\n    /**\n     * Recursively merges own enumerable properties of the source object(s), that\n     * don't resolve to `undefined` into the destination object. Subsequent sources\n     * will overwrite property assignments of previous sources. If a callback is\n     * provided it will be executed to produce the merged values of the destination\n     * and source properties. If the callback returns `undefined` merging will\n     * be handled by the method instead. The callback is bound to `thisArg` and\n     * invoked with two arguments; (objectValue, sourceValue).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param {Function} [callback] The function to customize merging properties.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * var names = {\n     *   'characters': [\n     *     { 'name': 'barney' },\n     *     { 'name': 'fred' }\n     *   ]\n     * };\n     *\n     * var ages = {\n     *   'characters': [\n     *     { 'age': 36 },\n     *     { 'age': 40 }\n     *   ]\n     * };\n     *\n     * _.merge(names, ages);\n     * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }\n     *\n     * var food = {\n     *   'fruits': ['apple'],\n     *   'vegetables': ['beet']\n     * };\n     *\n     * var otherFood = {\n     *   'fruits': ['banana'],\n     *   'vegetables': ['carrot']\n     * };\n     *\n     * _.merge(food, otherFood, function(a, b) {\n     *   return _.isArray(a) ? a.concat(b) : undefined;\n     * });\n     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }\n     */\n    function merge(object) {\n      var args = arguments,\n          length = 2;\n\n      if (!isObject(object)) {\n        return object;\n      }\n      // allows working with `_.reduce` and `_.reduceRight` without using\n      // their `index` and `collection` arguments\n      if (typeof args[2] != 'number') {\n        length = args.length;\n      }\n      if (length > 3 && typeof args[length - 2] == 'function') {\n        var callback = baseCreateCallback(args[--length - 1], args[length--], 2);\n      } else if (length > 2 && typeof args[length - 1] == 'function') {\n        callback = args[--length];\n      }\n      var sources = slice(arguments, 1, length),\n          index = -1,\n          stackA = getArray(),\n          stackB = getArray();\n\n      while (++index < length) {\n        baseMerge(object, sources[index], callback, stackA, stackB);\n      }\n      releaseArray(stackA);\n      releaseArray(stackB);\n      return object;\n    }\n\n    /**\n     * Creates a shallow clone of `object` excluding the specified properties.\n     * Property names may be specified as individual arguments or as arrays of\n     * property names. If a callback is provided it will be executed for each\n     * property of `object` omitting the properties the callback returns truey\n     * for. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The source object.\n     * @param {Function|...string|string[]} [callback] The properties to omit or the\n     *  function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns an object without the omitted properties.\n     * @example\n     *\n     * _.omit({ 'name': 'fred', 'age': 40 }, 'age');\n     * // => { 'name': 'fred' }\n     *\n     * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {\n     *   return typeof value == 'number';\n     * });\n     * // => { 'name': 'fred' }\n     */\n    function omit(object, callback, thisArg) {\n      var result = {};\n      if (typeof callback != 'function') {\n        var props = [];\n        forIn(object, function(value, key) {\n          props.push(key);\n        });\n        props = baseDifference(props, baseFlatten(arguments, true, false, 1));\n\n        var index = -1,\n            length = props.length;\n\n        while (++index < length) {\n          var key = props[index];\n          result[key] = object[key];\n        }\n      } else {\n        callback = lodash.createCallback(callback, thisArg, 3);\n        forIn(object, function(value, key, object) {\n          if (!callback(value, key, object)) {\n            result[key] = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Creates a two dimensional array of an object's key-value pairs,\n     * i.e. `[[key1, value1], [key2, value2]]`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns new array of key-value pairs.\n     * @example\n     *\n     * _.pairs({ 'barney': 36, 'fred': 40 });\n     * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)\n     */\n    function pairs(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n\n    /**\n     * Creates a shallow clone of `object` composed of the specified properties.\n     * Property names may be specified as individual arguments or as arrays of\n     * property names. If a callback is provided it will be executed for each\n     * property of `object` picking the properties the callback returns truey\n     * for. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The source object.\n     * @param {Function|...string|string[]} [callback] The function called per\n     *  iteration or property names to pick, specified as individual property\n     *  names or arrays of property names.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns an object composed of the picked properties.\n     * @example\n     *\n     * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');\n     * // => { 'name': 'fred' }\n     *\n     * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {\n     *   return key.charAt(0) != '_';\n     * });\n     * // => { 'name': 'fred' }\n     */\n    function pick(object, callback, thisArg) {\n      var result = {};\n      if (typeof callback != 'function') {\n        var index = -1,\n            props = baseFlatten(arguments, true, false, 1),\n            length = isObject(object) ? props.length : 0;\n\n        while (++index < length) {\n          var key = props[index];\n          if (key in object) {\n            result[key] = object[key];\n          }\n        }\n      } else {\n        callback = lodash.createCallback(callback, thisArg, 3);\n        forIn(object, function(value, key, object) {\n          if (callback(value, key, object)) {\n            result[key] = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * An alternative to `_.reduce` this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable properties through a callback, with each callback execution\n     * potentially mutating the `accumulator` object. The callback is bound to\n     * `thisArg` and invoked with four arguments; (accumulator, value, key, object).\n     * Callbacks may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Array|Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {\n     *   num *= num;\n     *   if (num % 2) {\n     *     return result.push(num) < 3;\n     *   }\n     * });\n     * // => [1, 9, 25]\n     *\n     * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n     *   result[key] = num * 3;\n     * });\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     */\n    function transform(object, callback, accumulator, thisArg) {\n      var isArr = isArray(object);\n      if (accumulator == null) {\n        if (isArr) {\n          accumulator = [];\n        } else {\n          var ctor = object && object.constructor,\n              proto = ctor && ctor.prototype;\n\n          accumulator = baseCreate(proto);\n        }\n      }\n      if (callback) {\n        callback = lodash.createCallback(callback, thisArg, 4);\n        (isArr ? baseEach : forOwn)(object, function(value, index, object) {\n          return callback(accumulator, value, index, object);\n        });\n      }\n      return accumulator;\n    }\n\n    /**\n     * Creates an array composed of the own enumerable property values of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property values.\n     * @example\n     *\n     * _.values({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => [1, 2, 3] (property order is not guaranteed across environments)\n     */\n    function values(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements from the specified indexes, or keys, of the\n     * `collection`. Indexes may be specified as individual arguments or as arrays\n     * of indexes.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`\n     *   to retrieve, specified as individual indexes or arrays of indexes.\n     * @returns {Array} Returns a new array of elements corresponding to the\n     *  provided indexes.\n     * @example\n     *\n     * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);\n     * // => ['a', 'c', 'e']\n     *\n     * _.at(['fred', 'barney', 'pebbles'], 0, 2);\n     * // => ['fred', 'pebbles']\n     */\n    function at(collection) {\n      var args = arguments,\n          index = -1,\n          props = baseFlatten(args, true, false, 1),\n          length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,\n          result = Array(length);\n\n      if (support.unindexedChars && isString(collection)) {\n        collection = collection.split('');\n      }\n      while(++index < length) {\n        result[index] = collection[props[index]];\n      }\n      return result;\n    }\n\n    /**\n     * Checks if a given value is present in a collection using strict equality\n     * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the\n     * offset from the end of the collection.\n     *\n     * @static\n     * @memberOf _\n     * @alias include\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {*} target The value to check for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {boolean} Returns `true` if the `target` element is found, else `false`.\n     * @example\n     *\n     * _.contains([1, 2, 3], 1);\n     * // => true\n     *\n     * _.contains([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');\n     * // => true\n     *\n     * _.contains('pebbles', 'eb');\n     * // => true\n     */\n    function contains(collection, target, fromIndex) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = collection ? collection.length : 0,\n          result = false;\n\n      fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;\n      if (isArray(collection)) {\n        result = indexOf(collection, target, fromIndex) > -1;\n      } else if (typeof length == 'number') {\n        result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;\n      } else {\n        baseEach(collection, function(value) {\n          if (++index >= fromIndex) {\n            return !(result = value === target);\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` through the callback. The corresponding value\n     * of each key is the number of times the key was returned by the callback.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);\n    });\n\n    /**\n     * Checks if the given callback returns truey value for **all** elements of\n     * a collection. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias all\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if all elements passed the callback check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes']);\n     * // => false\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.every(characters, 'age');\n     * // => true\n     *\n     * // using \"_.where\" callback shorthand\n     * _.every(characters, { 'age': 36 });\n     * // => false\n     */\n    function every(collection, callback, thisArg) {\n      var result = true;\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      if (isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          if (!(result = !!callback(collection[index], index, collection))) {\n            break;\n          }\n        }\n      } else {\n        baseEach(collection, function(value, index, collection) {\n          return (result = !!callback(value, index, collection));\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, returning an array of all elements\n     * the callback returns truey for. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias select\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of elements that passed the callback check.\n     * @example\n     *\n     * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n     * // => [2, 4, 6]\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.filter(characters, 'blocked');\n     * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.filter(characters, { 'age': 36 });\n     * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n     */\n    function filter(collection, callback, thisArg) {\n      var result = [];\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      if (isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (callback(value, index, collection)) {\n            result.push(value);\n          }\n        }\n      } else {\n        baseEach(collection, function(value, index, collection) {\n          if (callback(value, index, collection)) {\n            result.push(value);\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, returning the first element that\n     * the callback returns truey for. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias detect, findWhere\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the found element, else `undefined`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': false },\n     *   { 'name': 'fred',    'age': 40, 'blocked': true },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': false }\n     * ];\n     *\n     * _.find(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => { 'name': 'barney', 'age': 36, 'blocked': false }\n     *\n     * // using \"_.where\" callback shorthand\n     * _.find(characters, { 'age': 1 });\n     * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.find(characters, 'blocked');\n     * // => { 'name': 'fred', 'age': 40, 'blocked': true }\n     */\n    function find(collection, callback, thisArg) {\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      if (isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (callback(value, index, collection)) {\n            return value;\n          }\n        }\n      } else {\n        var result;\n        baseEach(collection, function(value, index, collection) {\n          if (callback(value, index, collection)) {\n            result = value;\n            return false;\n          }\n        });\n        return result;\n      }\n    }\n\n    /**\n     * This method is like `_.find` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the found element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(num) {\n     *   return num % 2 == 1;\n     * });\n     * // => 3\n     */\n    function findLast(collection, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forEachRight(collection, function(value, index, collection) {\n        if (callback(value, index, collection)) {\n          result = value;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, executing the callback for each\n     * element. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection). Callbacks may exit iteration early by\n     * explicitly returning `false`.\n     *\n     * Note: As with other \"Collections\" methods, objects with a `length` property\n     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n     * may be used for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @alias each\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n     * // => logs each number and returns '1,2,3'\n     *\n     * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n     * // => logs each number and returns the object (property order is not guaranteed across environments)\n     */\n    function forEach(collection, callback, thisArg) {\n      if (callback && typeof thisArg == 'undefined' && isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          if (callback(collection[index], index, collection) === false) {\n            break;\n          }\n        }\n      } else {\n        baseEach(collection, callback, thisArg);\n      }\n      return collection;\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias eachRight\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');\n     * // => logs each number from right to left and returns '3,2,1'\n     */\n    function forEachRight(collection, callback, thisArg) {\n      var iterable = collection,\n          length = collection ? collection.length : 0;\n\n      callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n      if (isArray(collection)) {\n        while (length--) {\n          if (callback(collection[length], length, collection) === false) {\n            break;\n          }\n        }\n      } else {\n        if (typeof length != 'number') {\n          var props = keys(collection);\n          length = props.length;\n        } else if (support.unindexedChars && isString(collection)) {\n          iterable = collection.split('');\n        }\n        baseEach(collection, function(value, key, collection) {\n          key = props ? props[--length] : --length;\n          return callback(iterable[key], key, collection);\n        });\n      }\n      return collection;\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of a collection through the callback. The corresponding value\n     * of each key is an array of the elements responsible for generating the key.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of the collection through the given callback. The corresponding\n     * value of each key is the last element responsible for generating the key.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var keys = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.indexBy(keys, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     */\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n\n    /**\n     * Invokes the method named by `methodName` on each element in the `collection`\n     * returning an array of the results of each invoked method. Additional arguments\n     * will be provided to each invoked method. If `methodName` is a function it\n     * will be invoked for, and `this` bound to, each element in the `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|string} methodName The name of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [arg] Arguments to invoke the method with.\n     * @returns {Array} Returns a new array of the results of each invoked method.\n     * @example\n     *\n     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invoke([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    function invoke(collection, methodName) {\n      var args = slice(arguments, 2),\n          index = -1,\n          isFunc = typeof methodName == 'function',\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      forEach(collection, function(value) {\n        result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an array of values by running each element in the collection\n     * through the callback. The callback is bound to `thisArg` and invoked with\n     * three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias collect\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of the results of each `callback` execution.\n     * @example\n     *\n     * _.map([1, 2, 3], function(num) { return num * 3; });\n     * // => [3, 6, 9]\n     *\n     * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });\n     * // => [3, 6, 9] (property order is not guaranteed across environments)\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.map(characters, 'name');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, callback, thisArg) {\n      var index = -1,\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      if (isArray(collection)) {\n        while (++index < length) {\n          result[index] = callback(collection[index], index, collection);\n        }\n      } else {\n        baseEach(collection, function(value, key, collection) {\n          result[++index] = callback(value, key, collection);\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the maximum value of a collection. If the collection is empty or\n     * falsey `-Infinity` is returned. If a callback is provided it will be executed\n     * for each value in the collection to generate the criterion by which the value\n     * is ranked. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.max(characters, function(chr) { return chr.age; });\n     * // => { 'name': 'fred', 'age': 40 };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.max(characters, 'age');\n     * // => { 'name': 'fred', 'age': 40 };\n     */\n    function max(collection, callback, thisArg) {\n      var computed = -Infinity,\n          result = computed;\n\n      // allows working with functions like `_.map` without using\n      // their `index` argument as a callback\n      if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n        callback = null;\n      }\n      if (callback == null && isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (value > result) {\n            result = value;\n          }\n        }\n      } else {\n        callback = (callback == null && isString(collection))\n          ? charAtCallback\n          : lodash.createCallback(callback, thisArg, 3);\n\n        baseEach(collection, function(value, index, collection) {\n          var current = callback(value, index, collection);\n          if (current > computed) {\n            computed = current;\n            result = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the minimum value of a collection. If the collection is empty or\n     * falsey `Infinity` is returned. If a callback is provided it will be executed\n     * for each value in the collection to generate the criterion by which the value\n     * is ranked. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.min(characters, function(chr) { return chr.age; });\n     * // => { 'name': 'barney', 'age': 36 };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.min(characters, 'age');\n     * // => { 'name': 'barney', 'age': 36 };\n     */\n    function min(collection, callback, thisArg) {\n      var computed = Infinity,\n          result = computed;\n\n      // allows working with functions like `_.map` without using\n      // their `index` argument as a callback\n      if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n        callback = null;\n      }\n      if (callback == null && isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (value < result) {\n            result = value;\n          }\n        }\n      } else {\n        callback = (callback == null && isString(collection))\n          ? charAtCallback\n          : lodash.createCallback(callback, thisArg, 3);\n\n        baseEach(collection, function(value, index, collection) {\n          var current = callback(value, index, collection);\n          if (current < computed) {\n            computed = current;\n            result = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the value of a specified property from all elements in the collection.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {string} property The name of the property to pluck.\n     * @returns {Array} Returns a new array of property values.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.pluck(characters, 'name');\n     * // => ['barney', 'fred']\n     */\n    var pluck = map;\n\n    /**\n     * Reduces a collection to a value which is the accumulated result of running\n     * each element in the collection through the callback, where each successive\n     * callback execution consumes the return value of the previous execution. If\n     * `accumulator` is not provided the first element of the collection will be\n     * used as the initial `accumulator` value. The callback is bound to `thisArg`\n     * and invoked with four arguments; (accumulator, value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @alias foldl, inject\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] Initial value of the accumulator.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var sum = _.reduce([1, 2, 3], function(sum, num) {\n     *   return sum + num;\n     * });\n     * // => 6\n     *\n     * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n     *   result[key] = num * 3;\n     *   return result;\n     * }, {});\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     */\n    function reduce(collection, callback, accumulator, thisArg) {\n      var noaccum = arguments.length < 3;\n      callback = lodash.createCallback(callback, thisArg, 4);\n\n      if (isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        if (noaccum) {\n          accumulator = collection[++index];\n        }\n        while (++index < length) {\n          accumulator = callback(accumulator, collection[index], index, collection);\n        }\n      } else {\n        baseEach(collection, function(value, index, collection) {\n          accumulator = noaccum\n            ? (noaccum = false, value)\n            : callback(accumulator, value, index, collection)\n        });\n      }\n      return accumulator;\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias foldr\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] Initial value of the accumulator.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var list = [[0, 1], [2, 3], [4, 5]];\n     * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, callback, accumulator, thisArg) {\n      var noaccum = arguments.length < 3;\n      callback = lodash.createCallback(callback, thisArg, 4);\n      forEachRight(collection, function(value, index, collection) {\n        accumulator = noaccum\n          ? (noaccum = false, value)\n          : callback(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The opposite of `_.filter` this method returns the elements of a\n     * collection that the callback does **not** return truey for.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of elements that failed the callback check.\n     * @example\n     *\n     * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n     * // => [1, 3, 5]\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.reject(characters, 'blocked');\n     * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.reject(characters, { 'age': 36 });\n     * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n     */\n    function reject(collection, callback, thisArg) {\n      callback = lodash.createCallback(callback, thisArg, 3);\n      return filter(collection, function(value, index, collection) {\n        return !callback(value, index, collection);\n      });\n    }\n\n    /**\n     * Retrieves a random element or `n` random elements from a collection.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to sample.\n     * @param {number} [n] The number of elements to sample.\n     * @param- {Object} [guard] Allows working with functions like `_.map`\n     *  without using their `index` arguments as `n`.\n     * @returns {Array} Returns the random sample(s) of `collection`.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     *\n     * _.sample([1, 2, 3, 4], 2);\n     * // => [3, 1]\n     */\n    function sample(collection, n, guard) {\n      if (collection && typeof collection.length != 'number') {\n        collection = values(collection);\n      } else if (support.unindexedChars && isString(collection)) {\n        collection = collection.split('');\n      }\n      if (n == null || guard) {\n        return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;\n      }\n      var result = shuffle(collection);\n      result.length = nativeMin(nativeMax(0, n), result.length);\n      return result;\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the Fisher-Yates\n     * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to shuffle.\n     * @returns {Array} Returns a new shuffled collection.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4, 5, 6]);\n     * // => [4, 1, 6, 3, 5, 2]\n     */\n    function shuffle(collection) {\n      var index = -1,\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      forEach(collection, function(value) {\n        var rand = baseRandom(0, ++index);\n        result[index] = result[rand];\n        result[rand] = value;\n      });\n      return result;\n    }\n\n    /**\n     * Gets the size of the `collection` by returning `collection.length` for arrays\n     * and array-like objects or the number of own enumerable properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns `collection.length` or number of own enumerable properties.\n     * @example\n     *\n     * _.size([1, 2]);\n     * // => 2\n     *\n     * _.size({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => 3\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      var length = collection ? collection.length : 0;\n      return typeof length == 'number' ? length : keys(collection).length;\n    }\n\n    /**\n     * Checks if the callback returns a truey value for **any** element of a\n     * collection. The function returns as soon as it finds a passing value and\n     * does not iterate over the entire collection. The callback is bound to\n     * `thisArg` and invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias any\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if any element passed the callback check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.some(characters, 'blocked');\n     * // => true\n     *\n     * // using \"_.where\" callback shorthand\n     * _.some(characters, { 'age': 1 });\n     * // => false\n     */\n    function some(collection, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      if (isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          if ((result = callback(collection[index], index, collection))) {\n            break;\n          }\n        }\n      } else {\n        baseEach(collection, function(value, index, collection) {\n          return !(result = callback(value, index, collection));\n        });\n      }\n      return !!result;\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection through the callback. This method\n     * performs a stable sort, that is, it will preserve the original sort order\n     * of equal elements. The callback is bound to `thisArg` and invoked with\n     * three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an array of property names is provided for `callback` the collection\n     * will be sorted by each property value.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Array|Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of sorted elements.\n     * @example\n     *\n     * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });\n     * // => [3, 1, 2]\n     *\n     * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);\n     * // => [3, 1, 2]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36 },\n     *   { 'name': 'fred',    'age': 40 },\n     *   { 'name': 'barney',  'age': 26 },\n     *   { 'name': 'fred',    'age': 30 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.map(_.sortBy(characters, 'age'), _.values);\n     * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]\n     *\n     * // sorting by multiple properties\n     * _.map(_.sortBy(characters, ['name', 'age']), _.values);\n     * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]\n     */\n    function sortBy(collection, callback, thisArg) {\n      var index = -1,\n          isArr = isArray(callback),\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      if (!isArr) {\n        callback = lodash.createCallback(callback, thisArg, 3);\n      }\n      forEach(collection, function(value, key, collection) {\n        var object = result[++index] = getObject();\n        if (isArr) {\n          object.criteria = map(callback, function(key) { return value[key]; });\n        } else {\n          (object.criteria = getArray())[0] = callback(value, key, collection);\n        }\n        object.index = index;\n        object.value = value;\n      });\n\n      length = result.length;\n      result.sort(compareAscending);\n      while (length--) {\n        var object = result[length];\n        result[length] = object.value;\n        if (!isArr) {\n          releaseArray(object.criteria);\n        }\n        releaseObject(object);\n      }\n      return result;\n    }\n\n    /**\n     * Converts the `collection` to an array.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to convert.\n     * @returns {Array} Returns the new converted array.\n     * @example\n     *\n     * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);\n     * // => [2, 3, 4]\n     */\n    function toArray(collection) {\n      if (collection && typeof collection.length == 'number') {\n        return (support.unindexedChars && isString(collection))\n          ? collection.split('')\n          : slice(collection);\n      }\n      return values(collection);\n    }\n\n    /**\n     * Performs a deep comparison of each element in a `collection` to the given\n     * `properties` object, returning an array of all elements that have equivalent\n     * property values.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Object} props The object of property values to filter by.\n     * @returns {Array} Returns a new array of elements that have the given properties.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },\n     *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n     * ];\n     *\n     * _.where(characters, { 'age': 36 });\n     * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]\n     *\n     * _.where(characters, { 'pets': ['dino'] });\n     * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]\n     */\n    var where = filter;\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are all falsey.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array excluding all values of the provided arrays using strict\n     * equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to process.\n     * @param {...Array} [values] The arrays of values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);\n     * // => [1, 3, 4]\n     */\n    function difference(array) {\n      return baseDifference(array, baseFlatten(arguments, true, true, 1));\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element that passes the callback check, instead of the element itself.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': false },\n     *   { 'name': 'fred',    'age': 40, 'blocked': true },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': false }\n     * ];\n     *\n     * _.findIndex(characters, function(chr) {\n     *   return chr.age < 20;\n     * });\n     * // => 2\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findIndex(characters, { 'age': 36 });\n     * // => 0\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findIndex(characters, 'blocked');\n     * // => 1\n     */\n    function findIndex(array, callback, thisArg) {\n      var index = -1,\n          length = array ? array.length : 0;\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (++index < length) {\n        if (callback(array[index], index, array)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': true },\n     *   { 'name': 'fred',    'age': 40, 'blocked': false },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': true }\n     * ];\n     *\n     * _.findLastIndex(characters, function(chr) {\n     *   return chr.age > 30;\n     * });\n     * // => 1\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findLastIndex(characters, { 'age': 36 });\n     * // => 0\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findLastIndex(characters, 'blocked');\n     * // => 2\n     */\n    function findLastIndex(array, callback, thisArg) {\n      var length = array ? array.length : 0;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (length--) {\n        if (callback(array[length], length, array)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Gets the first element or first `n` elements of an array. If a callback\n     * is provided elements at the beginning of the array are returned as long\n     * as the callback returns truey. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias head, take\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback] The function called\n     *  per element or the number of elements to return. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the first element(s) of `array`.\n     * @example\n     *\n     * _.first([1, 2, 3]);\n     * // => 1\n     *\n     * _.first([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.first([1, 2, 3], function(num) {\n     *   return num < 3;\n     * });\n     * // => [1, 2]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.first(characters, 'blocked');\n     * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');\n     * // => ['barney', 'fred']\n     */\n    function first(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = -1;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (++index < length && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = callback;\n        if (n == null || thisArg) {\n          return array ? array[0] : undefined;\n        }\n      }\n      return slice(array, 0, nativeMin(nativeMax(0, n), length));\n    }\n\n    /**\n     * Flattens a nested array (the nesting can be to any depth). If `isShallow`\n     * is truey, the array will only be flattened a single level. If a callback\n     * is provided each element of the array is passed through the callback before\n     * flattening. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2], [3, [[4]]]]);\n     * // => [1, 2, 3, 4];\n     *\n     * _.flatten([1, [2], [3, [[4]]]], true);\n     * // => [1, 2, 3, [[4]]];\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },\n     *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.flatten(characters, 'pets');\n     * // => ['hoppy', 'baby puss', 'dino']\n     */\n    function flatten(array, isShallow, callback, thisArg) {\n      // juggle arguments\n      if (typeof isShallow != 'boolean' && isShallow != null) {\n        thisArg = callback;\n        callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;\n        isShallow = false;\n      }\n      if (callback != null) {\n        array = map(array, callback, thisArg);\n      }\n      return baseFlatten(array, isShallow);\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found using\n     * strict equality for comparisons, i.e. `===`. If the array is already sorted\n     * providing `true` for `fromIndex` will run a faster binary search.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n     *  to perform a binary search on a sorted array.\n     * @returns {number} Returns the index of the matched value or `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 3, 1, 2, 3], 2);\n     * // => 1\n     *\n     * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);\n     * // => 4\n     *\n     * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);\n     * // => 2\n     */\n    function indexOf(array, value, fromIndex) {\n      if (typeof fromIndex == 'number') {\n        var length = array ? array.length : 0;\n        fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);\n      } else if (fromIndex) {\n        var index = sortedIndex(array, value);\n        return array[index] === value ? index : -1;\n      }\n      return baseIndexOf(array, value, fromIndex);\n    }\n\n    /**\n     * Gets all but the last element or last `n` elements of an array. If a\n     * callback is provided elements at the end of the array are excluded from\n     * the result as long as the callback returns truey. The callback is bound\n     * to `thisArg` and invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback=1] The function called\n     *  per element or the number of elements to exclude. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.initial([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.initial([1, 2, 3], function(num) {\n     *   return num > 1;\n     * });\n     * // => [1]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.initial(characters, 'blocked');\n     * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');\n     * // => ['barney', 'fred']\n     */\n    function initial(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = length;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (index-- && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = (callback == null || thisArg) ? 1 : callback || n;\n      }\n      return slice(array, 0, nativeMin(nativeMax(0, length - n), length));\n    }\n\n    /**\n     * Creates an array of unique values present in all provided arrays using\n     * strict equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of shared values.\n     * @example\n     *\n     * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n     * // => [1, 2]\n     */\n    function intersection() {\n      var args = [],\n          argsIndex = -1,\n          argsLength = arguments.length,\n          caches = getArray(),\n          indexOf = getIndexOf(),\n          trustIndexOf = indexOf === baseIndexOf,\n          seen = getArray();\n\n      while (++argsIndex < argsLength) {\n        var value = arguments[argsIndex];\n        if (isArray(value) || isArguments(value)) {\n          args.push(value);\n          caches.push(trustIndexOf && value.length >= largeArraySize &&\n            createCache(argsIndex ? args[argsIndex] : seen));\n        }\n      }\n      var array = args[0],\n          index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      outer:\n      while (++index < length) {\n        var cache = caches[0];\n        value = array[index];\n\n        if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {\n          argsIndex = argsLength;\n          (cache || seen).push(value);\n          while (--argsIndex) {\n            cache = caches[argsIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n      }\n      while (argsLength--) {\n        cache = caches[argsLength];\n        if (cache) {\n          releaseObject(cache);\n        }\n      }\n      releaseArray(caches);\n      releaseArray(seen);\n      return result;\n    }\n\n    /**\n     * Gets the last element or last `n` elements of an array. If a callback is\n     * provided elements at the end of the array are returned as long as the\n     * callback returns truey. The callback is bound to `thisArg` and invoked\n     * with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback] The function called\n     *  per element or the number of elements to return. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the last element(s) of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     *\n     * _.last([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.last([1, 2, 3], function(num) {\n     *   return num > 1;\n     * });\n     * // => [2, 3]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.pluck(_.last(characters, 'blocked'), 'name');\n     * // => ['fred', 'pebbles']\n     *\n     * // using \"_.where\" callback shorthand\n     * _.last(characters, { 'employer': 'na' });\n     * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n     */\n    function last(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = length;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (index-- && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = callback;\n        if (n == null || thisArg) {\n          return array ? array[length - 1] : undefined;\n        }\n      }\n      return slice(array, nativeMax(0, length - n));\n    }\n\n    /**\n     * Gets the index at which the last occurrence of `value` is found using strict\n     * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used\n     * as the offset from the end of the collection.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value or `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);\n     * // => 4\n     *\n     * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var index = array ? array.length : 0;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Removes all provided values from the given array using strict equality for\n     * comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to modify.\n     * @param {...*} [value] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3, 1, 2, 3];\n     * _.pull(array, 2, 3);\n     * console.log(array);\n     * // => [1, 1]\n     */\n    function pull(array) {\n      var args = arguments,\n          argsIndex = 0,\n          argsLength = args.length,\n          length = array ? array.length : 0;\n\n      while (++argsIndex < argsLength) {\n        var index = -1,\n            value = args[argsIndex];\n        while (++index < length) {\n          if (array[index] === value) {\n            splice.call(array, index--, 1);\n            length--;\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to but not including `end`. If `start` is less than `stop` a\n     * zero-length range is created unless a negative `step` is specified.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns a new range array.\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    function range(start, end, step) {\n      start = +start || 0;\n      step = typeof step == 'number' ? step : (+step || 1);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      }\n      // use `Array(length)` so engines like Chakra and V8 avoid slower modes\n      // http://youtu.be/XAqIpGU8ZZk#t=17m25s\n      var index = -1,\n          length = nativeMax(0, ceil((end - start) / (step || 1))),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * Removes all elements from an array that the callback returns truey for\n     * and returns an array of removed elements. The callback is bound to `thisArg`\n     * and invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to modify.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4, 5, 6];\n     * var evens = _.remove(array, function(num) { return num % 2 == 0; });\n     *\n     * console.log(array);\n     * // => [1, 3, 5]\n     *\n     * console.log(evens);\n     * // => [2, 4, 6]\n     */\n    function remove(array, callback, thisArg) {\n      var index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (callback(value, index, array)) {\n          result.push(value);\n          splice.call(array, index--, 1);\n          length--;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The opposite of `_.initial` this method gets all but the first element or\n     * first `n` elements of an array. If a callback function is provided elements\n     * at the beginning of the array are excluded from the result as long as the\n     * callback returns truey. The callback is bound to `thisArg` and invoked\n     * with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias drop, tail\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback=1] The function called\n     *  per element or the number of elements to exclude. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a slice of `array`.\n     * @example\n     *\n     * _.rest([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.rest([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.rest([1, 2, 3], function(num) {\n     *   return num < 3;\n     * });\n     * // => [3]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.pluck(_.rest(characters, 'blocked'), 'name');\n     * // => ['fred', 'pebbles']\n     *\n     * // using \"_.where\" callback shorthand\n     * _.rest(characters, { 'employer': 'slate' });\n     * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n     */\n    function rest(array, callback, thisArg) {\n      if (typeof callback != 'number' && callback != null) {\n        var n = 0,\n            index = -1,\n            length = array ? array.length : 0;\n\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (++index < length && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);\n      }\n      return slice(array, n);\n    }\n\n    /**\n     * Uses a binary search to determine the smallest index at which a value\n     * should be inserted into a given sorted array in order to maintain the sort\n     * order of the array. If a callback is provided it will be executed for\n     * `value` and each element of `array` to compute their sort ranking. The\n     * callback is bound to `thisArg` and invoked with one argument; (value).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([20, 30, 50], 40);\n     * // => 2\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n     * // => 2\n     *\n     * var dict = {\n     *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }\n     * };\n     *\n     * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n     *   return dict.wordToNumber[word];\n     * });\n     * // => 2\n     *\n     * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n     *   return this.wordToNumber[word];\n     * }, dict);\n     * // => 2\n     */\n    function sortedIndex(array, value, callback, thisArg) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      // explicitly reference `identity` for better inlining in Firefox\n      callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;\n      value = callback(value);\n\n      while (low < high) {\n        var mid = (low + high) >>> 1;\n        (callback(array[mid]) < value)\n          ? low = mid + 1\n          : high = mid;\n      }\n      return low;\n    }\n\n    /**\n     * Creates an array of unique values, in order, of the provided arrays using\n     * strict equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of combined values.\n     * @example\n     *\n     * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n     * // => [1, 2, 3, 5, 4]\n     */\n    function union() {\n      return baseUniq(baseFlatten(arguments, true, true));\n    }\n\n    /**\n     * Creates a duplicate-value-free version of an array using strict equality\n     * for comparisons, i.e. `===`. If the array is sorted, providing\n     * `true` for `isSorted` will use a faster algorithm. If a callback is provided\n     * each element of `array` is passed through the callback before uniqueness\n     * is computed. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias unique\n     * @category Arrays\n     * @param {Array} array The array to process.\n     * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a duplicate-value-free array.\n     * @example\n     *\n     * _.uniq([1, 2, 1, 3, 1]);\n     * // => [1, 2, 3]\n     *\n     * _.uniq([1, 1, 2, 2, 3], true);\n     * // => [1, 2, 3]\n     *\n     * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });\n     * // => ['A', 'b', 'C']\n     *\n     * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);\n     * // => [1, 2.5, 3]\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniq(array, isSorted, callback, thisArg) {\n      // juggle arguments\n      if (typeof isSorted != 'boolean' && isSorted != null) {\n        thisArg = callback;\n        callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;\n        isSorted = false;\n      }\n      if (callback != null) {\n        callback = lodash.createCallback(callback, thisArg, 3);\n      }\n      return baseUniq(array, isSorted, callback);\n    }\n\n    /**\n     * Creates an array excluding all provided values using strict equality for\n     * comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to filter.\n     * @param {...*} [value] The values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);\n     * // => [2, 3, 4]\n     */\n    function without(array) {\n      return baseDifference(array, slice(arguments, 1));\n    }\n\n    /**\n     * Creates an array that is the symmetric difference of the provided arrays.\n     * See http://en.wikipedia.org/wiki/Symmetric_difference.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of values.\n     * @example\n     *\n     * _.xor([1, 2, 3], [5, 2, 1, 4]);\n     * // => [3, 5, 4]\n     *\n     * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);\n     * // => [1, 4, 5]\n     */\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArray(array) || isArguments(array)) {\n          var result = result\n            ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))\n            : array;\n        }\n      }\n      return result || [];\n    }\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the first\n     * elements of the given arrays, the second of which contains the second\n     * elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @alias unzip\n     * @category Arrays\n     * @param {...Array} [array] Arrays to process.\n     * @returns {Array} Returns a new array of grouped elements.\n     * @example\n     *\n     * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n     * // => [['fred', 30, true], ['barney', 40, false]]\n     */\n    function zip() {\n      var array = arguments.length > 1 ? arguments : arguments[0],\n          index = -1,\n          length = array ? max(pluck(array, 'length')) : 0,\n          result = Array(length < 0 ? 0 : length);\n\n      while (++index < length) {\n        result[index] = pluck(array, index);\n      }\n      return result;\n    }\n\n    /**\n     * Creates an object composed from arrays of `keys` and `values`. Provide\n     * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`\n     * or two arrays, one of `keys` and one of corresponding `values`.\n     *\n     * @static\n     * @memberOf _\n     * @alias object\n     * @category Arrays\n     * @param {Array} keys The array of keys.\n     * @param {Array} [values=[]] The array of values.\n     * @returns {Object} Returns an object composed of the given keys and\n     *  corresponding values.\n     * @example\n     *\n     * _.zipObject(['fred', 'barney'], [30, 40]);\n     * // => { 'fred': 30, 'barney': 40 }\n     */\n    function zipObject(keys, values) {\n      var index = -1,\n          length = keys ? keys.length : 0,\n          result = {};\n\n      if (!values && length && !isArray(keys[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = keys[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a function that executes `func`, with  the `this` binding and\n     * arguments of the created function, only after being called `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {number} n The number of times the function must be called before\n     *  `func` is executed.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('Done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => logs 'Done saving!', after all saves have completed\n     */\n    function after(n, func) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that, when called, invokes `func` with the `this`\n     * binding of `thisArg` and prepends any additional `bind` arguments to those\n     * provided to the bound function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to bind.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var func = function(greeting) {\n     *   return greeting + ' ' + this.name;\n     * };\n     *\n     * func = _.bind(func, { 'name': 'fred' }, 'hi');\n     * func();\n     * // => 'hi fred'\n     */\n    function bind(func, thisArg) {\n      return arguments.length > 2\n        ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n        : createWrapper(func, 1, null, null, thisArg);\n    }\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method. Method names may be specified as individual arguments or as arrays\n     * of method names. If no method names are provided all the function properties\n     * of `object` will be bound.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...string} [methodName] The object method names to\n     *  bind, specified as individual method names or arrays of method names.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'onClick': function() { console.log('clicked ' + this.label); }\n     * };\n     *\n     * _.bindAll(view);\n     * jQuery('#docs').on('click', view.onClick);\n     * // => logs 'clicked docs', when the button is clicked\n     */\n    function bindAll(object) {\n      var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),\n          index = -1,\n          length = funcs.length;\n\n      while (++index < length) {\n        var key = funcs[index];\n        object[key] = createWrapper(object[key], 1, null, null, object);\n      }\n      return object;\n    }\n\n    /**\n     * Creates a function that, when called, invokes the method at `object[key]`\n     * and prepends any additional `bindKey` arguments to those provided to the bound\n     * function. This method differs from `_.bind` by allowing bound functions to\n     * reference methods that will be redefined or don't yet exist.\n     * See http://michaux.ca/articles/lazy-function-definition-pattern.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Object} object The object the method belongs to.\n     * @param {string} key The key of the method.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'name': 'fred',\n     *   'greet': function(greeting) {\n     *     return greeting + ' ' + this.name;\n     *   }\n     * };\n     *\n     * var func = _.bindKey(object, 'greet', 'hi');\n     * func();\n     * // => 'hi fred'\n     *\n     * object.greet = function(greeting) {\n     *   return greeting + 'ya ' + this.name + '!';\n     * };\n     *\n     * func();\n     * // => 'hiya fred!'\n     */\n    function bindKey(object, key) {\n      return arguments.length > 2\n        ? createWrapper(key, 19, slice(arguments, 2), null, object)\n        : createWrapper(key, 3, null, null, object);\n    }\n\n    /**\n     * Creates a function that is the composition of the provided functions,\n     * where each function consumes the return value of the function that follows.\n     * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.\n     * Each function is executed with the `this` binding of the composed function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {...Function} [func] Functions to compose.\n     * @returns {Function} Returns the new composed function.\n     * @example\n     *\n     * var realNameMap = {\n     *   'pebbles': 'penelope'\n     * };\n     *\n     * var format = function(name) {\n     *   name = realNameMap[name.toLowerCase()] || name;\n     *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n     * };\n     *\n     * var greet = function(formatted) {\n     *   return 'Hiya ' + formatted + '!';\n     * };\n     *\n     * var welcome = _.compose(greet, format);\n     * welcome('pebbles');\n     * // => 'Hiya Penelope!'\n     */\n    function compose() {\n      var funcs = arguments,\n          length = funcs.length;\n\n      while (length--) {\n        if (!isFunction(funcs[length])) {\n          throw new TypeError;\n        }\n      }\n      return function() {\n        var args = arguments,\n            length = funcs.length;\n\n        while (length--) {\n          args = [funcs[length].apply(this, args)];\n        }\n        return args[0];\n      };\n    }\n\n    /**\n     * Creates a function which accepts one or more arguments of `func` that when\n     * invoked either executes `func` returning its result, if all `func` arguments\n     * have been provided, or returns a function that accepts one or more of the\n     * remaining `func` arguments, and so on. The arity of `func` can be specified\n     * if `func.length` is not sufficient.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var curried = _.curry(function(a, b, c) {\n     *   console.log(a + b + c);\n     * });\n     *\n     * curried(1)(2)(3);\n     * // => 6\n     *\n     * curried(1, 2)(3);\n     * // => 6\n     *\n     * curried(1, 2, 3);\n     * // => 6\n     */\n    function curry(func, arity) {\n      arity = typeof arity == 'number' ? arity : (+arity || func.length);\n      return createWrapper(func, 4, null, null, null, arity);\n    }\n\n    /**\n     * Creates a function that will delay the execution of `func` until after\n     * `wait` milliseconds have elapsed since the last time it was invoked.\n     * Provide an options object to indicate that `func` should be invoked on\n     * the leading and/or trailing edge of the `wait` timeout. Subsequent calls\n     * to the debounced function will return the result of the last `func` call.\n     *\n     * Note: If `leading` and `trailing` options are `true` `func` will be called\n     * on the trailing edge of the timeout only if the the debounced function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to debounce.\n     * @param {number} wait The number of milliseconds to delay.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.\n     * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.\n     * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // avoid costly calculations while the window size is in flux\n     * var lazyLayout = _.debounce(calculateLayout, 150);\n     * jQuery(window).on('resize', lazyLayout);\n     *\n     * // execute `sendMail` when the click event is fired, debouncing subsequent calls\n     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * });\n     *\n     * // ensure `batchLog` is executed once after 1 second of debounced calls\n     * var source = new EventSource('/stream');\n     * source.addEventListener('message', _.debounce(batchLog, 250, {\n     *   'maxWait': 1000\n     * }, false);\n     */\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      wait = nativeMax(0, wait) || 0;\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = options.leading;\n        maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);\n        trailing = 'trailing' in options ? options.trailing : trailing;\n      }\n      var delayed = function() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0) {\n          if (maxTimeoutId) {\n            clearTimeout(maxTimeoutId);\n          }\n          var isCalled = trailingCall;\n          maxTimeoutId = timeoutId = trailingCall = undefined;\n          if (isCalled) {\n            lastCalled = now();\n            result = func.apply(thisArg, args);\n            if (!timeoutId && !maxTimeoutId) {\n              args = thisArg = null;\n            }\n          }\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      };\n\n      var maxDelayed = function() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (trailing || (maxWait !== wait)) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = null;\n          }\n        }\n      };\n\n      return function() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = null;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Defers executing the `func` function until the current call stack has cleared.\n     * Additional arguments will be provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to defer.\n     * @param {...*} [arg] Arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) { console.log(text); }, 'deferred');\n     * // logs 'deferred' after one or more milliseconds\n     */\n    function defer(func) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var args = slice(arguments, 1);\n      return setTimeout(function() { func.apply(undefined, args); }, 1);\n    }\n\n    /**\n     * Executes the `func` function after `wait` milliseconds. Additional arguments\n     * will be provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay execution.\n     * @param {...*} [arg] Arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) { console.log(text); }, 1000, 'later');\n     * // => logs 'later' after one second\n     */\n    function delay(func, wait) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var args = slice(arguments, 2);\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided it will be used to determine the cache key for storing the result\n     * based on the arguments provided to the memoized function. By default, the\n     * first argument provided to the memoized function is used as the cache key.\n     * The `func` is executed with the `this` binding of the memoized function.\n     * The result cache is exposed as the `cache` property on the memoized function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] A function used to resolve the cache key.\n     * @returns {Function} Returns the new memoizing function.\n     * @example\n     *\n     * var fibonacci = _.memoize(function(n) {\n     *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);\n     * });\n     *\n     * fibonacci(9)\n     * // => 34\n     *\n     * var data = {\n     *   'fred': { 'name': 'fred', 'age': 40 },\n     *   'pebbles': { 'name': 'pebbles', 'age': 1 }\n     * };\n     *\n     * // modifying the result cache\n     * var get = _.memoize(function(name) { return data[name]; }, _.identity);\n     * get('pebbles');\n     * // => { 'name': 'pebbles', 'age': 1 }\n     *\n     * get.cache.pebbles.name = 'penelope';\n     * get('pebbles');\n     * // => { 'name': 'penelope', 'age': 1 }\n     */\n    function memoize(func, resolver) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var memoized = function() {\n        var cache = memoized.cache,\n            key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];\n\n        return hasOwnProperty.call(cache, key)\n          ? cache[key]\n          : (cache[key] = func.apply(this, arguments));\n      }\n      memoized.cache = {};\n      return memoized;\n    }\n\n    /**\n     * Creates a function that is restricted to execute `func` once. Repeat calls to\n     * the function will return the value of the first call. The `func` is executed\n     * with the `this` binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // `initialize` executes `createApplication` once\n     */\n    function once(func) {\n      var ran,\n          result;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      return function() {\n        if (ran) {\n          return result;\n        }\n        ran = true;\n        result = func.apply(this, arguments);\n\n        // clear the `func` variable so the function may be garbage collected\n        func = null;\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that, when called, invokes `func` with any additional\n     * `partial` arguments prepended to those provided to the new function. This\n     * method is similar to `_.bind` except it does **not** alter the `this` binding.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var greet = function(greeting, name) { return greeting + ' ' + name; };\n     * var hi = _.partial(greet, 'hi');\n     * hi('fred');\n     * // => 'hi fred'\n     */\n    function partial(func) {\n      return createWrapper(func, 16, slice(arguments, 1));\n    }\n\n    /**\n     * This method is like `_.partial` except that `partial` arguments are\n     * appended to those provided to the new function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var defaultsDeep = _.partialRight(_.merge, _.defaults);\n     *\n     * var options = {\n     *   'variable': 'data',\n     *   'imports': { 'jq': $ }\n     * };\n     *\n     * defaultsDeep(options, _.templateSettings);\n     *\n     * options.variable\n     * // => 'data'\n     *\n     * options.imports\n     * // => { '_': _, 'jq': $ }\n     */\n    function partialRight(func) {\n      return createWrapper(func, 32, null, slice(arguments, 1));\n    }\n\n    /**\n     * Creates a function that, when executed, will only call the `func` function\n     * at most once per every `wait` milliseconds. Provide an options object to\n     * indicate that `func` should be invoked on the leading and/or trailing edge\n     * of the `wait` timeout. Subsequent calls to the throttled function will\n     * return the result of the last `func` call.\n     *\n     * Note: If `leading` and `trailing` options are `true` `func` will be called\n     * on the trailing edge of the timeout only if the the throttled function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to throttle.\n     * @param {number} wait The number of milliseconds to throttle executions to.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // avoid excessively updating the position while scrolling\n     * var throttled = _.throttle(updatePosition, 100);\n     * jQuery(window).on('scroll', throttled);\n     *\n     * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes\n     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n     *   'trailing': false\n     * }));\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? options.leading : leading;\n        trailing = 'trailing' in options ? options.trailing : trailing;\n      }\n      debounceOptions.leading = leading;\n      debounceOptions.maxWait = wait;\n      debounceOptions.trailing = trailing;\n\n      return debounce(func, wait, debounceOptions);\n    }\n\n    /**\n     * Creates a function that provides `value` to the wrapper function as its\n     * first argument. Additional arguments provided to the function are appended\n     * to those provided to the wrapper function. The wrapper is executed with\n     * the `this` binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {*} value The value to wrap.\n     * @param {Function} wrapper The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('Fred, Wilma, & Pebbles');\n     * // => '<p>Fred, Wilma, &amp; Pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return createWrapper(wrapper, 16, [value]);\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * var getter = _.constant(object);\n     * getter() === object;\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Produces a callback bound to an optional `thisArg`. If `func` is a property\n     * name the created callback will return the property value for a given element.\n     * If `func` is an object the created callback will return `true` for elements\n     * that contain the equivalent object properties, otherwise it will return `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} [func=identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of the created callback.\n     * @param {number} [argCount] The number of arguments the callback accepts.\n     * @returns {Function} Returns a callback function.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // wrap to create custom callback shorthands\n     * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {\n     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);\n     *   return !match ? func(callback, thisArg) : function(object) {\n     *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];\n     *   };\n     * });\n     *\n     * _.filter(characters, 'age__gt38');\n     * // => [{ 'name': 'fred', 'age': 40 }]\n     */\n    function createCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (func == null || type == 'function') {\n        return baseCreateCallback(func, thisArg, argCount);\n      }\n      // handle \"_.pluck\" style callback shorthands\n      if (type != 'object') {\n        return property(func);\n      }\n      var props = keys(func),\n          key = props[0],\n          a = func[key];\n\n      // handle \"_.where\" style callback shorthands\n      if (props.length == 1 && a === a && !isObject(a)) {\n        // fast path the common case of providing an object with a single\n        // property containing a primitive value\n        return function(object) {\n          var b = object[key];\n          return a === b && (a !== 0 || (1 / a == 1 / b));\n        };\n      }\n      return function(object) {\n        var length = props.length,\n            result = false;\n\n        while (length--) {\n          if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {\n            break;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Converts the characters `&`, `<`, `>`, `\"`, and `'` in `string` to their\n     * corresponding HTML entities.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} string The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('Fred, Wilma, & Pebbles');\n     * // => 'Fred, Wilma, &amp; Pebbles'\n     */\n    function escape(string) {\n      return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);\n    }\n\n    /**\n     * This method returns the first argument provided to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * _.identity(object) === object;\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Adds function properties of a source object to the destination object.\n     * If `object` is a function methods will be added to its prototype as well.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {Function|Object} [object=lodash] object The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.\n     * @example\n     *\n     * function capitalize(string) {\n     *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n     * }\n     *\n     * _.mixin({ 'capitalize': capitalize });\n     * _.capitalize('fred');\n     * // => 'Fred'\n     *\n     * _('fred').capitalize().value();\n     * // => 'Fred'\n     *\n     * _.mixin({ 'capitalize': capitalize }, { 'chain': false });\n     * _('fred').capitalize();\n     * // => 'Fred'\n     */\n    function mixin(object, source, options) {\n      var chain = true,\n          methodNames = source && functions(source);\n\n      if (!source || (!options && !methodNames.length)) {\n        if (options == null) {\n          options = source;\n        }\n        ctor = lodashWrapper;\n        source = object;\n        object = lodash;\n        methodNames = functions(source);\n      }\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      var ctor = object,\n          isFunc = isFunction(ctor);\n\n      forEach(methodNames, function(methodName) {\n        var func = object[methodName] = source[methodName];\n        if (isFunc) {\n          ctor.prototype[methodName] = function() {\n            var chainAll = this.__chain__,\n                value = this.__wrapped__,\n                args = [value];\n\n            push.apply(args, arguments);\n            var result = func.apply(object, args);\n            if (chain || chainAll) {\n              if (value === result && isObject(result)) {\n                return this;\n              }\n              result = new ctor(result);\n              result.__chain__ = chainAll;\n            }\n            return result;\n          };\n        }\n      });\n    }\n\n    /**\n     * Reverts the '_' variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      context._ = oldDash;\n      return this;\n    }\n\n    /**\n     * A no-operation function.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * _.noop(object) === undefined;\n     * // => true\n     */\n    function noop() {\n      // no operation performed\n    }\n\n    /**\n     * Gets the number of milliseconds that have elapsed since the Unix epoch\n     * (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @example\n     *\n     * var stamp = _.now();\n     * _.defer(function() { console.log(_.now() - stamp); });\n     * // => logs the number of milliseconds it took for the deferred function to be called\n     */\n    var now = isNative(now = Date.now) && now || function() {\n      return new Date().getTime();\n    };\n\n    /**\n     * Converts the given value into an integer of the specified radix.\n     * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the\n     * `value` is a hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * Note: This method avoids differences in native ES3 and ES5 `parseInt`\n     * implementations. See http://es5.github.io/#E.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} value The value to parse.\n     * @param {number} [radix] The radix used to interpret the value to parse.\n     * @returns {number} Returns the new integer value.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     */\n    var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {\n      // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`\n      return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);\n    };\n\n    /**\n     * Creates a \"_.pluck\" style function, which returns the `key` value of a\n     * given object.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} key The name of the property to retrieve.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'fred',   'age': 40 },\n     *   { 'name': 'barney', 'age': 36 }\n     * ];\n     *\n     * var getName = _.property('name');\n     *\n     * _.map(characters, getName);\n     * // => ['barney', 'fred']\n     *\n     * _.sortBy(characters, getName);\n     * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]\n     */\n    function property(key) {\n      return function(object) {\n        return object[key];\n      };\n    }\n\n    /**\n     * Produces a random number between `min` and `max` (inclusive). If only one\n     * argument is provided a number between `0` and the given number will be\n     * returned. If `floating` is truey or either `min` or `max` are floats a\n     * floating-point number will be returned instead of an integer.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {number} [min=0] The minimum possible value.\n     * @param {number} [max=1] The maximum possible value.\n     * @param {boolean} [floating=false] Specify returning a floating-point number.\n     * @returns {number} Returns a random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(min, max, floating) {\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (typeof min == 'boolean' && noMax) {\n          floating = min;\n          min = 1;\n        }\n        else if (!noMax && typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n\n    /**\n     * Resolves the value of property `key` on `object`. If `key` is a function\n     * it will be invoked with the `this` binding of `object` and its result returned,\n     * else the property value is returned. If `object` is falsey then `undefined`\n     * is returned.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {Object} object The object to inspect.\n     * @param {string} key The name of the property to resolve.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = {\n     *   'cheese': 'crumpets',\n     *   'stuff': function() {\n     *     return 'nonsense';\n     *   }\n     * };\n     *\n     * _.result(object, 'cheese');\n     * // => 'crumpets'\n     *\n     * _.result(object, 'stuff');\n     * // => 'nonsense'\n     */\n    function result(object, key) {\n      if (object) {\n        var value = object[key];\n        return isFunction(value) ? object[key]() : value;\n      }\n    }\n\n    /**\n     * A micro-templating method that handles arbitrary delimiters, preserves\n     * whitespace, and correctly escapes quotes within interpolated code.\n     *\n     * Note: In the development build, `_.template` utilizes sourceURLs for easier\n     * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n     *\n     * For more information on precompiling templates see:\n     * http://lodash.com/custom-builds\n     *\n     * For more information on Chrome extension sandboxes see:\n     * http://developer.chrome.com/stable/extensions/sandboxingEval.html\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} text The template text.\n     * @param {Object} data The data object used to populate the text.\n     * @param {Object} [options] The options object.\n     * @param {RegExp} [options.escape] The \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n     * @param {Object} [options.imports] An object to import into the template as local variables.\n     * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n     * @param {string} [sourceURL] The sourceURL of the template's compiled source.\n     * @param {string} [variable] The data object variable name.\n     * @returns {Function|string} Returns a compiled function when no `data` object\n     *  is given, else it returns the interpolated text.\n     * @example\n     *\n     * // using the \"interpolate\" delimiter to create a compiled template\n     * var compiled = _.template('hello <%= name %>');\n     * compiled({ 'name': 'fred' });\n     * // => 'hello fred'\n     *\n     * // using the \"escape\" delimiter to escape HTML in data property values\n     * _.template('<b><%- value %></b>', { 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // using the \"evaluate\" delimiter to generate HTML\n     * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';\n     * _.template(list, { 'people': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the ES6 delimiter as an alternative to the default \"interpolate\" delimiter\n     * _.template('hello ${ name }', { 'name': 'pebbles' });\n     * // => 'hello pebbles'\n     *\n     * // using the internal `print` function in \"evaluate\" delimiters\n     * _.template('<% print(\"hello \" + name); %>!', { 'name': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // using a custom template delimiters\n     * _.templateSettings = {\n     *   'interpolate': /{{([\\s\\S]+?)}}/g\n     * };\n     *\n     * _.template('hello {{ name }}!', { 'name': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // using the `imports` option to import jQuery\n     * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';\n     * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the `sourceURL` option to specify a custom sourceURL for the template\n     * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector\n     *\n     * // using the `variable` option to ensure a with-statement isn't used in the compiled template\n     * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     *   var __t, __p = '', __e = _.escape;\n     *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';\n     *   return __p;\n     * }\n     *\n     * // using the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and a stack trace\n     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(text, data, options) {\n      // based on John Resig's `tmpl` implementation\n      // http://ejohn.org/blog/javascript-micro-templating/\n      // and Laura Doktorova's doT.js\n      // https://github.com/olado/doT\n      var settings = lodash.templateSettings;\n      text = String(text || '');\n\n      // avoid missing dependencies when `iteratorTemplate` is not defined\n      options = defaults({}, options, settings);\n\n      var imports = defaults({}, options.imports, settings.imports),\n          importsKeys = keys(imports),\n          importsValues = values(imports);\n\n      var isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // compile the regexp to match each delimiter\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // escape characters that cannot be included in string literals\n        source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // replace delimiters with snippets\n        if (escapeValue) {\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // the JS engine embedded in Adobe products requires returning the `match`\n        // string in order to produce the correct `offset` value\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // if `variable` is not specified, wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain\n      var variable = options.variable,\n          hasVariable = variable;\n\n      if (!hasVariable) {\n        variable = 'obj';\n        source = 'with (' + variable + ') {\\n' + source + '\\n}\\n';\n      }\n      // cleanup code by stripping empty strings\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // frame code as the function body\n      source = 'function(' + variable + ') {\\n' +\n        (hasVariable ? '' : variable + ' || (' + variable + ' = {});\\n') +\n        \"var __t, __p = '', __e = _.escape\" +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      // Use a sourceURL for easier debugging.\n      // http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n      var sourceURL = '\\n/*\\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\\n*/';\n\n      try {\n        var result = Function(importsKeys, 'return ' + source + sourceURL).apply(undefined, importsValues);\n      } catch(e) {\n        e.source = source;\n        throw e;\n      }\n      if (data) {\n        return result(data);\n      }\n      // provide the compiled function's source by its `toString` method, in\n      // supported environments, or the `source` property as a convenience for\n      // inlining compiled templates during the build process\n      result.source = source;\n      return result;\n    }\n\n    /**\n     * Executes the callback `n` times, returning an array of the results\n     * of each callback execution. The callback is bound to `thisArg` and invoked\n     * with one argument; (index).\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {number} n The number of times to execute the callback.\n     * @param {Function} callback The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns an array of the results of each `callback` execution.\n     * @example\n     *\n     * var diceRolls = _.times(3, _.partial(_.random, 1, 6));\n     * // => [3, 6, 4]\n     *\n     * _.times(3, function(n) { mage.castSpell(n); });\n     * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively\n     *\n     * _.times(3, function(n) { this.cast(n); }, mage);\n     * // => also calls `mage.castSpell(n)` three times\n     */\n    function times(n, callback, thisArg) {\n      n = (n = +n) > -1 ? n : 0;\n      var index = -1,\n          result = Array(n);\n\n      callback = baseCreateCallback(callback, thisArg, 1);\n      while (++index < n) {\n        result[index] = callback(index);\n      }\n      return result;\n    }\n\n    /**\n     * The inverse of `_.escape` this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their\n     * corresponding characters.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} string The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('Fred, Barney &amp; Pebbles');\n     * // => 'Fred, Barney & Pebbles'\n     */\n    function unescape(string) {\n      return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is provided the ID will be appended to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} [prefix] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return String(prefix == null ? '' : prefix) + id;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object that wraps the given value with explicit\n     * method chaining enabled.\n     *\n     * @static\n     * @memberOf _\n     * @category Chaining\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36 },\n     *   { 'name': 'fred',    'age': 40 },\n     *   { 'name': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _.chain(characters)\n     *     .sortBy('age')\n     *     .map(function(chr) { return chr.name + ' is ' + chr.age; })\n     *     .first()\n     *     .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      value = new lodashWrapper(value);\n      value.__chain__ = true;\n      return value;\n    }\n\n    /**\n     * Invokes `interceptor` with the `value` as the first argument and then\n     * returns `value`. The purpose of this method is to \"tap into\" a method\n     * chain in order to perform operations on intermediate results within\n     * the chain.\n     *\n     * @static\n     * @memberOf _\n     * @category Chaining\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3, 4])\n     *  .tap(function(array) { array.pop(); })\n     *  .reverse()\n     *  .value();\n     * // => [3, 2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * Enables explicit method chaining on the wrapper object.\n     *\n     * @name chain\n     * @memberOf _\n     * @category Chaining\n     * @returns {*} Returns the wrapper object.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // without explicit chaining\n     * _(characters).first();\n     * // => { 'name': 'barney', 'age': 36 }\n     *\n     * // with explicit chaining\n     * _(characters).chain()\n     *   .first()\n     *   .pick('age')\n     *   .value();\n     * // => { 'age': 36 }\n     */\n    function wrapperChain() {\n      this.__chain__ = true;\n      return this;\n    }\n\n    /**\n     * Produces the `toString` result of the wrapped value.\n     *\n     * @name toString\n     * @memberOf _\n     * @category Chaining\n     * @returns {string} Returns the string result.\n     * @example\n     *\n     * _([1, 2, 3]).toString();\n     * // => '1,2,3'\n     */\n    function wrapperToString() {\n      return String(this.__wrapped__);\n    }\n\n    /**\n     * Extracts the wrapped value.\n     *\n     * @name valueOf\n     * @memberOf _\n     * @alias value\n     * @category Chaining\n     * @returns {*} Returns the wrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).valueOf();\n     * // => [1, 2, 3]\n     */\n    function wrapperValueOf() {\n      return this.__wrapped__;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions that return wrapped values when chaining\n    lodash.after = after;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.chain = chain;\n    lodash.compact = compact;\n    lodash.compose = compose;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.createCallback = createCallback;\n    lodash.curry = curry;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.map = map;\n    lodash.mapValues = mapValues;\n    lodash.max = max;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.min = min;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.pull = pull;\n    lodash.range = range;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.shuffle = shuffle;\n    lodash.sortBy = sortBy;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.values = values;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n\n    // add aliases\n    lodash.collect = map;\n    lodash.drop = rest;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n    lodash.unzip = zip;\n\n    // add functions to `lodash.prototype`\n    mixin(lodash);\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions that return unwrapped values when chaining\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.contains = contains;\n    lodash.escape = escape;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.indexOf = indexOf;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isNaN = isNaN;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isUndefined = isUndefined;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.mixin = mixin;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.result = result;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.template = template;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n\n    // add aliases\n    lodash.all = every;\n    lodash.any = some;\n    lodash.detect = find;\n    lodash.findWhere = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.include = contains;\n    lodash.inject = reduce;\n\n    mixin(function() {\n      var source = {}\n      forOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }(), false);\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions capable of returning wrapped and unwrapped values when chaining\n    lodash.first = first;\n    lodash.last = last;\n    lodash.sample = sample;\n\n    // add aliases\n    lodash.take = first;\n    lodash.head = first;\n\n    forOwn(lodash, function(func, methodName) {\n      var callbackable = methodName !== 'sample';\n      if (!lodash.prototype[methodName]) {\n        lodash.prototype[methodName]= function(n, guard) {\n          var chainAll = this.__chain__,\n              result = func(this.__wrapped__, n, guard);\n\n          return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))\n            ? result\n            : new lodashWrapper(result, chainAll);\n        };\n      }\n    });\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type string\n     */\n    lodash.VERSION = '2.4.1';\n\n    // add \"Chaining\" functions to the wrapper\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.value = wrapperValueOf;\n    lodash.prototype.valueOf = wrapperValueOf;\n\n    // add `Array` functions that return unwrapped values\n    baseEach(['join', 'pop', 'shift'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        var chainAll = this.__chain__,\n            result = func.apply(this.__wrapped__, arguments);\n\n        return chainAll\n          ? new lodashWrapper(result, chainAll)\n          : result;\n      };\n    });\n\n    // add `Array` functions that return the existing wrapped value\n    baseEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        func.apply(this.__wrapped__, arguments);\n        return this;\n      };\n    });\n\n    // add `Array` functions that return new wrapped values\n    baseEach(['concat', 'slice', 'splice'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);\n      };\n    });\n\n    // avoid array-like object bugs with `Array#shift` and `Array#splice`\n    // in IE < 9, Firefox < 10, Narwhal, and RingoJS\n    if (!support.spliceObjects) {\n      baseEach(['pop', 'shift', 'splice'], function(methodName) {\n        var func = arrayRef[methodName],\n            isSplice = methodName == 'splice';\n\n        lodash.prototype[methodName] = function() {\n          var chainAll = this.__chain__,\n              value = this.__wrapped__,\n              result = func.apply(value, arguments);\n\n          if (value.length === 0) {\n            delete value[0];\n          }\n          return (chainAll || isSplice)\n            ? new lodashWrapper(result, chainAll)\n            : result;\n        };\n      });\n    }\n\n    return lodash;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  // expose Lo-Dash\n  var _ = runInContext();\n\n  // some AMD build optimizers like r.js check for condition patterns like the following:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lo-Dash to the global object even when an AMD loader is present in\n    // case Lo-Dash is loaded with a RequireJS shim config.\n    // See http://requirejs.org/docs/api.html#config-shim\n    root._ = _;\n\n    // define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module\n    define(function() {\n      return _;\n    });\n  }\n  // check for `exports` after `define` in case a build optimizer adds an `exports` object\n  else if (freeExports && freeModule) {\n    // in Node.js or RingoJS\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    // in Narwhal or Rhino -require\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    // in a browser or Rhino\n    root._ = _;\n  }\n}.call(this));\n"
  },
  {
    "path": "client/components/lodash/dist/lodash.js",
    "content": "/**\n * @license\n * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>\n * Build: `lodash modern -o ./dist/lodash.js`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre ES5 environments */\n  var undefined;\n\n  /** Used to pool arrays and objects used internally */\n  var arrayPool = [],\n      objectPool = [];\n\n  /** Used to generate unique IDs */\n  var idCounter = 0;\n\n  /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */\n  var keyPrefix = +new Date + '';\n\n  /** Used as the size when optimizations are enabled for large arrays */\n  var largeArraySize = 75;\n\n  /** Used as the max size of the `arrayPool` and `objectPool` */\n  var maxPoolSize = 40;\n\n  /** Used to detect and test whitespace */\n  var whitespace = (\n    // whitespace\n    ' \\t\\x0B\\f\\xA0\\ufeff' +\n\n    // line terminators\n    '\\n\\r\\u2028\\u2029' +\n\n    // unicode category \"Zs\" space separators\n    '\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'\n  );\n\n  /** Used to match empty string literals in compiled template source */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /**\n   * Used to match ES6 template delimiters\n   * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match regexp flags from their coerced string values */\n  var reFlags = /\\w*$/;\n\n  /** Used to detected named functions */\n  var reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n  /** Used to match \"interpolate\" template delimiters */\n  var reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match leading whitespace and zeros to be removed */\n  var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');\n\n  /** Used to ensure capturing order of template delimiters */\n  var reNoMatch = /($^)/;\n\n  /** Used to detect functions containing a `this` reference */\n  var reThis = /\\bthis\\b/;\n\n  /** Used to match unescaped characters in compiled string literals */\n  var reUnescapedString = /['\\n\\r\\t\\u2028\\u2029\\\\]/g;\n\n  /** Used to assign default `context` object properties */\n  var contextProps = [\n    'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',\n    'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',\n    'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify */\n  var templateCounter = 0;\n\n  /** `Object#toString` result shortcuts */\n  var argsClass = '[object Arguments]',\n      arrayClass = '[object Array]',\n      boolClass = '[object Boolean]',\n      dateClass = '[object Date]',\n      funcClass = '[object Function]',\n      numberClass = '[object Number]',\n      objectClass = '[object Object]',\n      regexpClass = '[object RegExp]',\n      stringClass = '[object String]';\n\n  /** Used to identify object classifications that `_.clone` supports */\n  var cloneableClasses = {};\n  cloneableClasses[funcClass] = false;\n  cloneableClasses[argsClass] = cloneableClasses[arrayClass] =\n  cloneableClasses[boolClass] = cloneableClasses[dateClass] =\n  cloneableClasses[numberClass] = cloneableClasses[objectClass] =\n  cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;\n\n  /** Used as an internal `_.debounce` options object */\n  var debounceOptions = {\n    'leading': false,\n    'maxWait': 0,\n    'trailing': false\n  };\n\n  /** Used as the property descriptor for `__bindData__` */\n  var descriptor = {\n    'configurable': false,\n    'enumerable': false,\n    'value': null,\n    'writable': false\n  };\n\n  /** Used to determine if values are of the language type Object */\n  var objectTypes = {\n    'boolean': false,\n    'function': true,\n    'object': true,\n    'number': false,\n    'string': false,\n    'undefined': false\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\t': 't',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Used as a reference to the global object */\n  var root = (objectTypes[typeof window] && window) || this;\n\n  /** Detect free variable `exports` */\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module` */\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports` */\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */\n  var freeGlobal = objectTypes[typeof global] && global;\n  if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * The base implementation of `_.indexOf` without support for binary searches\n   * or `fromIndex` constraints.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {number} [fromIndex=0] The index to search from.\n   * @returns {number} Returns the index of the matched value or `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    var index = (fromIndex || 0) - 1,\n        length = array ? array.length : 0;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * An implementation of `_.contains` for cache objects that mimics the return\n   * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.\n   *\n   * @private\n   * @param {Object} cache The cache object to inspect.\n   * @param {*} value The value to search for.\n   * @returns {number} Returns `0` if `value` is found, else `-1`.\n   */\n  function cacheIndexOf(cache, value) {\n    var type = typeof value;\n    cache = cache.cache;\n\n    if (type == 'boolean' || value == null) {\n      return cache[value] ? 0 : -1;\n    }\n    if (type != 'number' && type != 'string') {\n      type = 'object';\n    }\n    var key = type == 'number' ? value : keyPrefix + value;\n    cache = (cache = cache[type]) && cache[key];\n\n    return type == 'object'\n      ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)\n      : (cache ? 0 : -1);\n  }\n\n  /**\n   * Adds a given value to the corresponding cache object.\n   *\n   * @private\n   * @param {*} value The value to add to the cache.\n   */\n  function cachePush(value) {\n    var cache = this.cache,\n        type = typeof value;\n\n    if (type == 'boolean' || value == null) {\n      cache[value] = true;\n    } else {\n      if (type != 'number' && type != 'string') {\n        type = 'object';\n      }\n      var key = type == 'number' ? value : keyPrefix + value,\n          typeCache = cache[type] || (cache[type] = {});\n\n      if (type == 'object') {\n        (typeCache[key] || (typeCache[key] = [])).push(value);\n      } else {\n        typeCache[key] = true;\n      }\n    }\n  }\n\n  /**\n   * Used by `_.max` and `_.min` as the default callback when a given\n   * collection is a string value.\n   *\n   * @private\n   * @param {string} value The character to inspect.\n   * @returns {number} Returns the code unit of given character.\n   */\n  function charAtCallback(value) {\n    return value.charCodeAt(0);\n  }\n\n  /**\n   * Used by `sortBy` to compare transformed `collection` elements, stable sorting\n   * them in ascending order.\n   *\n   * @private\n   * @param {Object} a The object to compare to `b`.\n   * @param {Object} b The object to compare to `a`.\n   * @returns {number} Returns the sort order indicator of `1` or `-1`.\n   */\n  function compareAscending(a, b) {\n    var ac = a.criteria,\n        bc = b.criteria,\n        index = -1,\n        length = ac.length;\n\n    while (++index < length) {\n      var value = ac[index],\n          other = bc[index];\n\n      if (value !== other) {\n        if (value > other || typeof value == 'undefined') {\n          return 1;\n        }\n        if (value < other || typeof other == 'undefined') {\n          return -1;\n        }\n      }\n    }\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n    // that causes it, under certain circumstances, to return the same value for\n    // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247\n    //\n    // This also ensures a stable sort in V8 and other engines.\n    // See http://code.google.com/p/v8/issues/detail?id=90\n    return a.index - b.index;\n  }\n\n  /**\n   * Creates a cache object to optimize linear searches of large arrays.\n   *\n   * @private\n   * @param {Array} [array=[]] The array to search.\n   * @returns {null|Object} Returns the cache object or `null` if caching should not be used.\n   */\n  function createCache(array) {\n    var index = -1,\n        length = array.length,\n        first = array[0],\n        mid = array[(length / 2) | 0],\n        last = array[length - 1];\n\n    if (first && typeof first == 'object' &&\n        mid && typeof mid == 'object' && last && typeof last == 'object') {\n      return false;\n    }\n    var cache = getObject();\n    cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;\n\n    var result = getObject();\n    result.array = array;\n    result.cache = cache;\n    result.push = cachePush;\n\n    while (++index < length) {\n      result.push(array[index]);\n    }\n    return result;\n  }\n\n  /**\n   * Used by `template` to escape characters for inclusion in compiled\n   * string literals.\n   *\n   * @private\n   * @param {string} match The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(match) {\n    return '\\\\' + stringEscapes[match];\n  }\n\n  /**\n   * Gets an array from the array pool or creates a new one if the pool is empty.\n   *\n   * @private\n   * @returns {Array} The array from the pool.\n   */\n  function getArray() {\n    return arrayPool.pop() || [];\n  }\n\n  /**\n   * Gets an object from the object pool or creates a new one if the pool is empty.\n   *\n   * @private\n   * @returns {Object} The object from the pool.\n   */\n  function getObject() {\n    return objectPool.pop() || {\n      'array': null,\n      'cache': null,\n      'criteria': null,\n      'false': false,\n      'index': 0,\n      'null': false,\n      'number': null,\n      'object': null,\n      'push': null,\n      'string': null,\n      'true': false,\n      'undefined': false,\n      'value': null\n    };\n  }\n\n  /**\n   * Releases the given array back to the array pool.\n   *\n   * @private\n   * @param {Array} [array] The array to release.\n   */\n  function releaseArray(array) {\n    array.length = 0;\n    if (arrayPool.length < maxPoolSize) {\n      arrayPool.push(array);\n    }\n  }\n\n  /**\n   * Releases the given object back to the object pool.\n   *\n   * @private\n   * @param {Object} [object] The object to release.\n   */\n  function releaseObject(object) {\n    var cache = object.cache;\n    if (cache) {\n      releaseObject(cache);\n    }\n    object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;\n    if (objectPool.length < maxPoolSize) {\n      objectPool.push(object);\n    }\n  }\n\n  /**\n   * Slices the `collection` from the `start` index up to, but not including,\n   * the `end` index.\n   *\n   * Note: This function is used instead of `Array#slice` to support node lists\n   * in IE < 9 and to ensure dense arrays are returned.\n   *\n   * @private\n   * @param {Array|Object|string} collection The collection to slice.\n   * @param {number} start The start index.\n   * @param {number} end The end index.\n   * @returns {Array} Returns the new array.\n   */\n  function slice(array, start, end) {\n    start || (start = 0);\n    if (typeof end == 'undefined') {\n      end = array ? array.length : 0;\n    }\n    var index = -1,\n        length = end - start || 0,\n        result = Array(length < 0 ? 0 : length);\n\n    while (++index < length) {\n      result[index] = array[start + index];\n    }\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new `lodash` function using the given context object.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns the `lodash` function.\n   */\n  function runInContext(context) {\n    // Avoid issues with some ES3 environments that attempt to use values, named\n    // after built-in constructors like `Object`, for the creation of literals.\n    // ES5 clears this up by stating that literals must use built-in constructors.\n    // See http://es5.github.io/#x11.1.5.\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n    /** Native constructor references */\n    var Array = context.Array,\n        Boolean = context.Boolean,\n        Date = context.Date,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /**\n     * Used for `Array` method references.\n     *\n     * Normally `Array.prototype` would suffice, however, using an array literal\n     * avoids issues in Narwhal.\n     */\n    var arrayRef = [];\n\n    /** Used for native method references */\n    var objectProto = Object.prototype;\n\n    /** Used to restore the original `_` reference in `noConflict` */\n    var oldDash = context._;\n\n    /** Used to resolve the internal [[Class]] of values */\n    var toString = objectProto.toString;\n\n    /** Used to detect if a method is native */\n    var reNative = RegExp('^' +\n      String(toString)\n        .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n        .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n    );\n\n    /** Native method shortcuts */\n    var ceil = Math.ceil,\n        clearTimeout = context.clearTimeout,\n        floor = Math.floor,\n        fnToString = Function.prototype.toString,\n        getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n        hasOwnProperty = objectProto.hasOwnProperty,\n        push = arrayRef.push,\n        setTimeout = context.setTimeout,\n        splice = arrayRef.splice,\n        unshift = arrayRef.unshift;\n\n    /** Used to set meta data on functions */\n    var defineProperty = (function() {\n      // IE 8 only accepts DOM elements\n      try {\n        var o = {},\n            func = isNative(func = Object.defineProperty) && func,\n            result = func(o, o, o) && func;\n      } catch(e) { }\n      return result;\n    }());\n\n    /* Native method shortcuts for methods with the same name as other `lodash` methods */\n    var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,\n        nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n        nativeIsFinite = context.isFinite,\n        nativeIsNaN = context.isNaN,\n        nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n\n    /** Used to lookup a built-in constructor by [[Class]] */\n    var ctorByClass = {};\n    ctorByClass[arrayClass] = Array;\n    ctorByClass[boolClass] = Boolean;\n    ctorByClass[dateClass] = Date;\n    ctorByClass[funcClass] = Function;\n    ctorByClass[objectClass] = Object;\n    ctorByClass[numberClass] = Number;\n    ctorByClass[regexpClass] = RegExp;\n    ctorByClass[stringClass] = String;\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps the given value to enable intuitive\n     * method chaining.\n     *\n     * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:\n     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,\n     * and `unshift`\n     *\n     * Chaining is supported in custom builds as long as the `value` method is\n     * implicitly or explicitly included in the build.\n     *\n     * The chainable wrapper functions are:\n     * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,\n     * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,\n     * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,\n     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\n     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\n     * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,\n     * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,\n     * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,\n     * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,\n     * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,\n     * and `zip`\n     *\n     * The non-chainable wrapper functions are:\n     * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,\n     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,\n     * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\n     * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,\n     * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,\n     * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,\n     * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,\n     * `template`, `unescape`, `uniqueId`, and `value`\n     *\n     * The wrapper functions `first` and `last` return wrapped values when `n` is\n     * provided, otherwise they return unwrapped values.\n     *\n     * Explicit chaining can be enabled by using the `_.chain` method.\n     *\n     * @name _\n     * @constructor\n     * @category Chaining\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns a `lodash` instance.\n     * @example\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // returns an unwrapped value\n     * wrapped.reduce(function(sum, num) {\n     *   return sum + num;\n     * });\n     * // => 6\n     *\n     * // returns a wrapped value\n     * var squares = wrapped.map(function(num) {\n     *   return num * num;\n     * });\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor\n      return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))\n       ? value\n       : new lodashWrapper(value);\n    }\n\n    /**\n     * A fast path for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @param {boolean} chainAll A flag to enable chaining for all methods\n     * @returns {Object} Returns a `lodash` instance.\n     */\n    function lodashWrapper(value, chainAll) {\n      this.__chain__ = !!chainAll;\n      this.__wrapped__ = value;\n    }\n    // ensure `new lodashWrapper` is an instance of `lodash`\n    lodashWrapper.prototype = lodash.prototype;\n\n    /**\n     * An object used to flag environments features.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    var support = lodash.support = {};\n\n    /**\n     * Detect if functions can be decompiled by `Function#toString`\n     * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).\n     *\n     * @memberOf _.support\n     * @type boolean\n     */\n    support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);\n\n    /**\n     * Detect if `Function#name` is supported (all but IE).\n     *\n     * @memberOf _.support\n     * @type boolean\n     */\n    support.funcNames = typeof Function.name == 'string';\n\n    /**\n     * By default, the template delimiters used by Lo-Dash are similar to those in\n     * embedded Ruby (ERB). Change the following template settings to use alternative\n     * delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'escape': /<%-([\\s\\S]+?)%>/g,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'evaluate': /<%([\\s\\S]+?)%>/g,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type string\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type Object\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type Function\n         */\n        '_': lodash\n      }\n    };\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * The base implementation of `_.bind` that creates the bound function and\n     * sets its meta data.\n     *\n     * @private\n     * @param {Array} bindData The bind data array.\n     * @returns {Function} Returns the new bound function.\n     */\n    function baseBind(bindData) {\n      var func = bindData[0],\n          partialArgs = bindData[2],\n          thisArg = bindData[4];\n\n      function bound() {\n        // `Function#bind` spec\n        // http://es5.github.io/#x15.3.4.5\n        if (partialArgs) {\n          // avoid `arguments` object deoptimizations by using `slice` instead\n          // of `Array.prototype.slice.call` and not assigning `arguments` to a\n          // variable as a ternary expression\n          var args = slice(partialArgs);\n          push.apply(args, arguments);\n        }\n        // mimic the constructor's `return` behavior\n        // http://es5.github.io/#x13.2.2\n        if (this instanceof bound) {\n          // ensure `new bound` is an instance of `func`\n          var thisBinding = baseCreate(func.prototype),\n              result = func.apply(thisBinding, args || arguments);\n          return isObject(result) ? result : thisBinding;\n        }\n        return func.apply(thisArg, args || arguments);\n      }\n      setBindData(bound, bindData);\n      return bound;\n    }\n\n    /**\n     * The base implementation of `_.clone` without argument juggling or support\n     * for `thisArg` binding.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep=false] Specify a deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates clones with source counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, isDeep, callback, stackA, stackB) {\n      if (callback) {\n        var result = callback(value);\n        if (typeof result != 'undefined') {\n          return result;\n        }\n      }\n      // inspect [[Class]]\n      var isObj = isObject(value);\n      if (isObj) {\n        var className = toString.call(value);\n        if (!cloneableClasses[className]) {\n          return value;\n        }\n        var ctor = ctorByClass[className];\n        switch (className) {\n          case boolClass:\n          case dateClass:\n            return new ctor(+value);\n\n          case numberClass:\n          case stringClass:\n            return new ctor(value);\n\n          case regexpClass:\n            result = ctor(value.source, reFlags.exec(value));\n            result.lastIndex = value.lastIndex;\n            return result;\n        }\n      } else {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isDeep) {\n        // check for circular references and return corresponding clone\n        var initedStack = !stackA;\n        stackA || (stackA = getArray());\n        stackB || (stackB = getArray());\n\n        var length = stackA.length;\n        while (length--) {\n          if (stackA[length] == value) {\n            return stackB[length];\n          }\n        }\n        result = isArr ? ctor(value.length) : {};\n      }\n      else {\n        result = isArr ? slice(value) : assign({}, value);\n      }\n      // add array properties assigned by `RegExp#exec`\n      if (isArr) {\n        if (hasOwnProperty.call(value, 'index')) {\n          result.index = value.index;\n        }\n        if (hasOwnProperty.call(value, 'input')) {\n          result.input = value.input;\n        }\n      }\n      // exit for shallow clone\n      if (!isDeep) {\n        return result;\n      }\n      // add the source value to the stack of traversed objects\n      // and associate it with its clone\n      stackA.push(value);\n      stackB.push(result);\n\n      // recursively populate clone (susceptible to call stack limits)\n      (isArr ? forEach : forOwn)(value, function(objValue, key) {\n        result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);\n      });\n\n      if (initedStack) {\n        releaseArray(stackA);\n        releaseArray(stackB);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} prototype The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    function baseCreate(prototype, properties) {\n      return isObject(prototype) ? nativeCreate(prototype) : {};\n    }\n    // fallback for browsers without `Object.create`\n    if (!nativeCreate) {\n      baseCreate = (function() {\n        function Object() {}\n        return function(prototype) {\n          if (isObject(prototype)) {\n            Object.prototype = prototype;\n            var result = new Object;\n            Object.prototype = null;\n          }\n          return result || context.Object();\n        };\n      }());\n    }\n\n    /**\n     * The base implementation of `_.createCallback` without support for creating\n     * \"_.pluck\" or \"_.where\" style callbacks.\n     *\n     * @private\n     * @param {*} [func=identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of the created callback.\n     * @param {number} [argCount] The number of arguments the callback accepts.\n     * @returns {Function} Returns a callback function.\n     */\n    function baseCreateCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      // exit early for no `thisArg` or already bound by `Function#bind`\n      if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n        return func;\n      }\n      var bindData = func.__bindData__;\n      if (typeof bindData == 'undefined') {\n        if (support.funcNames) {\n          bindData = !func.name;\n        }\n        bindData = bindData || !support.funcDecomp;\n        if (!bindData) {\n          var source = fnToString.call(func);\n          if (!support.funcNames) {\n            bindData = !reFuncName.test(source);\n          }\n          if (!bindData) {\n            // checks if `func` references the `this` keyword and stores the result\n            bindData = reThis.test(source);\n            setBindData(func, bindData);\n          }\n        }\n      }\n      // exit early if there are no `this` references or `func` is bound\n      if (bindData === false || (bindData !== true && bindData[1] & 1)) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 2: return function(a, b) {\n          return func.call(thisArg, a, b);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n      }\n      return bind(func, thisArg);\n    }\n\n    /**\n     * The base implementation of `createWrapper` that creates the wrapper and\n     * sets its meta data.\n     *\n     * @private\n     * @param {Array} bindData The bind data array.\n     * @returns {Function} Returns the new function.\n     */\n    function baseCreateWrapper(bindData) {\n      var func = bindData[0],\n          bitmask = bindData[1],\n          partialArgs = bindData[2],\n          partialRightArgs = bindData[3],\n          thisArg = bindData[4],\n          arity = bindData[5];\n\n      var isBind = bitmask & 1,\n          isBindKey = bitmask & 2,\n          isCurry = bitmask & 4,\n          isCurryBound = bitmask & 8,\n          key = func;\n\n      function bound() {\n        var thisBinding = isBind ? thisArg : this;\n        if (partialArgs) {\n          var args = slice(partialArgs);\n          push.apply(args, arguments);\n        }\n        if (partialRightArgs || isCurry) {\n          args || (args = slice(arguments));\n          if (partialRightArgs) {\n            push.apply(args, partialRightArgs);\n          }\n          if (isCurry && args.length < arity) {\n            bitmask |= 16 & ~32;\n            return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n          }\n        }\n        args || (args = arguments);\n        if (isBindKey) {\n          func = thisBinding[key];\n        }\n        if (this instanceof bound) {\n          thisBinding = baseCreate(func.prototype);\n          var result = func.apply(thisBinding, args);\n          return isObject(result) ? result : thisBinding;\n        }\n        return func.apply(thisBinding, args);\n      }\n      setBindData(bound, bindData);\n      return bound;\n    }\n\n    /**\n     * The base implementation of `_.difference` that accepts a single array\n     * of values to exclude.\n     *\n     * @private\n     * @param {Array} array The array to process.\n     * @param {Array} [values] The array of values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     */\n    function baseDifference(array, values) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array ? array.length : 0,\n          isLarge = length >= largeArraySize && indexOf === baseIndexOf,\n          result = [];\n\n      if (isLarge) {\n        var cache = createCache(values);\n        if (cache) {\n          indexOf = cacheIndexOf;\n          values = cache;\n        } else {\n          isLarge = false;\n        }\n      }\n      while (++index < length) {\n        var value = array[index];\n        if (indexOf(values, value) < 0) {\n          result.push(value);\n        }\n      }\n      if (isLarge) {\n        releaseObject(values);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` without support for callback\n     * shorthands or `thisArg` binding.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n     * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.\n     * @param {number} [fromIndex=0] The index to start from.\n     * @returns {Array} Returns a new flattened array.\n     */\n    function baseFlatten(array, isShallow, isStrict, fromIndex) {\n      var index = (fromIndex || 0) - 1,\n          length = array ? array.length : 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n\n        if (value && typeof value == 'object' && typeof value.length == 'number'\n            && (isArray(value) || isArguments(value))) {\n          // recursively flatten arrays (susceptible to call stack limits)\n          if (!isShallow) {\n            value = baseFlatten(value, isShallow, isStrict);\n          }\n          var valIndex = -1,\n              valLength = value.length,\n              resIndex = result.length;\n\n          result.length += valLength;\n          while (++valIndex < valLength) {\n            result[resIndex++] = value[valIndex];\n          }\n        } else if (!isStrict) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.isEqual`, without support for `thisArg` binding,\n     * that allows partial \"_.where\" style comparisons.\n     *\n     * @private\n     * @param {*} a The value to compare.\n     * @param {*} b The other value to compare.\n     * @param {Function} [callback] The function to customize comparing values.\n     * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.\n     * @param {Array} [stackA=[]] Tracks traversed `a` objects.\n     * @param {Array} [stackB=[]] Tracks traversed `b` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {\n      // used to indicate that when comparing objects, `a` has at least the properties of `b`\n      if (callback) {\n        var result = callback(a, b);\n        if (typeof result != 'undefined') {\n          return !!result;\n        }\n      }\n      // exit early for identical values\n      if (a === b) {\n        // treat `+0` vs. `-0` as not equal\n        return a !== 0 || (1 / a == 1 / b);\n      }\n      var type = typeof a,\n          otherType = typeof b;\n\n      // exit early for unlike primitive values\n      if (a === a &&\n          !(a && objectTypes[type]) &&\n          !(b && objectTypes[otherType])) {\n        return false;\n      }\n      // exit early for `null` and `undefined` avoiding ES3's Function#call behavior\n      // http://es5.github.io/#x15.3.4.4\n      if (a == null || b == null) {\n        return a === b;\n      }\n      // compare [[Class]] names\n      var className = toString.call(a),\n          otherClass = toString.call(b);\n\n      if (className == argsClass) {\n        className = objectClass;\n      }\n      if (otherClass == argsClass) {\n        otherClass = objectClass;\n      }\n      if (className != otherClass) {\n        return false;\n      }\n      switch (className) {\n        case boolClass:\n        case dateClass:\n          // coerce dates and booleans to numbers, dates to milliseconds and booleans\n          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal\n          return +a == +b;\n\n        case numberClass:\n          // treat `NaN` vs. `NaN` as equal\n          return (a != +a)\n            ? b != +b\n            // but treat `+0` vs. `-0` as not equal\n            : (a == 0 ? (1 / a == 1 / b) : a == +b);\n\n        case regexpClass:\n        case stringClass:\n          // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)\n          // treat string primitives and their corresponding object instances as equal\n          return a == String(b);\n      }\n      var isArr = className == arrayClass;\n      if (!isArr) {\n        // unwrap any `lodash` wrapped values\n        var aWrapped = hasOwnProperty.call(a, '__wrapped__'),\n            bWrapped = hasOwnProperty.call(b, '__wrapped__');\n\n        if (aWrapped || bWrapped) {\n          return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);\n        }\n        // exit for functions and DOM nodes\n        if (className != objectClass) {\n          return false;\n        }\n        // in older versions of Opera, `arguments` objects have `Array` constructors\n        var ctorA = a.constructor,\n            ctorB = b.constructor;\n\n        // non `Object` object instances with different constructors are not equal\n        if (ctorA != ctorB &&\n              !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&\n              ('constructor' in a && 'constructor' in b)\n            ) {\n          return false;\n        }\n      }\n      // assume cyclic structures are equal\n      // the algorithm for detecting cyclic structures is adapted from ES 5.1\n      // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)\n      var initedStack = !stackA;\n      stackA || (stackA = getArray());\n      stackB || (stackB = getArray());\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == a) {\n          return stackB[length] == b;\n        }\n      }\n      var size = 0;\n      result = true;\n\n      // add `a` and `b` to the stack of traversed objects\n      stackA.push(a);\n      stackB.push(b);\n\n      // recursively compare objects and arrays (susceptible to call stack limits)\n      if (isArr) {\n        // compare lengths to determine if a deep comparison is necessary\n        length = a.length;\n        size = b.length;\n        result = size == length;\n\n        if (result || isWhere) {\n          // deep compare the contents, ignoring non-numeric properties\n          while (size--) {\n            var index = length,\n                value = b[size];\n\n            if (isWhere) {\n              while (index--) {\n                if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {\n                  break;\n                }\n              }\n            } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {\n              break;\n            }\n          }\n        }\n      }\n      else {\n        // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`\n        // which, in this case, is more costly\n        forIn(b, function(value, key, b) {\n          if (hasOwnProperty.call(b, key)) {\n            // count the number of properties.\n            size++;\n            // deep compare each property value.\n            return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));\n          }\n        });\n\n        if (result && !isWhere) {\n          // ensure both objects have the same number of properties\n          forIn(a, function(value, key, a) {\n            if (hasOwnProperty.call(a, key)) {\n              // `size` will be `-1` if `a` has more properties than `b`\n              return (result = --size > -1);\n            }\n          });\n        }\n      }\n      stackA.pop();\n      stackB.pop();\n\n      if (initedStack) {\n        releaseArray(stackA);\n        releaseArray(stackB);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.merge` without argument juggling or support\n     * for `thisArg` binding.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {Function} [callback] The function to customize merging properties.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\n     */\n    function baseMerge(object, source, callback, stackA, stackB) {\n      (isArray(source) ? forEach : forOwn)(source, function(source, key) {\n        var found,\n            isArr,\n            result = source,\n            value = object[key];\n\n        if (source && ((isArr = isArray(source)) || isPlainObject(source))) {\n          // avoid merging previously merged cyclic sources\n          var stackLength = stackA.length;\n          while (stackLength--) {\n            if ((found = stackA[stackLength] == source)) {\n              value = stackB[stackLength];\n              break;\n            }\n          }\n          if (!found) {\n            var isShallow;\n            if (callback) {\n              result = callback(value, source);\n              if ((isShallow = typeof result != 'undefined')) {\n                value = result;\n              }\n            }\n            if (!isShallow) {\n              value = isArr\n                ? (isArray(value) ? value : [])\n                : (isPlainObject(value) ? value : {});\n            }\n            // add `source` and associated `value` to the stack of traversed objects\n            stackA.push(source);\n            stackB.push(value);\n\n            // recursively merge objects and arrays (susceptible to call stack limits)\n            if (!isShallow) {\n              baseMerge(value, source, callback, stackA, stackB);\n            }\n          }\n        }\n        else {\n          if (callback) {\n            result = callback(value, source);\n            if (typeof result == 'undefined') {\n              result = source;\n            }\n          }\n          if (typeof result != 'undefined') {\n            value = result;\n          }\n        }\n        object[key] = value;\n      });\n    }\n\n    /**\n     * The base implementation of `_.random` without argument juggling or support\n     * for returning floating-point numbers.\n     *\n     * @private\n     * @param {number} min The minimum possible value.\n     * @param {number} max The maximum possible value.\n     * @returns {number} Returns a random number.\n     */\n    function baseRandom(min, max) {\n      return min + floor(nativeRandom() * (max - min + 1));\n    }\n\n    /**\n     * The base implementation of `_.uniq` without support for callback shorthands\n     * or `thisArg` binding.\n     *\n     * @private\n     * @param {Array} array The array to process.\n     * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n     * @param {Function} [callback] The function called per iteration.\n     * @returns {Array} Returns a duplicate-value-free array.\n     */\n    function baseUniq(array, isSorted, callback) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array ? array.length : 0,\n          result = [];\n\n      var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,\n          seen = (callback || isLarge) ? getArray() : result;\n\n      if (isLarge) {\n        var cache = createCache(seen);\n        indexOf = cacheIndexOf;\n        seen = cache;\n      }\n      while (++index < length) {\n        var value = array[index],\n            computed = callback ? callback(value, index, array) : value;\n\n        if (isSorted\n              ? !index || seen[seen.length - 1] !== computed\n              : indexOf(seen, computed) < 0\n            ) {\n          if (callback || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      if (isLarge) {\n        releaseArray(seen.array);\n        releaseObject(seen);\n      } else if (callback) {\n        releaseArray(seen);\n      }\n      return result;\n    }\n\n    /**\n     * Creates a function that aggregates a collection, creating an object composed\n     * of keys generated from the results of running each element of the collection\n     * through a callback. The given `setter` function sets the keys and values\n     * of the composed object.\n     *\n     * @private\n     * @param {Function} setter The setter function.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter) {\n      return function(collection, callback, thisArg) {\n        var result = {};\n        callback = lodash.createCallback(callback, thisArg, 3);\n\n        var index = -1,\n            length = collection ? collection.length : 0;\n\n        if (typeof length == 'number') {\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, callback(value, index, collection), collection);\n          }\n        } else {\n          forOwn(collection, function(value, key, collection) {\n            setter(result, value, callback(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that, when called, either curries or invokes `func`\n     * with an optional `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to reference.\n     * @param {number} bitmask The bitmask of method flags to compose.\n     *  The bitmask may be composed of the following flags:\n     *  1 - `_.bind`\n     *  2 - `_.bindKey`\n     *  4 - `_.curry`\n     *  8 - `_.curry` (bound)\n     *  16 - `_.partial`\n     *  32 - `_.partialRight`\n     * @param {Array} [partialArgs] An array of arguments to prepend to those\n     *  provided to the new function.\n     * @param {Array} [partialRightArgs] An array of arguments to append to those\n     *  provided to the new function.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new function.\n     */\n    function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n      var isBind = bitmask & 1,\n          isBindKey = bitmask & 2,\n          isCurry = bitmask & 4,\n          isCurryBound = bitmask & 8,\n          isPartial = bitmask & 16,\n          isPartialRight = bitmask & 32;\n\n      if (!isBindKey && !isFunction(func)) {\n        throw new TypeError;\n      }\n      if (isPartial && !partialArgs.length) {\n        bitmask &= ~16;\n        isPartial = partialArgs = false;\n      }\n      if (isPartialRight && !partialRightArgs.length) {\n        bitmask &= ~32;\n        isPartialRight = partialRightArgs = false;\n      }\n      var bindData = func && func.__bindData__;\n      if (bindData && bindData !== true) {\n        // clone `bindData`\n        bindData = slice(bindData);\n        if (bindData[2]) {\n          bindData[2] = slice(bindData[2]);\n        }\n        if (bindData[3]) {\n          bindData[3] = slice(bindData[3]);\n        }\n        // set `thisBinding` is not previously bound\n        if (isBind && !(bindData[1] & 1)) {\n          bindData[4] = thisArg;\n        }\n        // set if previously bound but not currently (subsequent curried functions)\n        if (!isBind && bindData[1] & 1) {\n          bitmask |= 8;\n        }\n        // set curried arity if not yet set\n        if (isCurry && !(bindData[1] & 4)) {\n          bindData[5] = arity;\n        }\n        // append partial left arguments\n        if (isPartial) {\n          push.apply(bindData[2] || (bindData[2] = []), partialArgs);\n        }\n        // append partial right arguments\n        if (isPartialRight) {\n          unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);\n        }\n        // merge flags\n        bindData[1] |= bitmask;\n        return createWrapper.apply(null, bindData);\n      }\n      // fast path for `_.bind`\n      var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n      return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n    }\n\n    /**\n     * Used by `escape` to convert characters to HTML entities.\n     *\n     * @private\n     * @param {string} match The matched character to escape.\n     * @returns {string} Returns the escaped character.\n     */\n    function escapeHtmlChar(match) {\n      return htmlEscapes[match];\n    }\n\n    /**\n     * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n     * customized, this method returns the custom method, otherwise it returns\n     * the `baseIndexOf` function.\n     *\n     * @private\n     * @returns {Function} Returns the \"indexOf\" function.\n     */\n    function getIndexOf() {\n      var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;\n      return result;\n    }\n\n    /**\n     * Checks if `value` is a native function.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.\n     */\n    function isNative(value) {\n      return typeof value == 'function' && reNative.test(value);\n    }\n\n    /**\n     * Sets `this` binding data on a given function.\n     *\n     * @private\n     * @param {Function} func The function to set data on.\n     * @param {Array} value The data array to set.\n     */\n    var setBindData = !defineProperty ? noop : function(func, value) {\n      descriptor.value = value;\n      defineProperty(func, '__bindData__', descriptor);\n    };\n\n    /**\n     * A fallback implementation of `isPlainObject` which checks if a given value\n     * is an object created by the `Object` constructor, assuming objects created\n     * by the `Object` constructor have no inherited enumerable properties and that\n     * there are no `Object.prototype` extensions.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     */\n    function shimIsPlainObject(value) {\n      var ctor,\n          result;\n\n      // avoid non Object objects, `arguments` objects, and DOM elements\n      if (!(value && toString.call(value) == objectClass) ||\n          (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {\n        return false;\n      }\n      // In most environments an object's own properties are iterated before\n      // its inherited properties. If the last iterated property is an object's\n      // own property then there are no inherited enumerable properties.\n      forIn(value, function(value, key) {\n        result = key;\n      });\n      return typeof result == 'undefined' || hasOwnProperty.call(value, result);\n    }\n\n    /**\n     * Used by `unescape` to convert HTML entities to characters.\n     *\n     * @private\n     * @param {string} match The matched character to unescape.\n     * @returns {string} Returns the unescaped character.\n     */\n    function unescapeHtmlChar(match) {\n      return htmlUnescapes[match];\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Checks if `value` is an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.\n     * @example\n     *\n     * (function() { return _.isArguments(arguments); })(1, 2, 3);\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    function isArguments(value) {\n      return value && typeof value == 'object' && typeof value.length == 'number' &&\n        toString.call(value) == argsClass || false;\n    }\n\n    /**\n     * Checks if `value` is an array.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an array, else `false`.\n     * @example\n     *\n     * (function() { return _.isArray(arguments); })();\n     * // => false\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     */\n    var isArray = nativeIsArray || function(value) {\n      return value && typeof value == 'object' && typeof value.length == 'number' &&\n        toString.call(value) == arrayClass || false;\n    };\n\n    /**\n     * A fallback implementation of `Object.keys` which produces an array of the\n     * given object's own enumerable property names.\n     *\n     * @private\n     * @type Function\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names.\n     */\n    var shimKeys = function(object) {\n      var index, iterable = object, result = [];\n      if (!iterable) return result;\n      if (!(objectTypes[typeof object])) return result;\n        for (index in iterable) {\n          if (hasOwnProperty.call(iterable, index)) {\n            result.push(index);\n          }\n        }\n      return result\n    };\n\n    /**\n     * Creates an array composed of the own enumerable property names of an object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names.\n     * @example\n     *\n     * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n     */\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      if (!isObject(object)) {\n        return [];\n      }\n      return nativeKeys(object);\n    };\n\n    /**\n     * Used to convert characters to HTML entities:\n     *\n     * Though the `>` character is escaped for symmetry, characters like `>` and `/`\n     * don't require escaping in HTML and have no special meaning unless they're part\n     * of a tag or an unquoted attribute value.\n     * http://mathiasbynens.be/notes/ambiguous-ampersands (under \"semi-related fun fact\")\n     */\n    var htmlEscapes = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#39;'\n    };\n\n    /** Used to convert HTML entities to characters */\n    var htmlUnescapes = invert(htmlEscapes);\n\n    /** Used to match HTML entities and HTML characters */\n    var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),\n        reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object. Subsequent sources will overwrite property assignments of previous\n     * sources. If a callback is provided it will be executed to produce the\n     * assigned values. The callback is bound to `thisArg` and invoked with two\n     * arguments; (objectValue, sourceValue).\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @alias extend\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param {Function} [callback] The function to customize assigning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });\n     * // => { 'name': 'fred', 'employer': 'slate' }\n     *\n     * var defaults = _.partialRight(_.assign, function(a, b) {\n     *   return typeof a == 'undefined' ? b : a;\n     * });\n     *\n     * var object = { 'name': 'barney' };\n     * defaults(object, { 'name': 'fred', 'employer': 'slate' });\n     * // => { 'name': 'barney', 'employer': 'slate' }\n     */\n    var assign = function(object, source, guard) {\n      var index, iterable = object, result = iterable;\n      if (!iterable) return result;\n      var args = arguments,\n          argsIndex = 0,\n          argsLength = typeof guard == 'number' ? 2 : args.length;\n      if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n        var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n      } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n        callback = args[--argsLength];\n      }\n      while (++argsIndex < argsLength) {\n        iterable = args[argsIndex];\n        if (iterable && objectTypes[typeof iterable]) {\n        var ownIndex = -1,\n            ownProps = objectTypes[typeof iterable] && keys(iterable),\n            length = ownProps ? ownProps.length : 0;\n\n        while (++ownIndex < length) {\n          index = ownProps[ownIndex];\n          result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];\n        }\n        }\n      }\n      return result\n    };\n\n    /**\n     * Creates a clone of `value`. If `isDeep` is `true` nested objects will also\n     * be cloned, otherwise they will be assigned by reference. If a callback\n     * is provided it will be executed to produce the cloned values. If the\n     * callback returns `undefined` cloning will be handled by the method instead.\n     * The callback is bound to `thisArg` and invoked with one argument; (value).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep=false] Specify a deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the cloned value.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * var shallow = _.clone(characters);\n     * shallow[0] === characters[0];\n     * // => true\n     *\n     * var deep = _.clone(characters, true);\n     * deep[0] === characters[0];\n     * // => false\n     *\n     * _.mixin({\n     *   'clone': _.partialRight(_.clone, function(value) {\n     *     return _.isElement(value) ? value.cloneNode(false) : undefined;\n     *   })\n     * });\n     *\n     * var clone = _.clone(document.body);\n     * clone.childNodes.length;\n     * // => 0\n     */\n    function clone(value, isDeep, callback, thisArg) {\n      // allows working with \"Collections\" methods without using their `index`\n      // and `collection` arguments for `isDeep` and `callback`\n      if (typeof isDeep != 'boolean' && isDeep != null) {\n        thisArg = callback;\n        callback = isDeep;\n        isDeep = false;\n      }\n      return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n    }\n\n    /**\n     * Creates a deep clone of `value`. If a callback is provided it will be\n     * executed to produce the cloned values. If the callback returns `undefined`\n     * cloning will be handled by the method instead. The callback is bound to\n     * `thisArg` and invoked with one argument; (value).\n     *\n     * Note: This method is loosely based on the structured clone algorithm. Functions\n     * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and\n     * objects created by constructors other than `Object` are cloned to plain `Object` objects.\n     * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to deep clone.\n     * @param {Function} [callback] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the deep cloned value.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * var deep = _.cloneDeep(characters);\n     * deep[0] === characters[0];\n     * // => false\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'node': element\n     * };\n     *\n     * var clone = _.cloneDeep(view, function(value) {\n     *   return _.isElement(value) ? value.cloneNode(true) : undefined;\n     * });\n     *\n     * clone.node == view.node;\n     * // => false\n     */\n    function cloneDeep(value, callback, thisArg) {\n      return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n    }\n\n    /**\n     * Creates an object that inherits from the given `prototype` object. If a\n     * `properties` object is provided its own enumerable properties are assigned\n     * to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties ? assign(result, properties) : result;\n    }\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object for all destination properties that resolve to `undefined`. Once a\n     * property is set, additional defaults of the same property will be ignored.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param- {Object} [guard] Allows working with `_.reduce` without using its\n     *  `key` and `object` arguments as sources.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * var object = { 'name': 'barney' };\n     * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });\n     * // => { 'name': 'barney', 'employer': 'slate' }\n     */\n    var defaults = function(object, source, guard) {\n      var index, iterable = object, result = iterable;\n      if (!iterable) return result;\n      var args = arguments,\n          argsIndex = 0,\n          argsLength = typeof guard == 'number' ? 2 : args.length;\n      while (++argsIndex < argsLength) {\n        iterable = args[argsIndex];\n        if (iterable && objectTypes[typeof iterable]) {\n        var ownIndex = -1,\n            ownProps = objectTypes[typeof iterable] && keys(iterable),\n            length = ownProps ? ownProps.length : 0;\n\n        while (++ownIndex < length) {\n          index = ownProps[ownIndex];\n          if (typeof result[index] == 'undefined') result[index] = iterable[index];\n        }\n        }\n      }\n      return result\n    };\n\n    /**\n     * This method is like `_.findIndex` except that it returns the key of the\n     * first element that passes the callback check, instead of the element itself.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [callback=identity] The function called per\n     *  iteration. If a property name or object is provided it will be used to\n     *  create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n     * @example\n     *\n     * var characters = {\n     *   'barney': {  'age': 36, 'blocked': false },\n     *   'fred': {    'age': 40, 'blocked': true },\n     *   'pebbles': { 'age': 1,  'blocked': false }\n     * };\n     *\n     * _.findKey(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => 'barney' (property order is not guaranteed across environments)\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findKey(characters, { 'age': 1 });\n     * // => 'pebbles'\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findKey(characters, 'blocked');\n     * // => 'fred'\n     */\n    function findKey(object, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forOwn(object, function(value, key, object) {\n        if (callback(value, key, object)) {\n          result = key;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [callback=identity] The function called per\n     *  iteration. If a property name or object is provided it will be used to\n     *  create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n     * @example\n     *\n     * var characters = {\n     *   'barney': {  'age': 36, 'blocked': true },\n     *   'fred': {    'age': 40, 'blocked': false },\n     *   'pebbles': { 'age': 1,  'blocked': true }\n     * };\n     *\n     * _.findLastKey(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => returns `pebbles`, assuming `_.findKey` returns `barney`\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findLastKey(characters, { 'age': 40 });\n     * // => 'fred'\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findLastKey(characters, 'blocked');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forOwnRight(object, function(value, key, object) {\n        if (callback(value, key, object)) {\n          result = key;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * Iterates over own and inherited enumerable properties of an object,\n     * executing the callback for each property. The callback is bound to `thisArg`\n     * and invoked with three arguments; (value, key, object). Callbacks may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * Shape.prototype.move = function(x, y) {\n     *   this.x += x;\n     *   this.y += y;\n     * };\n     *\n     * _.forIn(new Shape, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)\n     */\n    var forIn = function(collection, callback, thisArg) {\n      var index, iterable = collection, result = iterable;\n      if (!iterable) return result;\n      if (!objectTypes[typeof iterable]) return result;\n      callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n        for (index in iterable) {\n          if (callback(iterable[index], index, collection) === false) return result;\n        }\n      return result\n    };\n\n    /**\n     * This method is like `_.forIn` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * Shape.prototype.move = function(x, y) {\n     *   this.x += x;\n     *   this.y += y;\n     * };\n     *\n     * _.forInRight(new Shape, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'\n     */\n    function forInRight(object, callback, thisArg) {\n      var pairs = [];\n\n      forIn(object, function(value, key) {\n        pairs.push(key, value);\n      });\n\n      var length = pairs.length;\n      callback = baseCreateCallback(callback, thisArg, 3);\n      while (length--) {\n        if (callback(pairs[length--], pairs[length], object) === false) {\n          break;\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Iterates over own enumerable properties of an object, executing the callback\n     * for each property. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, key, object). Callbacks may exit iteration early by\n     * explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n     *   console.log(key);\n     * });\n     * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n     */\n    var forOwn = function(collection, callback, thisArg) {\n      var index, iterable = collection, result = iterable;\n      if (!iterable) return result;\n      if (!objectTypes[typeof iterable]) return result;\n      callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n        var ownIndex = -1,\n            ownProps = objectTypes[typeof iterable] && keys(iterable),\n            length = ownProps ? ownProps.length : 0;\n\n        while (++ownIndex < length) {\n          index = ownProps[ownIndex];\n          if (callback(iterable[index], index, collection) === false) return result;\n        }\n      return result\n    };\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over elements\n     * of a `collection` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'\n     */\n    function forOwnRight(object, callback, thisArg) {\n      var props = keys(object),\n          length = props.length;\n\n      callback = baseCreateCallback(callback, thisArg, 3);\n      while (length--) {\n        var key = props[length];\n        if (callback(object[key], key, object) === false) {\n          break;\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Creates a sorted array of property names of all enumerable properties,\n     * own and inherited, of `object` that have function values.\n     *\n     * @static\n     * @memberOf _\n     * @alias methods\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property names that have function values.\n     * @example\n     *\n     * _.functions(_);\n     * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]\n     */\n    function functions(object) {\n      var result = [];\n      forIn(object, function(value, key) {\n        if (isFunction(value)) {\n          result.push(key);\n        }\n      });\n      return result.sort();\n    }\n\n    /**\n     * Checks if the specified property name exists as a direct property of `object`,\n     * instead of an inherited property.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @param {string} key The name of the property to check.\n     * @returns {boolean} Returns `true` if key is a direct property, else `false`.\n     * @example\n     *\n     * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');\n     * // => true\n     */\n    function has(object, key) {\n      return object ? hasOwnProperty.call(object, key) : false;\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of the given object.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the created inverted object.\n     * @example\n     *\n     * _.invert({ 'first': 'fred', 'second': 'barney' });\n     * // => { 'fred': 'first', 'barney': 'second' }\n     */\n    function invert(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        result[object[key]] = key;\n      }\n      return result;\n    }\n\n    /**\n     * Checks if `value` is a boolean value.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.\n     * @example\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        value && typeof value == 'object' && toString.call(value) == boolClass || false;\n    }\n\n    /**\n     * Checks if `value` is a date.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a date, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     */\n    function isDate(value) {\n      return value && typeof value == 'object' && toString.call(value) == dateClass || false;\n    }\n\n    /**\n     * Checks if `value` is a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     */\n    function isElement(value) {\n      return value && value.nodeType === 1 || false;\n    }\n\n    /**\n     * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a\n     * length of `0` and objects with no own enumerable properties are considered\n     * \"empty\".\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Array|Object|string} value The value to inspect.\n     * @returns {boolean} Returns `true` if the `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({});\n     * // => true\n     *\n     * _.isEmpty('');\n     * // => true\n     */\n    function isEmpty(value) {\n      var result = true;\n      if (!value) {\n        return result;\n      }\n      var className = toString.call(value),\n          length = value.length;\n\n      if ((className == arrayClass || className == stringClass || className == argsClass ) ||\n          (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {\n        return !length;\n      }\n      forOwn(value, function() {\n        return (result = false);\n      });\n      return result;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent to each other. If a callback is provided it will be executed\n     * to compare values. If the callback returns `undefined` comparisons will\n     * be handled by the method instead. The callback is bound to `thisArg` and\n     * invoked with two arguments; (a, b).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} a The value to compare.\n     * @param {*} b The other value to compare.\n     * @param {Function} [callback] The function to customize comparing values.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * var copy = { 'name': 'fred' };\n     *\n     * object == copy;\n     * // => false\n     *\n     * _.isEqual(object, copy);\n     * // => true\n     *\n     * var words = ['hello', 'goodbye'];\n     * var otherWords = ['hi', 'goodbye'];\n     *\n     * _.isEqual(words, otherWords, function(a, b) {\n     *   var reGreet = /^(?:hello|hi)$/i,\n     *       aGreet = _.isString(a) && reGreet.test(a),\n     *       bGreet = _.isString(b) && reGreet.test(b);\n     *\n     *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;\n     * });\n     * // => true\n     */\n    function isEqual(a, b, callback, thisArg) {\n      return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));\n    }\n\n    /**\n     * Checks if `value` is, or can be coerced to, a finite number.\n     *\n     * Note: This is not the same as native `isFinite` which will return true for\n     * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is finite, else `false`.\n     * @example\n     *\n     * _.isFinite(-101);\n     * // => true\n     *\n     * _.isFinite('10');\n     * // => true\n     *\n     * _.isFinite(true);\n     * // => false\n     *\n     * _.isFinite('');\n     * // => false\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     */\n    function isFinite(value) {\n      return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));\n    }\n\n    /**\n     * Checks if `value` is a function.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     */\n    function isFunction(value) {\n      return typeof value == 'function';\n    }\n\n    /**\n     * Checks if `value` is the language type of Object.\n     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(1);\n     * // => false\n     */\n    function isObject(value) {\n      // check if the value is the ECMAScript language type of Object\n      // http://es5.github.io/#x8\n      // and avoid a V8 bug\n      // http://code.google.com/p/v8/issues/detail?id=2291\n      return !!(value && objectTypes[typeof value]);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * Note: This is not the same as native `isNaN` which will return `true` for\n     * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // `NaN` as a primitive is the only value that is not equal to itself\n      // (perform the [[Class]] check first to avoid errors with some host objects in IE)\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(undefined);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is a number.\n     *\n     * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(8.4 * 5);\n     * // => true\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        value && typeof value == 'object' && toString.call(value) == numberClass || false;\n    }\n\n    /**\n     * Checks if `value` is an object created by the `Object` constructor.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * _.isPlainObject(new Shape);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     */\n    var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n      if (!(value && toString.call(value) == objectClass)) {\n        return false;\n      }\n      var valueOf = value.valueOf,\n          objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n      return objProto\n        ? (value == objProto || getPrototypeOf(value) == objProto)\n        : shimIsPlainObject(value);\n    };\n\n    /**\n     * Checks if `value` is a regular expression.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.\n     * @example\n     *\n     * _.isRegExp(/fred/);\n     * // => true\n     */\n    function isRegExp(value) {\n      return value && typeof value == 'object' && toString.call(value) == regexpClass || false;\n    }\n\n    /**\n     * Checks if `value` is a string.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('fred');\n     * // => true\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        value && typeof value == 'object' && toString.call(value) == stringClass || false;\n    }\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     */\n    function isUndefined(value) {\n      return typeof value == 'undefined';\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated by\n     * running each own enumerable property of `object` through the callback.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new object with values of the results of each `callback` execution.\n     * @example\n     *\n     * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     *\n     * var characters = {\n     *   'fred': { 'name': 'fred', 'age': 40 },\n     *   'pebbles': { 'name': 'pebbles', 'age': 1 }\n     * };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.mapValues(characters, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 }\n     */\n    function mapValues(object, callback, thisArg) {\n      var result = {};\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      forOwn(object, function(value, key, object) {\n        result[key] = callback(value, key, object);\n      });\n      return result;\n    }\n\n    /**\n     * Recursively merges own enumerable properties of the source object(s), that\n     * don't resolve to `undefined` into the destination object. Subsequent sources\n     * will overwrite property assignments of previous sources. If a callback is\n     * provided it will be executed to produce the merged values of the destination\n     * and source properties. If the callback returns `undefined` merging will\n     * be handled by the method instead. The callback is bound to `thisArg` and\n     * invoked with two arguments; (objectValue, sourceValue).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The destination object.\n     * @param {...Object} [source] The source objects.\n     * @param {Function} [callback] The function to customize merging properties.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the destination object.\n     * @example\n     *\n     * var names = {\n     *   'characters': [\n     *     { 'name': 'barney' },\n     *     { 'name': 'fred' }\n     *   ]\n     * };\n     *\n     * var ages = {\n     *   'characters': [\n     *     { 'age': 36 },\n     *     { 'age': 40 }\n     *   ]\n     * };\n     *\n     * _.merge(names, ages);\n     * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }\n     *\n     * var food = {\n     *   'fruits': ['apple'],\n     *   'vegetables': ['beet']\n     * };\n     *\n     * var otherFood = {\n     *   'fruits': ['banana'],\n     *   'vegetables': ['carrot']\n     * };\n     *\n     * _.merge(food, otherFood, function(a, b) {\n     *   return _.isArray(a) ? a.concat(b) : undefined;\n     * });\n     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }\n     */\n    function merge(object) {\n      var args = arguments,\n          length = 2;\n\n      if (!isObject(object)) {\n        return object;\n      }\n      // allows working with `_.reduce` and `_.reduceRight` without using\n      // their `index` and `collection` arguments\n      if (typeof args[2] != 'number') {\n        length = args.length;\n      }\n      if (length > 3 && typeof args[length - 2] == 'function') {\n        var callback = baseCreateCallback(args[--length - 1], args[length--], 2);\n      } else if (length > 2 && typeof args[length - 1] == 'function') {\n        callback = args[--length];\n      }\n      var sources = slice(arguments, 1, length),\n          index = -1,\n          stackA = getArray(),\n          stackB = getArray();\n\n      while (++index < length) {\n        baseMerge(object, sources[index], callback, stackA, stackB);\n      }\n      releaseArray(stackA);\n      releaseArray(stackB);\n      return object;\n    }\n\n    /**\n     * Creates a shallow clone of `object` excluding the specified properties.\n     * Property names may be specified as individual arguments or as arrays of\n     * property names. If a callback is provided it will be executed for each\n     * property of `object` omitting the properties the callback returns truey\n     * for. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The source object.\n     * @param {Function|...string|string[]} [callback] The properties to omit or the\n     *  function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns an object without the omitted properties.\n     * @example\n     *\n     * _.omit({ 'name': 'fred', 'age': 40 }, 'age');\n     * // => { 'name': 'fred' }\n     *\n     * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {\n     *   return typeof value == 'number';\n     * });\n     * // => { 'name': 'fred' }\n     */\n    function omit(object, callback, thisArg) {\n      var result = {};\n      if (typeof callback != 'function') {\n        var props = [];\n        forIn(object, function(value, key) {\n          props.push(key);\n        });\n        props = baseDifference(props, baseFlatten(arguments, true, false, 1));\n\n        var index = -1,\n            length = props.length;\n\n        while (++index < length) {\n          var key = props[index];\n          result[key] = object[key];\n        }\n      } else {\n        callback = lodash.createCallback(callback, thisArg, 3);\n        forIn(object, function(value, key, object) {\n          if (!callback(value, key, object)) {\n            result[key] = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Creates a two dimensional array of an object's key-value pairs,\n     * i.e. `[[key1, value1], [key2, value2]]`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns new array of key-value pairs.\n     * @example\n     *\n     * _.pairs({ 'barney': 36, 'fred': 40 });\n     * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)\n     */\n    function pairs(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n\n    /**\n     * Creates a shallow clone of `object` composed of the specified properties.\n     * Property names may be specified as individual arguments or as arrays of\n     * property names. If a callback is provided it will be executed for each\n     * property of `object` picking the properties the callback returns truey\n     * for. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The source object.\n     * @param {Function|...string|string[]} [callback] The function called per\n     *  iteration or property names to pick, specified as individual property\n     *  names or arrays of property names.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns an object composed of the picked properties.\n     * @example\n     *\n     * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');\n     * // => { 'name': 'fred' }\n     *\n     * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {\n     *   return key.charAt(0) != '_';\n     * });\n     * // => { 'name': 'fred' }\n     */\n    function pick(object, callback, thisArg) {\n      var result = {};\n      if (typeof callback != 'function') {\n        var index = -1,\n            props = baseFlatten(arguments, true, false, 1),\n            length = isObject(object) ? props.length : 0;\n\n        while (++index < length) {\n          var key = props[index];\n          if (key in object) {\n            result[key] = object[key];\n          }\n        }\n      } else {\n        callback = lodash.createCallback(callback, thisArg, 3);\n        forIn(object, function(value, key, object) {\n          if (callback(value, key, object)) {\n            result[key] = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * An alternative to `_.reduce` this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable properties through a callback, with each callback execution\n     * potentially mutating the `accumulator` object. The callback is bound to\n     * `thisArg` and invoked with four arguments; (accumulator, value, key, object).\n     * Callbacks may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Array|Object} object The object to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {\n     *   num *= num;\n     *   if (num % 2) {\n     *     return result.push(num) < 3;\n     *   }\n     * });\n     * // => [1, 9, 25]\n     *\n     * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n     *   result[key] = num * 3;\n     * });\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     */\n    function transform(object, callback, accumulator, thisArg) {\n      var isArr = isArray(object);\n      if (accumulator == null) {\n        if (isArr) {\n          accumulator = [];\n        } else {\n          var ctor = object && object.constructor,\n              proto = ctor && ctor.prototype;\n\n          accumulator = baseCreate(proto);\n        }\n      }\n      if (callback) {\n        callback = lodash.createCallback(callback, thisArg, 4);\n        (isArr ? forEach : forOwn)(object, function(value, index, object) {\n          return callback(accumulator, value, index, object);\n        });\n      }\n      return accumulator;\n    }\n\n    /**\n     * Creates an array composed of the own enumerable property values of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @category Objects\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns an array of property values.\n     * @example\n     *\n     * _.values({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => [1, 2, 3] (property order is not guaranteed across environments)\n     */\n    function values(object) {\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements from the specified indexes, or keys, of the\n     * `collection`. Indexes may be specified as individual arguments or as arrays\n     * of indexes.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`\n     *   to retrieve, specified as individual indexes or arrays of indexes.\n     * @returns {Array} Returns a new array of elements corresponding to the\n     *  provided indexes.\n     * @example\n     *\n     * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);\n     * // => ['a', 'c', 'e']\n     *\n     * _.at(['fred', 'barney', 'pebbles'], 0, 2);\n     * // => ['fred', 'pebbles']\n     */\n    function at(collection) {\n      var args = arguments,\n          index = -1,\n          props = baseFlatten(args, true, false, 1),\n          length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,\n          result = Array(length);\n\n      while(++index < length) {\n        result[index] = collection[props[index]];\n      }\n      return result;\n    }\n\n    /**\n     * Checks if a given value is present in a collection using strict equality\n     * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the\n     * offset from the end of the collection.\n     *\n     * @static\n     * @memberOf _\n     * @alias include\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {*} target The value to check for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {boolean} Returns `true` if the `target` element is found, else `false`.\n     * @example\n     *\n     * _.contains([1, 2, 3], 1);\n     * // => true\n     *\n     * _.contains([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');\n     * // => true\n     *\n     * _.contains('pebbles', 'eb');\n     * // => true\n     */\n    function contains(collection, target, fromIndex) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = collection ? collection.length : 0,\n          result = false;\n\n      fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;\n      if (isArray(collection)) {\n        result = indexOf(collection, target, fromIndex) > -1;\n      } else if (typeof length == 'number') {\n        result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;\n      } else {\n        forOwn(collection, function(value) {\n          if (++index >= fromIndex) {\n            return !(result = value === target);\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` through the callback. The corresponding value\n     * of each key is the number of times the key was returned by the callback.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);\n    });\n\n    /**\n     * Checks if the given callback returns truey value for **all** elements of\n     * a collection. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias all\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if all elements passed the callback check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes']);\n     * // => false\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.every(characters, 'age');\n     * // => true\n     *\n     * // using \"_.where\" callback shorthand\n     * _.every(characters, { 'age': 36 });\n     * // => false\n     */\n    function every(collection, callback, thisArg) {\n      var result = true;\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      if (typeof length == 'number') {\n        while (++index < length) {\n          if (!(result = !!callback(collection[index], index, collection))) {\n            break;\n          }\n        }\n      } else {\n        forOwn(collection, function(value, index, collection) {\n          return (result = !!callback(value, index, collection));\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, returning an array of all elements\n     * the callback returns truey for. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias select\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of elements that passed the callback check.\n     * @example\n     *\n     * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n     * // => [2, 4, 6]\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.filter(characters, 'blocked');\n     * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.filter(characters, { 'age': 36 });\n     * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n     */\n    function filter(collection, callback, thisArg) {\n      var result = [];\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      if (typeof length == 'number') {\n        while (++index < length) {\n          var value = collection[index];\n          if (callback(value, index, collection)) {\n            result.push(value);\n          }\n        }\n      } else {\n        forOwn(collection, function(value, index, collection) {\n          if (callback(value, index, collection)) {\n            result.push(value);\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, returning the first element that\n     * the callback returns truey for. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias detect, findWhere\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the found element, else `undefined`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': false },\n     *   { 'name': 'fred',    'age': 40, 'blocked': true },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': false }\n     * ];\n     *\n     * _.find(characters, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => { 'name': 'barney', 'age': 36, 'blocked': false }\n     *\n     * // using \"_.where\" callback shorthand\n     * _.find(characters, { 'age': 1 });\n     * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.find(characters, 'blocked');\n     * // => { 'name': 'fred', 'age': 40, 'blocked': true }\n     */\n    function find(collection, callback, thisArg) {\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      if (typeof length == 'number') {\n        while (++index < length) {\n          var value = collection[index];\n          if (callback(value, index, collection)) {\n            return value;\n          }\n        }\n      } else {\n        var result;\n        forOwn(collection, function(value, index, collection) {\n          if (callback(value, index, collection)) {\n            result = value;\n            return false;\n          }\n        });\n        return result;\n      }\n    }\n\n    /**\n     * This method is like `_.find` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the found element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(num) {\n     *   return num % 2 == 1;\n     * });\n     * // => 3\n     */\n    function findLast(collection, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      forEachRight(collection, function(value, index, collection) {\n        if (callback(value, index, collection)) {\n          result = value;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * Iterates over elements of a collection, executing the callback for each\n     * element. The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection). Callbacks may exit iteration early by\n     * explicitly returning `false`.\n     *\n     * Note: As with other \"Collections\" methods, objects with a `length` property\n     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n     * may be used for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @alias each\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n     * // => logs each number and returns '1,2,3'\n     *\n     * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n     * // => logs each number and returns the object (property order is not guaranteed across environments)\n     */\n    function forEach(collection, callback, thisArg) {\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n      if (typeof length == 'number') {\n        while (++index < length) {\n          if (callback(collection[index], index, collection) === false) {\n            break;\n          }\n        }\n      } else {\n        forOwn(collection, callback);\n      }\n      return collection;\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias eachRight\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');\n     * // => logs each number from right to left and returns '3,2,1'\n     */\n    function forEachRight(collection, callback, thisArg) {\n      var length = collection ? collection.length : 0;\n      callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n      if (typeof length == 'number') {\n        while (length--) {\n          if (callback(collection[length], length, collection) === false) {\n            break;\n          }\n        }\n      } else {\n        var props = keys(collection);\n        length = props.length;\n        forOwn(collection, function(value, key, collection) {\n          key = props ? props[--length] : --length;\n          return callback(collection[key], key, collection);\n        });\n      }\n      return collection;\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of a collection through the callback. The corresponding value\n     * of each key is an array of the elements responsible for generating the key.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of the collection through the given callback. The corresponding\n     * value of each key is the last element responsible for generating the key.\n     * The callback is bound to `thisArg` and invoked with three arguments;\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var keys = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.indexBy(keys, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     */\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n\n    /**\n     * Invokes the method named by `methodName` on each element in the `collection`\n     * returning an array of the results of each invoked method. Additional arguments\n     * will be provided to each invoked method. If `methodName` is a function it\n     * will be invoked for, and `this` bound to, each element in the `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|string} methodName The name of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [arg] Arguments to invoke the method with.\n     * @returns {Array} Returns a new array of the results of each invoked method.\n     * @example\n     *\n     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invoke([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    function invoke(collection, methodName) {\n      var args = slice(arguments, 2),\n          index = -1,\n          isFunc = typeof methodName == 'function',\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      forEach(collection, function(value) {\n        result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an array of values by running each element in the collection\n     * through the callback. The callback is bound to `thisArg` and invoked with\n     * three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias collect\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of the results of each `callback` execution.\n     * @example\n     *\n     * _.map([1, 2, 3], function(num) { return num * 3; });\n     * // => [3, 6, 9]\n     *\n     * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });\n     * // => [3, 6, 9] (property order is not guaranteed across environments)\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.map(characters, 'name');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, callback, thisArg) {\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      if (typeof length == 'number') {\n        var result = Array(length);\n        while (++index < length) {\n          result[index] = callback(collection[index], index, collection);\n        }\n      } else {\n        result = [];\n        forOwn(collection, function(value, key, collection) {\n          result[++index] = callback(value, key, collection);\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the maximum value of a collection. If the collection is empty or\n     * falsey `-Infinity` is returned. If a callback is provided it will be executed\n     * for each value in the collection to generate the criterion by which the value\n     * is ranked. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.max(characters, function(chr) { return chr.age; });\n     * // => { 'name': 'fred', 'age': 40 };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.max(characters, 'age');\n     * // => { 'name': 'fred', 'age': 40 };\n     */\n    function max(collection, callback, thisArg) {\n      var computed = -Infinity,\n          result = computed;\n\n      // allows working with functions like `_.map` without using\n      // their `index` argument as a callback\n      if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n        callback = null;\n      }\n      if (callback == null && isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (value > result) {\n            result = value;\n          }\n        }\n      } else {\n        callback = (callback == null && isString(collection))\n          ? charAtCallback\n          : lodash.createCallback(callback, thisArg, 3);\n\n        forEach(collection, function(value, index, collection) {\n          var current = callback(value, index, collection);\n          if (current > computed) {\n            computed = current;\n            result = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the minimum value of a collection. If the collection is empty or\n     * falsey `Infinity` is returned. If a callback is provided it will be executed\n     * for each value in the collection to generate the criterion by which the value\n     * is ranked. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.min(characters, function(chr) { return chr.age; });\n     * // => { 'name': 'barney', 'age': 36 };\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.min(characters, 'age');\n     * // => { 'name': 'barney', 'age': 36 };\n     */\n    function min(collection, callback, thisArg) {\n      var computed = Infinity,\n          result = computed;\n\n      // allows working with functions like `_.map` without using\n      // their `index` argument as a callback\n      if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n        callback = null;\n      }\n      if (callback == null && isArray(collection)) {\n        var index = -1,\n            length = collection.length;\n\n        while (++index < length) {\n          var value = collection[index];\n          if (value < result) {\n            result = value;\n          }\n        }\n      } else {\n        callback = (callback == null && isString(collection))\n          ? charAtCallback\n          : lodash.createCallback(callback, thisArg, 3);\n\n        forEach(collection, function(value, index, collection) {\n          var current = callback(value, index, collection);\n          if (current < computed) {\n            computed = current;\n            result = value;\n          }\n        });\n      }\n      return result;\n    }\n\n    /**\n     * Retrieves the value of a specified property from all elements in the collection.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {string} property The name of the property to pluck.\n     * @returns {Array} Returns a new array of property values.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.pluck(characters, 'name');\n     * // => ['barney', 'fred']\n     */\n    var pluck = map;\n\n    /**\n     * Reduces a collection to a value which is the accumulated result of running\n     * each element in the collection through the callback, where each successive\n     * callback execution consumes the return value of the previous execution. If\n     * `accumulator` is not provided the first element of the collection will be\n     * used as the initial `accumulator` value. The callback is bound to `thisArg`\n     * and invoked with four arguments; (accumulator, value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @alias foldl, inject\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] Initial value of the accumulator.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var sum = _.reduce([1, 2, 3], function(sum, num) {\n     *   return sum + num;\n     * });\n     * // => 6\n     *\n     * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n     *   result[key] = num * 3;\n     *   return result;\n     * }, {});\n     * // => { 'a': 3, 'b': 6, 'c': 9 }\n     */\n    function reduce(collection, callback, accumulator, thisArg) {\n      if (!collection) return accumulator;\n      var noaccum = arguments.length < 3;\n      callback = lodash.createCallback(callback, thisArg, 4);\n\n      var index = -1,\n          length = collection.length;\n\n      if (typeof length == 'number') {\n        if (noaccum) {\n          accumulator = collection[++index];\n        }\n        while (++index < length) {\n          accumulator = callback(accumulator, collection[index], index, collection);\n        }\n      } else {\n        forOwn(collection, function(value, index, collection) {\n          accumulator = noaccum\n            ? (noaccum = false, value)\n            : callback(accumulator, value, index, collection)\n        });\n      }\n      return accumulator;\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias foldr\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [callback=identity] The function called per iteration.\n     * @param {*} [accumulator] Initial value of the accumulator.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var list = [[0, 1], [2, 3], [4, 5]];\n     * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, callback, accumulator, thisArg) {\n      var noaccum = arguments.length < 3;\n      callback = lodash.createCallback(callback, thisArg, 4);\n      forEachRight(collection, function(value, index, collection) {\n        accumulator = noaccum\n          ? (noaccum = false, value)\n          : callback(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The opposite of `_.filter` this method returns the elements of a\n     * collection that the callback does **not** return truey for.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of elements that failed the callback check.\n     * @example\n     *\n     * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n     * // => [1, 3, 5]\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.reject(characters, 'blocked');\n     * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.reject(characters, { 'age': 36 });\n     * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n     */\n    function reject(collection, callback, thisArg) {\n      callback = lodash.createCallback(callback, thisArg, 3);\n      return filter(collection, function(value, index, collection) {\n        return !callback(value, index, collection);\n      });\n    }\n\n    /**\n     * Retrieves a random element or `n` random elements from a collection.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to sample.\n     * @param {number} [n] The number of elements to sample.\n     * @param- {Object} [guard] Allows working with functions like `_.map`\n     *  without using their `index` arguments as `n`.\n     * @returns {Array} Returns the random sample(s) of `collection`.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     *\n     * _.sample([1, 2, 3, 4], 2);\n     * // => [3, 1]\n     */\n    function sample(collection, n, guard) {\n      if (collection && typeof collection.length != 'number') {\n        collection = values(collection);\n      }\n      if (n == null || guard) {\n        return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;\n      }\n      var result = shuffle(collection);\n      result.length = nativeMin(nativeMax(0, n), result.length);\n      return result;\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the Fisher-Yates\n     * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to shuffle.\n     * @returns {Array} Returns a new shuffled collection.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4, 5, 6]);\n     * // => [4, 1, 6, 3, 5, 2]\n     */\n    function shuffle(collection) {\n      var index = -1,\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      forEach(collection, function(value) {\n        var rand = baseRandom(0, ++index);\n        result[index] = result[rand];\n        result[rand] = value;\n      });\n      return result;\n    }\n\n    /**\n     * Gets the size of the `collection` by returning `collection.length` for arrays\n     * and array-like objects or the number of own enumerable properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns `collection.length` or number of own enumerable properties.\n     * @example\n     *\n     * _.size([1, 2]);\n     * // => 2\n     *\n     * _.size({ 'one': 1, 'two': 2, 'three': 3 });\n     * // => 3\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      var length = collection ? collection.length : 0;\n      return typeof length == 'number' ? length : keys(collection).length;\n    }\n\n    /**\n     * Checks if the callback returns a truey value for **any** element of a\n     * collection. The function returns as soon as it finds a passing value and\n     * does not iterate over the entire collection. The callback is bound to\n     * `thisArg` and invoked with three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias any\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {boolean} Returns `true` if any element passed the callback check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'blocked': false },\n     *   { 'name': 'fred',   'age': 40, 'blocked': true }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.some(characters, 'blocked');\n     * // => true\n     *\n     * // using \"_.where\" callback shorthand\n     * _.some(characters, { 'age': 1 });\n     * // => false\n     */\n    function some(collection, callback, thisArg) {\n      var result;\n      callback = lodash.createCallback(callback, thisArg, 3);\n\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      if (typeof length == 'number') {\n        while (++index < length) {\n          if ((result = callback(collection[index], index, collection))) {\n            break;\n          }\n        }\n      } else {\n        forOwn(collection, function(value, index, collection) {\n          return !(result = callback(value, index, collection));\n        });\n      }\n      return !!result;\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection through the callback. This method\n     * performs a stable sort, that is, it will preserve the original sort order\n     * of equal elements. The callback is bound to `thisArg` and invoked with\n     * three arguments; (value, index|key, collection).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an array of property names is provided for `callback` the collection\n     * will be sorted by each property value.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Array|Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of sorted elements.\n     * @example\n     *\n     * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });\n     * // => [3, 1, 2]\n     *\n     * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);\n     * // => [3, 1, 2]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36 },\n     *   { 'name': 'fred',    'age': 40 },\n     *   { 'name': 'barney',  'age': 26 },\n     *   { 'name': 'fred',    'age': 30 }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.map(_.sortBy(characters, 'age'), _.values);\n     * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]\n     *\n     * // sorting by multiple properties\n     * _.map(_.sortBy(characters, ['name', 'age']), _.values);\n     * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]\n     */\n    function sortBy(collection, callback, thisArg) {\n      var index = -1,\n          isArr = isArray(callback),\n          length = collection ? collection.length : 0,\n          result = Array(typeof length == 'number' ? length : 0);\n\n      if (!isArr) {\n        callback = lodash.createCallback(callback, thisArg, 3);\n      }\n      forEach(collection, function(value, key, collection) {\n        var object = result[++index] = getObject();\n        if (isArr) {\n          object.criteria = map(callback, function(key) { return value[key]; });\n        } else {\n          (object.criteria = getArray())[0] = callback(value, key, collection);\n        }\n        object.index = index;\n        object.value = value;\n      });\n\n      length = result.length;\n      result.sort(compareAscending);\n      while (length--) {\n        var object = result[length];\n        result[length] = object.value;\n        if (!isArr) {\n          releaseArray(object.criteria);\n        }\n        releaseObject(object);\n      }\n      return result;\n    }\n\n    /**\n     * Converts the `collection` to an array.\n     *\n     * @static\n     * @memberOf _\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to convert.\n     * @returns {Array} Returns the new converted array.\n     * @example\n     *\n     * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);\n     * // => [2, 3, 4]\n     */\n    function toArray(collection) {\n      if (collection && typeof collection.length == 'number') {\n        return slice(collection);\n      }\n      return values(collection);\n    }\n\n    /**\n     * Performs a deep comparison of each element in a `collection` to the given\n     * `properties` object, returning an array of all elements that have equivalent\n     * property values.\n     *\n     * @static\n     * @memberOf _\n     * @type Function\n     * @category Collections\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Object} props The object of property values to filter by.\n     * @returns {Array} Returns a new array of elements that have the given properties.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },\n     *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n     * ];\n     *\n     * _.where(characters, { 'age': 36 });\n     * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]\n     *\n     * _.where(characters, { 'pets': ['dino'] });\n     * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]\n     */\n    var where = filter;\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are all falsey.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array excluding all values of the provided arrays using strict\n     * equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to process.\n     * @param {...Array} [values] The arrays of values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);\n     * // => [1, 3, 4]\n     */\n    function difference(array) {\n      return baseDifference(array, baseFlatten(arguments, true, true, 1));\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element that passes the callback check, instead of the element itself.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': false },\n     *   { 'name': 'fred',    'age': 40, 'blocked': true },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': false }\n     * ];\n     *\n     * _.findIndex(characters, function(chr) {\n     *   return chr.age < 20;\n     * });\n     * // => 2\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findIndex(characters, { 'age': 36 });\n     * // => 0\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findIndex(characters, 'blocked');\n     * // => 1\n     */\n    function findIndex(array, callback, thisArg) {\n      var index = -1,\n          length = array ? array.length : 0;\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (++index < length) {\n        if (callback(array[index], index, array)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of a `collection` from right to left.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36, 'blocked': true },\n     *   { 'name': 'fred',    'age': 40, 'blocked': false },\n     *   { 'name': 'pebbles', 'age': 1,  'blocked': true }\n     * ];\n     *\n     * _.findLastIndex(characters, function(chr) {\n     *   return chr.age > 30;\n     * });\n     * // => 1\n     *\n     * // using \"_.where\" callback shorthand\n     * _.findLastIndex(characters, { 'age': 36 });\n     * // => 0\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.findLastIndex(characters, 'blocked');\n     * // => 2\n     */\n    function findLastIndex(array, callback, thisArg) {\n      var length = array ? array.length : 0;\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (length--) {\n        if (callback(array[length], length, array)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Gets the first element or first `n` elements of an array. If a callback\n     * is provided elements at the beginning of the array are returned as long\n     * as the callback returns truey. The callback is bound to `thisArg` and\n     * invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias head, take\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback] The function called\n     *  per element or the number of elements to return. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the first element(s) of `array`.\n     * @example\n     *\n     * _.first([1, 2, 3]);\n     * // => 1\n     *\n     * _.first([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.first([1, 2, 3], function(num) {\n     *   return num < 3;\n     * });\n     * // => [1, 2]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.first(characters, 'blocked');\n     * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');\n     * // => ['barney', 'fred']\n     */\n    function first(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = -1;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (++index < length && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = callback;\n        if (n == null || thisArg) {\n          return array ? array[0] : undefined;\n        }\n      }\n      return slice(array, 0, nativeMin(nativeMax(0, n), length));\n    }\n\n    /**\n     * Flattens a nested array (the nesting can be to any depth). If `isShallow`\n     * is truey, the array will only be flattened a single level. If a callback\n     * is provided each element of the array is passed through the callback before\n     * flattening. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2], [3, [[4]]]]);\n     * // => [1, 2, 3, 4];\n     *\n     * _.flatten([1, [2], [3, [[4]]]], true);\n     * // => [1, 2, 3, [[4]]];\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },\n     *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.flatten(characters, 'pets');\n     * // => ['hoppy', 'baby puss', 'dino']\n     */\n    function flatten(array, isShallow, callback, thisArg) {\n      // juggle arguments\n      if (typeof isShallow != 'boolean' && isShallow != null) {\n        thisArg = callback;\n        callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;\n        isShallow = false;\n      }\n      if (callback != null) {\n        array = map(array, callback, thisArg);\n      }\n      return baseFlatten(array, isShallow);\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found using\n     * strict equality for comparisons, i.e. `===`. If the array is already sorted\n     * providing `true` for `fromIndex` will run a faster binary search.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n     *  to perform a binary search on a sorted array.\n     * @returns {number} Returns the index of the matched value or `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 3, 1, 2, 3], 2);\n     * // => 1\n     *\n     * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);\n     * // => 4\n     *\n     * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);\n     * // => 2\n     */\n    function indexOf(array, value, fromIndex) {\n      if (typeof fromIndex == 'number') {\n        var length = array ? array.length : 0;\n        fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);\n      } else if (fromIndex) {\n        var index = sortedIndex(array, value);\n        return array[index] === value ? index : -1;\n      }\n      return baseIndexOf(array, value, fromIndex);\n    }\n\n    /**\n     * Gets all but the last element or last `n` elements of an array. If a\n     * callback is provided elements at the end of the array are excluded from\n     * the result as long as the callback returns truey. The callback is bound\n     * to `thisArg` and invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback=1] The function called\n     *  per element or the number of elements to exclude. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.initial([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.initial([1, 2, 3], function(num) {\n     *   return num > 1;\n     * });\n     * // => [1]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.initial(characters, 'blocked');\n     * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]\n     *\n     * // using \"_.where\" callback shorthand\n     * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');\n     * // => ['barney', 'fred']\n     */\n    function initial(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = length;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (index-- && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = (callback == null || thisArg) ? 1 : callback || n;\n      }\n      return slice(array, 0, nativeMin(nativeMax(0, length - n), length));\n    }\n\n    /**\n     * Creates an array of unique values present in all provided arrays using\n     * strict equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of shared values.\n     * @example\n     *\n     * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n     * // => [1, 2]\n     */\n    function intersection() {\n      var args = [],\n          argsIndex = -1,\n          argsLength = arguments.length,\n          caches = getArray(),\n          indexOf = getIndexOf(),\n          trustIndexOf = indexOf === baseIndexOf,\n          seen = getArray();\n\n      while (++argsIndex < argsLength) {\n        var value = arguments[argsIndex];\n        if (isArray(value) || isArguments(value)) {\n          args.push(value);\n          caches.push(trustIndexOf && value.length >= largeArraySize &&\n            createCache(argsIndex ? args[argsIndex] : seen));\n        }\n      }\n      var array = args[0],\n          index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      outer:\n      while (++index < length) {\n        var cache = caches[0];\n        value = array[index];\n\n        if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {\n          argsIndex = argsLength;\n          (cache || seen).push(value);\n          while (--argsIndex) {\n            cache = caches[argsIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n      }\n      while (argsLength--) {\n        cache = caches[argsLength];\n        if (cache) {\n          releaseObject(cache);\n        }\n      }\n      releaseArray(caches);\n      releaseArray(seen);\n      return result;\n    }\n\n    /**\n     * Gets the last element or last `n` elements of an array. If a callback is\n     * provided elements at the end of the array are returned as long as the\n     * callback returns truey. The callback is bound to `thisArg` and invoked\n     * with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback] The function called\n     *  per element or the number of elements to return. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {*} Returns the last element(s) of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     *\n     * _.last([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.last([1, 2, 3], function(num) {\n     *   return num > 1;\n     * });\n     * // => [2, 3]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.pluck(_.last(characters, 'blocked'), 'name');\n     * // => ['fred', 'pebbles']\n     *\n     * // using \"_.where\" callback shorthand\n     * _.last(characters, { 'employer': 'na' });\n     * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n     */\n    function last(array, callback, thisArg) {\n      var n = 0,\n          length = array ? array.length : 0;\n\n      if (typeof callback != 'number' && callback != null) {\n        var index = length;\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (index-- && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = callback;\n        if (n == null || thisArg) {\n          return array ? array[length - 1] : undefined;\n        }\n      }\n      return slice(array, nativeMax(0, length - n));\n    }\n\n    /**\n     * Gets the index at which the last occurrence of `value` is found using strict\n     * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used\n     * as the offset from the end of the collection.\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value or `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);\n     * // => 4\n     *\n     * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var index = array ? array.length : 0;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Removes all provided values from the given array using strict equality for\n     * comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to modify.\n     * @param {...*} [value] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3, 1, 2, 3];\n     * _.pull(array, 2, 3);\n     * console.log(array);\n     * // => [1, 1]\n     */\n    function pull(array) {\n      var args = arguments,\n          argsIndex = 0,\n          argsLength = args.length,\n          length = array ? array.length : 0;\n\n      while (++argsIndex < argsLength) {\n        var index = -1,\n            value = args[argsIndex];\n        while (++index < length) {\n          if (array[index] === value) {\n            splice.call(array, index--, 1);\n            length--;\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to but not including `end`. If `start` is less than `stop` a\n     * zero-length range is created unless a negative `step` is specified.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns a new range array.\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    function range(start, end, step) {\n      start = +start || 0;\n      step = typeof step == 'number' ? step : (+step || 1);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      }\n      // use `Array(length)` so engines like Chakra and V8 avoid slower modes\n      // http://youtu.be/XAqIpGU8ZZk#t=17m25s\n      var index = -1,\n          length = nativeMax(0, ceil((end - start) / (step || 1))),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * Removes all elements from an array that the callback returns truey for\n     * and returns an array of removed elements. The callback is bound to `thisArg`\n     * and invoked with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to modify.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4, 5, 6];\n     * var evens = _.remove(array, function(num) { return num % 2 == 0; });\n     *\n     * console.log(array);\n     * // => [1, 3, 5]\n     *\n     * console.log(evens);\n     * // => [2, 4, 6]\n     */\n    function remove(array, callback, thisArg) {\n      var index = -1,\n          length = array ? array.length : 0,\n          result = [];\n\n      callback = lodash.createCallback(callback, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (callback(value, index, array)) {\n          result.push(value);\n          splice.call(array, index--, 1);\n          length--;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The opposite of `_.initial` this method gets all but the first element or\n     * first `n` elements of an array. If a callback function is provided elements\n     * at the beginning of the array are excluded from the result as long as the\n     * callback returns truey. The callback is bound to `thisArg` and invoked\n     * with three arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias drop, tail\n     * @category Arrays\n     * @param {Array} array The array to query.\n     * @param {Function|Object|number|string} [callback=1] The function called\n     *  per element or the number of elements to exclude. If a property name or\n     *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n     *  style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a slice of `array`.\n     * @example\n     *\n     * _.rest([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.rest([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.rest([1, 2, 3], function(num) {\n     *   return num < 3;\n     * });\n     * // => [3]\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n     *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },\n     *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n     * ];\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.pluck(_.rest(characters, 'blocked'), 'name');\n     * // => ['fred', 'pebbles']\n     *\n     * // using \"_.where\" callback shorthand\n     * _.rest(characters, { 'employer': 'slate' });\n     * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n     */\n    function rest(array, callback, thisArg) {\n      if (typeof callback != 'number' && callback != null) {\n        var n = 0,\n            index = -1,\n            length = array ? array.length : 0;\n\n        callback = lodash.createCallback(callback, thisArg, 3);\n        while (++index < length && callback(array[index], index, array)) {\n          n++;\n        }\n      } else {\n        n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);\n      }\n      return slice(array, n);\n    }\n\n    /**\n     * Uses a binary search to determine the smallest index at which a value\n     * should be inserted into a given sorted array in order to maintain the sort\n     * order of the array. If a callback is provided it will be executed for\n     * `value` and each element of `array` to compute their sort ranking. The\n     * callback is bound to `thisArg` and invoked with one argument; (value).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([20, 30, 50], 40);\n     * // => 2\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n     * // => 2\n     *\n     * var dict = {\n     *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }\n     * };\n     *\n     * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n     *   return dict.wordToNumber[word];\n     * });\n     * // => 2\n     *\n     * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n     *   return this.wordToNumber[word];\n     * }, dict);\n     * // => 2\n     */\n    function sortedIndex(array, value, callback, thisArg) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      // explicitly reference `identity` for better inlining in Firefox\n      callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;\n      value = callback(value);\n\n      while (low < high) {\n        var mid = (low + high) >>> 1;\n        (callback(array[mid]) < value)\n          ? low = mid + 1\n          : high = mid;\n      }\n      return low;\n    }\n\n    /**\n     * Creates an array of unique values, in order, of the provided arrays using\n     * strict equality for comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of combined values.\n     * @example\n     *\n     * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n     * // => [1, 2, 3, 5, 4]\n     */\n    function union() {\n      return baseUniq(baseFlatten(arguments, true, true));\n    }\n\n    /**\n     * Creates a duplicate-value-free version of an array using strict equality\n     * for comparisons, i.e. `===`. If the array is sorted, providing\n     * `true` for `isSorted` will use a faster algorithm. If a callback is provided\n     * each element of `array` is passed through the callback before uniqueness\n     * is computed. The callback is bound to `thisArg` and invoked with three\n     * arguments; (value, index, array).\n     *\n     * If a property name is provided for `callback` the created \"_.pluck\" style\n     * callback will return the property value of the given element.\n     *\n     * If an object is provided for `callback` the created \"_.where\" style callback\n     * will return `true` for elements that have the properties of the given object,\n     * else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias unique\n     * @category Arrays\n     * @param {Array} array The array to process.\n     * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n     * @param {Function|Object|string} [callback=identity] The function called\n     *  per iteration. If a property name or object is provided it will be used\n     *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns a duplicate-value-free array.\n     * @example\n     *\n     * _.uniq([1, 2, 1, 3, 1]);\n     * // => [1, 2, 3]\n     *\n     * _.uniq([1, 1, 2, 2, 3], true);\n     * // => [1, 2, 3]\n     *\n     * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });\n     * // => ['A', 'b', 'C']\n     *\n     * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);\n     * // => [1, 2.5, 3]\n     *\n     * // using \"_.pluck\" callback shorthand\n     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniq(array, isSorted, callback, thisArg) {\n      // juggle arguments\n      if (typeof isSorted != 'boolean' && isSorted != null) {\n        thisArg = callback;\n        callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;\n        isSorted = false;\n      }\n      if (callback != null) {\n        callback = lodash.createCallback(callback, thisArg, 3);\n      }\n      return baseUniq(array, isSorted, callback);\n    }\n\n    /**\n     * Creates an array excluding all provided values using strict equality for\n     * comparisons, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {Array} array The array to filter.\n     * @param {...*} [value] The values to exclude.\n     * @returns {Array} Returns a new array of filtered values.\n     * @example\n     *\n     * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);\n     * // => [2, 3, 4]\n     */\n    function without(array) {\n      return baseDifference(array, slice(arguments, 1));\n    }\n\n    /**\n     * Creates an array that is the symmetric difference of the provided arrays.\n     * See http://en.wikipedia.org/wiki/Symmetric_difference.\n     *\n     * @static\n     * @memberOf _\n     * @category Arrays\n     * @param {...Array} [array] The arrays to inspect.\n     * @returns {Array} Returns an array of values.\n     * @example\n     *\n     * _.xor([1, 2, 3], [5, 2, 1, 4]);\n     * // => [3, 5, 4]\n     *\n     * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);\n     * // => [1, 4, 5]\n     */\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArray(array) || isArguments(array)) {\n          var result = result\n            ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))\n            : array;\n        }\n      }\n      return result || [];\n    }\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the first\n     * elements of the given arrays, the second of which contains the second\n     * elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @alias unzip\n     * @category Arrays\n     * @param {...Array} [array] Arrays to process.\n     * @returns {Array} Returns a new array of grouped elements.\n     * @example\n     *\n     * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n     * // => [['fred', 30, true], ['barney', 40, false]]\n     */\n    function zip() {\n      var array = arguments.length > 1 ? arguments : arguments[0],\n          index = -1,\n          length = array ? max(pluck(array, 'length')) : 0,\n          result = Array(length < 0 ? 0 : length);\n\n      while (++index < length) {\n        result[index] = pluck(array, index);\n      }\n      return result;\n    }\n\n    /**\n     * Creates an object composed from arrays of `keys` and `values`. Provide\n     * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`\n     * or two arrays, one of `keys` and one of corresponding `values`.\n     *\n     * @static\n     * @memberOf _\n     * @alias object\n     * @category Arrays\n     * @param {Array} keys The array of keys.\n     * @param {Array} [values=[]] The array of values.\n     * @returns {Object} Returns an object composed of the given keys and\n     *  corresponding values.\n     * @example\n     *\n     * _.zipObject(['fred', 'barney'], [30, 40]);\n     * // => { 'fred': 30, 'barney': 40 }\n     */\n    function zipObject(keys, values) {\n      var index = -1,\n          length = keys ? keys.length : 0,\n          result = {};\n\n      if (!values && length && !isArray(keys[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = keys[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a function that executes `func`, with  the `this` binding and\n     * arguments of the created function, only after being called `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {number} n The number of times the function must be called before\n     *  `func` is executed.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('Done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => logs 'Done saving!', after all saves have completed\n     */\n    function after(n, func) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that, when called, invokes `func` with the `this`\n     * binding of `thisArg` and prepends any additional `bind` arguments to those\n     * provided to the bound function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to bind.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var func = function(greeting) {\n     *   return greeting + ' ' + this.name;\n     * };\n     *\n     * func = _.bind(func, { 'name': 'fred' }, 'hi');\n     * func();\n     * // => 'hi fred'\n     */\n    function bind(func, thisArg) {\n      return arguments.length > 2\n        ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n        : createWrapper(func, 1, null, null, thisArg);\n    }\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method. Method names may be specified as individual arguments or as arrays\n     * of method names. If no method names are provided all the function properties\n     * of `object` will be bound.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...string} [methodName] The object method names to\n     *  bind, specified as individual method names or arrays of method names.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'onClick': function() { console.log('clicked ' + this.label); }\n     * };\n     *\n     * _.bindAll(view);\n     * jQuery('#docs').on('click', view.onClick);\n     * // => logs 'clicked docs', when the button is clicked\n     */\n    function bindAll(object) {\n      var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),\n          index = -1,\n          length = funcs.length;\n\n      while (++index < length) {\n        var key = funcs[index];\n        object[key] = createWrapper(object[key], 1, null, null, object);\n      }\n      return object;\n    }\n\n    /**\n     * Creates a function that, when called, invokes the method at `object[key]`\n     * and prepends any additional `bindKey` arguments to those provided to the bound\n     * function. This method differs from `_.bind` by allowing bound functions to\n     * reference methods that will be redefined or don't yet exist.\n     * See http://michaux.ca/articles/lazy-function-definition-pattern.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Object} object The object the method belongs to.\n     * @param {string} key The key of the method.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'name': 'fred',\n     *   'greet': function(greeting) {\n     *     return greeting + ' ' + this.name;\n     *   }\n     * };\n     *\n     * var func = _.bindKey(object, 'greet', 'hi');\n     * func();\n     * // => 'hi fred'\n     *\n     * object.greet = function(greeting) {\n     *   return greeting + 'ya ' + this.name + '!';\n     * };\n     *\n     * func();\n     * // => 'hiya fred!'\n     */\n    function bindKey(object, key) {\n      return arguments.length > 2\n        ? createWrapper(key, 19, slice(arguments, 2), null, object)\n        : createWrapper(key, 3, null, null, object);\n    }\n\n    /**\n     * Creates a function that is the composition of the provided functions,\n     * where each function consumes the return value of the function that follows.\n     * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.\n     * Each function is executed with the `this` binding of the composed function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {...Function} [func] Functions to compose.\n     * @returns {Function} Returns the new composed function.\n     * @example\n     *\n     * var realNameMap = {\n     *   'pebbles': 'penelope'\n     * };\n     *\n     * var format = function(name) {\n     *   name = realNameMap[name.toLowerCase()] || name;\n     *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n     * };\n     *\n     * var greet = function(formatted) {\n     *   return 'Hiya ' + formatted + '!';\n     * };\n     *\n     * var welcome = _.compose(greet, format);\n     * welcome('pebbles');\n     * // => 'Hiya Penelope!'\n     */\n    function compose() {\n      var funcs = arguments,\n          length = funcs.length;\n\n      while (length--) {\n        if (!isFunction(funcs[length])) {\n          throw new TypeError;\n        }\n      }\n      return function() {\n        var args = arguments,\n            length = funcs.length;\n\n        while (length--) {\n          args = [funcs[length].apply(this, args)];\n        }\n        return args[0];\n      };\n    }\n\n    /**\n     * Creates a function which accepts one or more arguments of `func` that when\n     * invoked either executes `func` returning its result, if all `func` arguments\n     * have been provided, or returns a function that accepts one or more of the\n     * remaining `func` arguments, and so on. The arity of `func` can be specified\n     * if `func.length` is not sufficient.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var curried = _.curry(function(a, b, c) {\n     *   console.log(a + b + c);\n     * });\n     *\n     * curried(1)(2)(3);\n     * // => 6\n     *\n     * curried(1, 2)(3);\n     * // => 6\n     *\n     * curried(1, 2, 3);\n     * // => 6\n     */\n    function curry(func, arity) {\n      arity = typeof arity == 'number' ? arity : (+arity || func.length);\n      return createWrapper(func, 4, null, null, null, arity);\n    }\n\n    /**\n     * Creates a function that will delay the execution of `func` until after\n     * `wait` milliseconds have elapsed since the last time it was invoked.\n     * Provide an options object to indicate that `func` should be invoked on\n     * the leading and/or trailing edge of the `wait` timeout. Subsequent calls\n     * to the debounced function will return the result of the last `func` call.\n     *\n     * Note: If `leading` and `trailing` options are `true` `func` will be called\n     * on the trailing edge of the timeout only if the the debounced function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to debounce.\n     * @param {number} wait The number of milliseconds to delay.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.\n     * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.\n     * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // avoid costly calculations while the window size is in flux\n     * var lazyLayout = _.debounce(calculateLayout, 150);\n     * jQuery(window).on('resize', lazyLayout);\n     *\n     * // execute `sendMail` when the click event is fired, debouncing subsequent calls\n     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * });\n     *\n     * // ensure `batchLog` is executed once after 1 second of debounced calls\n     * var source = new EventSource('/stream');\n     * source.addEventListener('message', _.debounce(batchLog, 250, {\n     *   'maxWait': 1000\n     * }, false);\n     */\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      wait = nativeMax(0, wait) || 0;\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = options.leading;\n        maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);\n        trailing = 'trailing' in options ? options.trailing : trailing;\n      }\n      var delayed = function() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0) {\n          if (maxTimeoutId) {\n            clearTimeout(maxTimeoutId);\n          }\n          var isCalled = trailingCall;\n          maxTimeoutId = timeoutId = trailingCall = undefined;\n          if (isCalled) {\n            lastCalled = now();\n            result = func.apply(thisArg, args);\n            if (!timeoutId && !maxTimeoutId) {\n              args = thisArg = null;\n            }\n          }\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      };\n\n      var maxDelayed = function() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (trailing || (maxWait !== wait)) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = null;\n          }\n        }\n      };\n\n      return function() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = null;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Defers executing the `func` function until the current call stack has cleared.\n     * Additional arguments will be provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to defer.\n     * @param {...*} [arg] Arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) { console.log(text); }, 'deferred');\n     * // logs 'deferred' after one or more milliseconds\n     */\n    function defer(func) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var args = slice(arguments, 1);\n      return setTimeout(function() { func.apply(undefined, args); }, 1);\n    }\n\n    /**\n     * Executes the `func` function after `wait` milliseconds. Additional arguments\n     * will be provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay execution.\n     * @param {...*} [arg] Arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) { console.log(text); }, 1000, 'later');\n     * // => logs 'later' after one second\n     */\n    function delay(func, wait) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var args = slice(arguments, 2);\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided it will be used to determine the cache key for storing the result\n     * based on the arguments provided to the memoized function. By default, the\n     * first argument provided to the memoized function is used as the cache key.\n     * The `func` is executed with the `this` binding of the memoized function.\n     * The result cache is exposed as the `cache` property on the memoized function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] A function used to resolve the cache key.\n     * @returns {Function} Returns the new memoizing function.\n     * @example\n     *\n     * var fibonacci = _.memoize(function(n) {\n     *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);\n     * });\n     *\n     * fibonacci(9)\n     * // => 34\n     *\n     * var data = {\n     *   'fred': { 'name': 'fred', 'age': 40 },\n     *   'pebbles': { 'name': 'pebbles', 'age': 1 }\n     * };\n     *\n     * // modifying the result cache\n     * var get = _.memoize(function(name) { return data[name]; }, _.identity);\n     * get('pebbles');\n     * // => { 'name': 'pebbles', 'age': 1 }\n     *\n     * get.cache.pebbles.name = 'penelope';\n     * get('pebbles');\n     * // => { 'name': 'penelope', 'age': 1 }\n     */\n    function memoize(func, resolver) {\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      var memoized = function() {\n        var cache = memoized.cache,\n            key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];\n\n        return hasOwnProperty.call(cache, key)\n          ? cache[key]\n          : (cache[key] = func.apply(this, arguments));\n      }\n      memoized.cache = {};\n      return memoized;\n    }\n\n    /**\n     * Creates a function that is restricted to execute `func` once. Repeat calls to\n     * the function will return the value of the first call. The `func` is executed\n     * with the `this` binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // `initialize` executes `createApplication` once\n     */\n    function once(func) {\n      var ran,\n          result;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      return function() {\n        if (ran) {\n          return result;\n        }\n        ran = true;\n        result = func.apply(this, arguments);\n\n        // clear the `func` variable so the function may be garbage collected\n        func = null;\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that, when called, invokes `func` with any additional\n     * `partial` arguments prepended to those provided to the new function. This\n     * method is similar to `_.bind` except it does **not** alter the `this` binding.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var greet = function(greeting, name) { return greeting + ' ' + name; };\n     * var hi = _.partial(greet, 'hi');\n     * hi('fred');\n     * // => 'hi fred'\n     */\n    function partial(func) {\n      return createWrapper(func, 16, slice(arguments, 1));\n    }\n\n    /**\n     * This method is like `_.partial` except that `partial` arguments are\n     * appended to those provided to the new function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [arg] Arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var defaultsDeep = _.partialRight(_.merge, _.defaults);\n     *\n     * var options = {\n     *   'variable': 'data',\n     *   'imports': { 'jq': $ }\n     * };\n     *\n     * defaultsDeep(options, _.templateSettings);\n     *\n     * options.variable\n     * // => 'data'\n     *\n     * options.imports\n     * // => { '_': _, 'jq': $ }\n     */\n    function partialRight(func) {\n      return createWrapper(func, 32, null, slice(arguments, 1));\n    }\n\n    /**\n     * Creates a function that, when executed, will only call the `func` function\n     * at most once per every `wait` milliseconds. Provide an options object to\n     * indicate that `func` should be invoked on the leading and/or trailing edge\n     * of the `wait` timeout. Subsequent calls to the throttled function will\n     * return the result of the last `func` call.\n     *\n     * Note: If `leading` and `trailing` options are `true` `func` will be called\n     * on the trailing edge of the timeout only if the the throttled function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {Function} func The function to throttle.\n     * @param {number} wait The number of milliseconds to throttle executions to.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // avoid excessively updating the position while scrolling\n     * var throttled = _.throttle(updatePosition, 100);\n     * jQuery(window).on('scroll', throttled);\n     *\n     * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes\n     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n     *   'trailing': false\n     * }));\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (!isFunction(func)) {\n        throw new TypeError;\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? options.leading : leading;\n        trailing = 'trailing' in options ? options.trailing : trailing;\n      }\n      debounceOptions.leading = leading;\n      debounceOptions.maxWait = wait;\n      debounceOptions.trailing = trailing;\n\n      return debounce(func, wait, debounceOptions);\n    }\n\n    /**\n     * Creates a function that provides `value` to the wrapper function as its\n     * first argument. Additional arguments provided to the function are appended\n     * to those provided to the wrapper function. The wrapper is executed with\n     * the `this` binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Functions\n     * @param {*} value The value to wrap.\n     * @param {Function} wrapper The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('Fred, Wilma, & Pebbles');\n     * // => '<p>Fred, Wilma, &amp; Pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return createWrapper(wrapper, 16, [value]);\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * var getter = _.constant(object);\n     * getter() === object;\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Produces a callback bound to an optional `thisArg`. If `func` is a property\n     * name the created callback will return the property value for a given element.\n     * If `func` is an object the created callback will return `true` for elements\n     * that contain the equivalent object properties, otherwise it will return `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} [func=identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of the created callback.\n     * @param {number} [argCount] The number of arguments the callback accepts.\n     * @returns {Function} Returns a callback function.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // wrap to create custom callback shorthands\n     * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {\n     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);\n     *   return !match ? func(callback, thisArg) : function(object) {\n     *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];\n     *   };\n     * });\n     *\n     * _.filter(characters, 'age__gt38');\n     * // => [{ 'name': 'fred', 'age': 40 }]\n     */\n    function createCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (func == null || type == 'function') {\n        return baseCreateCallback(func, thisArg, argCount);\n      }\n      // handle \"_.pluck\" style callback shorthands\n      if (type != 'object') {\n        return property(func);\n      }\n      var props = keys(func),\n          key = props[0],\n          a = func[key];\n\n      // handle \"_.where\" style callback shorthands\n      if (props.length == 1 && a === a && !isObject(a)) {\n        // fast path the common case of providing an object with a single\n        // property containing a primitive value\n        return function(object) {\n          var b = object[key];\n          return a === b && (a !== 0 || (1 / a == 1 / b));\n        };\n      }\n      return function(object) {\n        var length = props.length,\n            result = false;\n\n        while (length--) {\n          if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {\n            break;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Converts the characters `&`, `<`, `>`, `\"`, and `'` in `string` to their\n     * corresponding HTML entities.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} string The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('Fred, Wilma, & Pebbles');\n     * // => 'Fred, Wilma, &amp; Pebbles'\n     */\n    function escape(string) {\n      return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);\n    }\n\n    /**\n     * This method returns the first argument provided to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * _.identity(object) === object;\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Adds function properties of a source object to the destination object.\n     * If `object` is a function methods will be added to its prototype as well.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {Function|Object} [object=lodash] object The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.\n     * @example\n     *\n     * function capitalize(string) {\n     *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n     * }\n     *\n     * _.mixin({ 'capitalize': capitalize });\n     * _.capitalize('fred');\n     * // => 'Fred'\n     *\n     * _('fred').capitalize().value();\n     * // => 'Fred'\n     *\n     * _.mixin({ 'capitalize': capitalize }, { 'chain': false });\n     * _('fred').capitalize();\n     * // => 'Fred'\n     */\n    function mixin(object, source, options) {\n      var chain = true,\n          methodNames = source && functions(source);\n\n      if (!source || (!options && !methodNames.length)) {\n        if (options == null) {\n          options = source;\n        }\n        ctor = lodashWrapper;\n        source = object;\n        object = lodash;\n        methodNames = functions(source);\n      }\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      var ctor = object,\n          isFunc = isFunction(ctor);\n\n      forEach(methodNames, function(methodName) {\n        var func = object[methodName] = source[methodName];\n        if (isFunc) {\n          ctor.prototype[methodName] = function() {\n            var chainAll = this.__chain__,\n                value = this.__wrapped__,\n                args = [value];\n\n            push.apply(args, arguments);\n            var result = func.apply(object, args);\n            if (chain || chainAll) {\n              if (value === result && isObject(result)) {\n                return this;\n              }\n              result = new ctor(result);\n              result.__chain__ = chainAll;\n            }\n            return result;\n          };\n        }\n      });\n    }\n\n    /**\n     * Reverts the '_' variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      context._ = oldDash;\n      return this;\n    }\n\n    /**\n     * A no-operation function.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @example\n     *\n     * var object = { 'name': 'fred' };\n     * _.noop(object) === undefined;\n     * // => true\n     */\n    function noop() {\n      // no operation performed\n    }\n\n    /**\n     * Gets the number of milliseconds that have elapsed since the Unix epoch\n     * (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @example\n     *\n     * var stamp = _.now();\n     * _.defer(function() { console.log(_.now() - stamp); });\n     * // => logs the number of milliseconds it took for the deferred function to be called\n     */\n    var now = isNative(now = Date.now) && now || function() {\n      return new Date().getTime();\n    };\n\n    /**\n     * Converts the given value into an integer of the specified radix.\n     * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the\n     * `value` is a hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * Note: This method avoids differences in native ES3 and ES5 `parseInt`\n     * implementations. See http://es5.github.io/#E.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} value The value to parse.\n     * @param {number} [radix] The radix used to interpret the value to parse.\n     * @returns {number} Returns the new integer value.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     */\n    var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {\n      // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`\n      return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);\n    };\n\n    /**\n     * Creates a \"_.pluck\" style function, which returns the `key` value of a\n     * given object.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} key The name of the property to retrieve.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'fred',   'age': 40 },\n     *   { 'name': 'barney', 'age': 36 }\n     * ];\n     *\n     * var getName = _.property('name');\n     *\n     * _.map(characters, getName);\n     * // => ['barney', 'fred']\n     *\n     * _.sortBy(characters, getName);\n     * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]\n     */\n    function property(key) {\n      return function(object) {\n        return object[key];\n      };\n    }\n\n    /**\n     * Produces a random number between `min` and `max` (inclusive). If only one\n     * argument is provided a number between `0` and the given number will be\n     * returned. If `floating` is truey or either `min` or `max` are floats a\n     * floating-point number will be returned instead of an integer.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {number} [min=0] The minimum possible value.\n     * @param {number} [max=1] The maximum possible value.\n     * @param {boolean} [floating=false] Specify returning a floating-point number.\n     * @returns {number} Returns a random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(min, max, floating) {\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (typeof min == 'boolean' && noMax) {\n          floating = min;\n          min = 1;\n        }\n        else if (!noMax && typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n\n    /**\n     * Resolves the value of property `key` on `object`. If `key` is a function\n     * it will be invoked with the `this` binding of `object` and its result returned,\n     * else the property value is returned. If `object` is falsey then `undefined`\n     * is returned.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {Object} object The object to inspect.\n     * @param {string} key The name of the property to resolve.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = {\n     *   'cheese': 'crumpets',\n     *   'stuff': function() {\n     *     return 'nonsense';\n     *   }\n     * };\n     *\n     * _.result(object, 'cheese');\n     * // => 'crumpets'\n     *\n     * _.result(object, 'stuff');\n     * // => 'nonsense'\n     */\n    function result(object, key) {\n      if (object) {\n        var value = object[key];\n        return isFunction(value) ? object[key]() : value;\n      }\n    }\n\n    /**\n     * A micro-templating method that handles arbitrary delimiters, preserves\n     * whitespace, and correctly escapes quotes within interpolated code.\n     *\n     * Note: In the development build, `_.template` utilizes sourceURLs for easier\n     * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n     *\n     * For more information on precompiling templates see:\n     * http://lodash.com/custom-builds\n     *\n     * For more information on Chrome extension sandboxes see:\n     * http://developer.chrome.com/stable/extensions/sandboxingEval.html\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} text The template text.\n     * @param {Object} data The data object used to populate the text.\n     * @param {Object} [options] The options object.\n     * @param {RegExp} [options.escape] The \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n     * @param {Object} [options.imports] An object to import into the template as local variables.\n     * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n     * @param {string} [sourceURL] The sourceURL of the template's compiled source.\n     * @param {string} [variable] The data object variable name.\n     * @returns {Function|string} Returns a compiled function when no `data` object\n     *  is given, else it returns the interpolated text.\n     * @example\n     *\n     * // using the \"interpolate\" delimiter to create a compiled template\n     * var compiled = _.template('hello <%= name %>');\n     * compiled({ 'name': 'fred' });\n     * // => 'hello fred'\n     *\n     * // using the \"escape\" delimiter to escape HTML in data property values\n     * _.template('<b><%- value %></b>', { 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // using the \"evaluate\" delimiter to generate HTML\n     * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';\n     * _.template(list, { 'people': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the ES6 delimiter as an alternative to the default \"interpolate\" delimiter\n     * _.template('hello ${ name }', { 'name': 'pebbles' });\n     * // => 'hello pebbles'\n     *\n     * // using the internal `print` function in \"evaluate\" delimiters\n     * _.template('<% print(\"hello \" + name); %>!', { 'name': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // using a custom template delimiters\n     * _.templateSettings = {\n     *   'interpolate': /{{([\\s\\S]+?)}}/g\n     * };\n     *\n     * _.template('hello {{ name }}!', { 'name': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // using the `imports` option to import jQuery\n     * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';\n     * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the `sourceURL` option to specify a custom sourceURL for the template\n     * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector\n     *\n     * // using the `variable` option to ensure a with-statement isn't used in the compiled template\n     * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     *   var __t, __p = '', __e = _.escape;\n     *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';\n     *   return __p;\n     * }\n     *\n     * // using the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and a stack trace\n     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(text, data, options) {\n      // based on John Resig's `tmpl` implementation\n      // http://ejohn.org/blog/javascript-micro-templating/\n      // and Laura Doktorova's doT.js\n      // https://github.com/olado/doT\n      var settings = lodash.templateSettings;\n      text = String(text || '');\n\n      // avoid missing dependencies when `iteratorTemplate` is not defined\n      options = defaults({}, options, settings);\n\n      var imports = defaults({}, options.imports, settings.imports),\n          importsKeys = keys(imports),\n          importsValues = values(imports);\n\n      var isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // compile the regexp to match each delimiter\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // escape characters that cannot be included in string literals\n        source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // replace delimiters with snippets\n        if (escapeValue) {\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // the JS engine embedded in Adobe products requires returning the `match`\n        // string in order to produce the correct `offset` value\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // if `variable` is not specified, wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain\n      var variable = options.variable,\n          hasVariable = variable;\n\n      if (!hasVariable) {\n        variable = 'obj';\n        source = 'with (' + variable + ') {\\n' + source + '\\n}\\n';\n      }\n      // cleanup code by stripping empty strings\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // frame code as the function body\n      source = 'function(' + variable + ') {\\n' +\n        (hasVariable ? '' : variable + ' || (' + variable + ' = {});\\n') +\n        \"var __t, __p = '', __e = _.escape\" +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      // Use a sourceURL for easier debugging.\n      // http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n      var sourceURL = '\\n/*\\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\\n*/';\n\n      try {\n        var result = Function(importsKeys, 'return ' + source + sourceURL).apply(undefined, importsValues);\n      } catch(e) {\n        e.source = source;\n        throw e;\n      }\n      if (data) {\n        return result(data);\n      }\n      // provide the compiled function's source by its `toString` method, in\n      // supported environments, or the `source` property as a convenience for\n      // inlining compiled templates during the build process\n      result.source = source;\n      return result;\n    }\n\n    /**\n     * Executes the callback `n` times, returning an array of the results\n     * of each callback execution. The callback is bound to `thisArg` and invoked\n     * with one argument; (index).\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {number} n The number of times to execute the callback.\n     * @param {Function} callback The function called per iteration.\n     * @param {*} [thisArg] The `this` binding of `callback`.\n     * @returns {Array} Returns an array of the results of each `callback` execution.\n     * @example\n     *\n     * var diceRolls = _.times(3, _.partial(_.random, 1, 6));\n     * // => [3, 6, 4]\n     *\n     * _.times(3, function(n) { mage.castSpell(n); });\n     * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively\n     *\n     * _.times(3, function(n) { this.cast(n); }, mage);\n     * // => also calls `mage.castSpell(n)` three times\n     */\n    function times(n, callback, thisArg) {\n      n = (n = +n) > -1 ? n : 0;\n      var index = -1,\n          result = Array(n);\n\n      callback = baseCreateCallback(callback, thisArg, 1);\n      while (++index < n) {\n        result[index] = callback(index);\n      }\n      return result;\n    }\n\n    /**\n     * The inverse of `_.escape` this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their\n     * corresponding characters.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} string The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('Fred, Barney &amp; Pebbles');\n     * // => 'Fred, Barney & Pebbles'\n     */\n    function unescape(string) {\n      return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is provided the ID will be appended to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utilities\n     * @param {string} [prefix] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return String(prefix == null ? '' : prefix) + id;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object that wraps the given value with explicit\n     * method chaining enabled.\n     *\n     * @static\n     * @memberOf _\n     * @category Chaining\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney',  'age': 36 },\n     *   { 'name': 'fred',    'age': 40 },\n     *   { 'name': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _.chain(characters)\n     *     .sortBy('age')\n     *     .map(function(chr) { return chr.name + ' is ' + chr.age; })\n     *     .first()\n     *     .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      value = new lodashWrapper(value);\n      value.__chain__ = true;\n      return value;\n    }\n\n    /**\n     * Invokes `interceptor` with the `value` as the first argument and then\n     * returns `value`. The purpose of this method is to \"tap into\" a method\n     * chain in order to perform operations on intermediate results within\n     * the chain.\n     *\n     * @static\n     * @memberOf _\n     * @category Chaining\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3, 4])\n     *  .tap(function(array) { array.pop(); })\n     *  .reverse()\n     *  .value();\n     * // => [3, 2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * Enables explicit method chaining on the wrapper object.\n     *\n     * @name chain\n     * @memberOf _\n     * @category Chaining\n     * @returns {*} Returns the wrapper object.\n     * @example\n     *\n     * var characters = [\n     *   { 'name': 'barney', 'age': 36 },\n     *   { 'name': 'fred',   'age': 40 }\n     * ];\n     *\n     * // without explicit chaining\n     * _(characters).first();\n     * // => { 'name': 'barney', 'age': 36 }\n     *\n     * // with explicit chaining\n     * _(characters).chain()\n     *   .first()\n     *   .pick('age')\n     *   .value();\n     * // => { 'age': 36 }\n     */\n    function wrapperChain() {\n      this.__chain__ = true;\n      return this;\n    }\n\n    /**\n     * Produces the `toString` result of the wrapped value.\n     *\n     * @name toString\n     * @memberOf _\n     * @category Chaining\n     * @returns {string} Returns the string result.\n     * @example\n     *\n     * _([1, 2, 3]).toString();\n     * // => '1,2,3'\n     */\n    function wrapperToString() {\n      return String(this.__wrapped__);\n    }\n\n    /**\n     * Extracts the wrapped value.\n     *\n     * @name valueOf\n     * @memberOf _\n     * @alias value\n     * @category Chaining\n     * @returns {*} Returns the wrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).valueOf();\n     * // => [1, 2, 3]\n     */\n    function wrapperValueOf() {\n      return this.__wrapped__;\n    }\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions that return wrapped values when chaining\n    lodash.after = after;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.chain = chain;\n    lodash.compact = compact;\n    lodash.compose = compose;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.createCallback = createCallback;\n    lodash.curry = curry;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.map = map;\n    lodash.mapValues = mapValues;\n    lodash.max = max;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.min = min;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.pull = pull;\n    lodash.range = range;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.shuffle = shuffle;\n    lodash.sortBy = sortBy;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.values = values;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n\n    // add aliases\n    lodash.collect = map;\n    lodash.drop = rest;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n    lodash.unzip = zip;\n\n    // add functions to `lodash.prototype`\n    mixin(lodash);\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions that return unwrapped values when chaining\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.contains = contains;\n    lodash.escape = escape;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.indexOf = indexOf;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isNaN = isNaN;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isUndefined = isUndefined;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.mixin = mixin;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.result = result;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.template = template;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n\n    // add aliases\n    lodash.all = every;\n    lodash.any = some;\n    lodash.detect = find;\n    lodash.findWhere = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.include = contains;\n    lodash.inject = reduce;\n\n    mixin(function() {\n      var source = {}\n      forOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }(), false);\n\n    /*--------------------------------------------------------------------------*/\n\n    // add functions capable of returning wrapped and unwrapped values when chaining\n    lodash.first = first;\n    lodash.last = last;\n    lodash.sample = sample;\n\n    // add aliases\n    lodash.take = first;\n    lodash.head = first;\n\n    forOwn(lodash, function(func, methodName) {\n      var callbackable = methodName !== 'sample';\n      if (!lodash.prototype[methodName]) {\n        lodash.prototype[methodName]= function(n, guard) {\n          var chainAll = this.__chain__,\n              result = func(this.__wrapped__, n, guard);\n\n          return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))\n            ? result\n            : new lodashWrapper(result, chainAll);\n        };\n      }\n    });\n\n    /*--------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type string\n     */\n    lodash.VERSION = '2.4.1';\n\n    // add \"Chaining\" functions to the wrapper\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.value = wrapperValueOf;\n    lodash.prototype.valueOf = wrapperValueOf;\n\n    // add `Array` functions that return unwrapped values\n    forEach(['join', 'pop', 'shift'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        var chainAll = this.__chain__,\n            result = func.apply(this.__wrapped__, arguments);\n\n        return chainAll\n          ? new lodashWrapper(result, chainAll)\n          : result;\n      };\n    });\n\n    // add `Array` functions that return the existing wrapped value\n    forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        func.apply(this.__wrapped__, arguments);\n        return this;\n      };\n    });\n\n    // add `Array` functions that return new wrapped values\n    forEach(['concat', 'slice', 'splice'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);\n      };\n    });\n\n    return lodash;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  // expose Lo-Dash\n  var _ = runInContext();\n\n  // some AMD build optimizers like r.js check for condition patterns like the following:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lo-Dash to the global object even when an AMD loader is present in\n    // case Lo-Dash is loaded with a RequireJS shim config.\n    // See http://requirejs.org/docs/api.html#config-shim\n    root._ = _;\n\n    // define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module\n    define(function() {\n      return _;\n    });\n  }\n  // check for `exports` after `define` in case a build optimizer adds an `exports` object\n  else if (freeExports && freeModule) {\n    // in Node.js or RingoJS\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    // in Narwhal or Rhino -require\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    // in a browser or Rhino\n    root._ = _;\n  }\n}.call(this));\n"
  },
  {
    "path": "client/components/lodash/dist/lodash.underscore.js",
    "content": "/**\n * @license\n * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>\n * Build: `lodash underscore exports=\"amd,commonjs,global,node\" -o ./dist/lodash.underscore.js`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre ES5 environments */\n  var undefined;\n\n  /** Used to generate unique IDs */\n  var idCounter = 0;\n\n  /** Used internally to indicate various things */\n  var indicatorObject = {};\n\n  /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */\n  var keyPrefix = +new Date + '';\n\n  /** Used to match \"interpolate\" template delimiters */\n  var reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to ensure capturing order of template delimiters */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals */\n  var reUnescapedString = /['\\n\\r\\t\\u2028\\u2029\\\\]/g;\n\n  /** `Object#toString` result shortcuts */\n  var argsClass = '[object Arguments]',\n      arrayClass = '[object Array]',\n      boolClass = '[object Boolean]',\n      dateClass = '[object Date]',\n      funcClass = '[object Function]',\n      numberClass = '[object Number]',\n      objectClass = '[object Object]',\n      regexpClass = '[object RegExp]',\n      stringClass = '[object String]';\n\n  /** Used to determine if values are of the language type Object */\n  var objectTypes = {\n    'boolean': false,\n    'function': true,\n    'object': true,\n    'number': false,\n    'string': false,\n    'undefined': false\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\t': 't',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Used as a reference to the global object */\n  var root = (objectTypes[typeof window] && window) || this;\n\n  /** Detect free variable `exports` */\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module` */\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports` */\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */\n  var freeGlobal = objectTypes[typeof global] && global;\n  if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * The base implementation of `_.indexOf` without support for binary searches\n   * or `fromIndex` constraints.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {number} [fromIndex=0] The index to search from.\n   * @returns {number} Returns the index of the matched value or `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    var index = (fromIndex || 0) - 1,\n        length = array ? array.length : 0;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * Used by `sortBy` to compare transformed `collection` elements, stable sorting\n   * them in ascending order.\n   *\n   * @private\n   * @param {Object} a The object to compare to `b`.\n   * @param {Object} b The object to compare to `a`.\n   * @returns {number} Returns the sort order indicator of `1` or `-1`.\n   */\n  function compareAscending(a, b) {\n    var ac = a.criteria,\n        bc = b.criteria,\n        index = -1,\n        length = ac.length;\n\n    while (++index < length) {\n      var value = ac[index],\n          other = bc[index];\n\n      if (value !== other) {\n        if (value > other || typeof value == 'undefined') {\n          return 1;\n        }\n        if (value < other || typeof other == 'undefined') {\n          return -1;\n        }\n      }\n    }\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n    // that causes it, under certain circumstances, to return the same value for\n    // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247\n    //\n    // This also ensures a stable sort in V8 and other engines.\n    // See http://code.google.com/p/v8/issues/detail?id=90\n    return a.index - b.index;\n  }\n\n  /**\n   * Used by `template` to escape characters for inclusion in compiled\n   * string literals.\n   *\n   * @private\n   * @param {string} match The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(match) {\n    return '\\\\' + stringEscapes[match];\n  }\n\n  /**\n   * Slices the `collection` from the `start` index up to, but not including,\n   * the `end` index.\n   *\n   * Note: This function is used instead of `Array#slice` to support node lists\n   * in IE < 9 and to ensure dense arrays are returned.\n   *\n   * @private\n   * @param {Array|Object|string} collection The collection to slice.\n   * @param {number} start The start index.\n   * @param {number} end The end index.\n   * @returns {Array} Returns the new array.\n   */\n  function slice(array, start, end) {\n    start || (start = 0);\n    if (typeof end == 'undefined') {\n      end = array ? array.length : 0;\n    }\n    var index = -1,\n        length = end - start || 0,\n        result = Array(length < 0 ? 0 : length);\n\n    while (++index < length) {\n      result[index] = array[start + index];\n    }\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Used for `Array` method references.\n   *\n   * Normally `Array.prototype` would suffice, however, using an array literal\n   * avoids issues in Narwhal.\n   */\n  var arrayRef = [];\n\n  /** Used for native method references */\n  var objectProto = Object.prototype;\n\n  /** Used to restore the original `_` reference in `noConflict` */\n  var oldDash = root._;\n\n  /** Used to resolve the internal [[Class]] of values */\n  var toString = objectProto.toString;\n\n  /** Used to detect if a method is native */\n  var reNative = RegExp('^' +\n    String(toString)\n      .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n      .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n  );\n\n  /** Native method shortcuts */\n  var ceil = Math.ceil,\n      floor = Math.floor,\n      hasOwnProperty = objectProto.hasOwnProperty,\n      push = arrayRef.push,\n      propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n  /* Native method shortcuts for methods with the same name as other `lodash` methods */\n  var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,\n      nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n      nativeIsFinite = root.isFinite,\n      nativeIsNaN = root.isNaN,\n      nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n      nativeMax = Math.max,\n      nativeMin = Math.min,\n      nativeRandom = Math.random;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Creates a `lodash` object which wraps the given value to enable intuitive\n   * method chaining.\n   *\n   * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:\n   * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,\n   * and `unshift`\n   *\n   * Chaining is supported in custom builds as long as the `value` method is\n   * implicitly or explicitly included in the build.\n   *\n   * The chainable wrapper functions are:\n   * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,\n   * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,\n   * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,\n   * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\n   * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\n   * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,\n   * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,\n   * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,\n   * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,\n   * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,\n   * and `zip`\n   *\n   * The non-chainable wrapper functions are:\n   * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,\n   * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,\n   * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\n   * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,\n   * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,\n   * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,\n   * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,\n   * `template`, `unescape`, `uniqueId`, and `value`\n   *\n   * The wrapper functions `first` and `last` return wrapped values when `n` is\n   * provided, otherwise they return unwrapped values.\n   *\n   * Explicit chaining can be enabled by using the `_.chain` method.\n   *\n   * @name _\n   * @constructor\n   * @category Chaining\n   * @param {*} value The value to wrap in a `lodash` instance.\n   * @returns {Object} Returns a `lodash` instance.\n   * @example\n   *\n   * var wrapped = _([1, 2, 3]);\n   *\n   * // returns an unwrapped value\n   * wrapped.reduce(function(sum, num) {\n   *   return sum + num;\n   * });\n   * // => 6\n   *\n   * // returns a wrapped value\n   * var squares = wrapped.map(function(num) {\n   *   return num * num;\n   * });\n   *\n   * _.isArray(squares);\n   * // => false\n   *\n   * _.isArray(squares.value());\n   * // => true\n   */\n  function lodash(value) {\n    return (value instanceof lodash)\n      ? value\n      : new lodashWrapper(value);\n  }\n\n  /**\n   * A fast path for creating `lodash` wrapper objects.\n   *\n   * @private\n   * @param {*} value The value to wrap in a `lodash` instance.\n   * @param {boolean} chainAll A flag to enable chaining for all methods\n   * @returns {Object} Returns a `lodash` instance.\n   */\n  function lodashWrapper(value, chainAll) {\n    this.__chain__ = !!chainAll;\n    this.__wrapped__ = value;\n  }\n  // ensure `new lodashWrapper` is an instance of `lodash`\n  lodashWrapper.prototype = lodash.prototype;\n\n  /**\n   * An object used to flag environments features.\n   *\n   * @static\n   * @memberOf _\n   * @type Object\n   */\n  var support = {};\n\n  (function() {\n    var object = { '0': 1, 'length': 1 };\n\n    /**\n     * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.\n     *\n     * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`\n     * and `splice()` functions that fail to remove the last element, `value[0]`,\n     * of array-like objects even though the `length` property is set to `0`.\n     * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`\n     * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.\n     *\n     * @memberOf _.support\n     * @type boolean\n     */\n    support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);\n  }(1));\n\n  /**\n   * By default, the template delimiters used by Lo-Dash are similar to those in\n   * embedded Ruby (ERB). Change the following template settings to use alternative\n   * delimiters.\n   *\n   * @static\n   * @memberOf _\n   * @type Object\n   */\n  lodash.templateSettings = {\n\n    /**\n     * Used to detect `data` property values to be HTML-escaped.\n     *\n     * @memberOf _.templateSettings\n     * @type RegExp\n     */\n    'escape': /<%-([\\s\\S]+?)%>/g,\n\n    /**\n     * Used to detect code to be evaluated.\n     *\n     * @memberOf _.templateSettings\n     * @type RegExp\n     */\n    'evaluate': /<%([\\s\\S]+?)%>/g,\n\n    /**\n     * Used to detect `data` property values to inject.\n     *\n     * @memberOf _.templateSettings\n     * @type RegExp\n     */\n    'interpolate': reInterpolate,\n\n    /**\n     * Used to reference the data object in the template text.\n     *\n     * @memberOf _.templateSettings\n     * @type string\n     */\n    'variable': ''\n  };\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * The base implementation of `_.bind` that creates the bound function and\n   * sets its meta data.\n   *\n   * @private\n   * @param {Array} bindData The bind data array.\n   * @returns {Function} Returns the new bound function.\n   */\n  function baseBind(bindData) {\n    var func = bindData[0],\n        partialArgs = bindData[2],\n        thisArg = bindData[4];\n\n    function bound() {\n      // `Function#bind` spec\n      // http://es5.github.io/#x15.3.4.5\n      if (partialArgs) {\n        // avoid `arguments` object deoptimizations by using `slice` instead\n        // of `Array.prototype.slice.call` and not assigning `arguments` to a\n        // variable as a ternary expression\n        var args = slice(partialArgs);\n        push.apply(args, arguments);\n      }\n      // mimic the constructor's `return` behavior\n      // http://es5.github.io/#x13.2.2\n      if (this instanceof bound) {\n        // ensure `new bound` is an instance of `func`\n        var thisBinding = baseCreate(func.prototype),\n            result = func.apply(thisBinding, args || arguments);\n        return isObject(result) ? result : thisBinding;\n      }\n      return func.apply(thisArg, args || arguments);\n    }\n    return bound;\n  }\n\n  /**\n   * The base implementation of `_.create` without support for assigning\n   * properties to the created object.\n   *\n   * @private\n   * @param {Object} prototype The object to inherit from.\n   * @returns {Object} Returns the new object.\n   */\n  function baseCreate(prototype, properties) {\n    return isObject(prototype) ? nativeCreate(prototype) : {};\n  }\n  // fallback for browsers without `Object.create`\n  if (!nativeCreate) {\n    baseCreate = (function() {\n      function Object() {}\n      return function(prototype) {\n        if (isObject(prototype)) {\n          Object.prototype = prototype;\n          var result = new Object;\n          Object.prototype = null;\n        }\n        return result || root.Object();\n      };\n    }());\n  }\n\n  /**\n   * The base implementation of `_.createCallback` without support for creating\n   * \"_.pluck\" or \"_.where\" style callbacks.\n   *\n   * @private\n   * @param {*} [func=identity] The value to convert to a callback.\n   * @param {*} [thisArg] The `this` binding of the created callback.\n   * @param {number} [argCount] The number of arguments the callback accepts.\n   * @returns {Function} Returns a callback function.\n   */\n  function baseCreateCallback(func, thisArg, argCount) {\n    if (typeof func != 'function') {\n      return identity;\n    }\n    // exit early for no `thisArg` or already bound by `Function#bind`\n    if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n      return func;\n    }\n    switch (argCount) {\n      case 1: return function(value) {\n        return func.call(thisArg, value);\n      };\n      case 2: return function(a, b) {\n        return func.call(thisArg, a, b);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(thisArg, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(thisArg, accumulator, value, index, collection);\n      };\n    }\n    return bind(func, thisArg);\n  }\n\n  /**\n   * The base implementation of `createWrapper` that creates the wrapper and\n   * sets its meta data.\n   *\n   * @private\n   * @param {Array} bindData The bind data array.\n   * @returns {Function} Returns the new function.\n   */\n  function baseCreateWrapper(bindData) {\n    var func = bindData[0],\n        bitmask = bindData[1],\n        partialArgs = bindData[2],\n        partialRightArgs = bindData[3],\n        thisArg = bindData[4],\n        arity = bindData[5];\n\n    var isBind = bitmask & 1,\n        isBindKey = bitmask & 2,\n        isCurry = bitmask & 4,\n        isCurryBound = bitmask & 8,\n        key = func;\n\n    function bound() {\n      var thisBinding = isBind ? thisArg : this;\n      if (partialArgs) {\n        var args = slice(partialArgs);\n        push.apply(args, arguments);\n      }\n      if (partialRightArgs || isCurry) {\n        args || (args = slice(arguments));\n        if (partialRightArgs) {\n          push.apply(args, partialRightArgs);\n        }\n        if (isCurry && args.length < arity) {\n          bitmask |= 16 & ~32;\n          return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n        }\n      }\n      args || (args = arguments);\n      if (isBindKey) {\n        func = thisBinding[key];\n      }\n      if (this instanceof bound) {\n        thisBinding = baseCreate(func.prototype);\n        var result = func.apply(thisBinding, args);\n        return isObject(result) ? result : thisBinding;\n      }\n      return func.apply(thisBinding, args);\n    }\n    return bound;\n  }\n\n  /**\n   * The base implementation of `_.difference` that accepts a single array\n   * of values to exclude.\n   *\n   * @private\n   * @param {Array} array The array to process.\n   * @param {Array} [values] The array of values to exclude.\n   * @returns {Array} Returns a new array of filtered values.\n   */\n  function baseDifference(array, values) {\n    var index = -1,\n        indexOf = getIndexOf(),\n        length = array ? array.length : 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (indexOf(values, value) < 0) {\n        result.push(value);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.flatten` without support for callback\n   * shorthands or `thisArg` binding.\n   *\n   * @private\n   * @param {Array} array The array to flatten.\n   * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n   * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.\n   * @param {number} [fromIndex=0] The index to start from.\n   * @returns {Array} Returns a new flattened array.\n   */\n  function baseFlatten(array, isShallow, isStrict, fromIndex) {\n    var index = (fromIndex || 0) - 1,\n        length = array ? array.length : 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n\n      if (value && typeof value == 'object' && typeof value.length == 'number'\n          && (isArray(value) || isArguments(value))) {\n        // recursively flatten arrays (susceptible to call stack limits)\n        if (!isShallow) {\n          value = baseFlatten(value, isShallow, isStrict);\n        }\n        var valIndex = -1,\n            valLength = value.length,\n            resIndex = result.length;\n\n        result.length += valLength;\n        while (++valIndex < valLength) {\n          result[resIndex++] = value[valIndex];\n        }\n      } else if (!isStrict) {\n        result.push(value);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.isEqual`, without support for `thisArg` binding,\n   * that allows partial \"_.where\" style comparisons.\n   *\n   * @private\n   * @param {*} a The value to compare.\n   * @param {*} b The other value to compare.\n   * @param {Function} [callback] The function to customize comparing values.\n   * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.\n   * @param {Array} [stackA=[]] Tracks traversed `a` objects.\n   * @param {Array} [stackB=[]] Tracks traversed `b` objects.\n   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n   */\n  function baseIsEqual(a, b, stackA, stackB) {\n    if (a === b) {\n      return a !== 0 || (1 / a == 1 / b);\n    }\n    var type = typeof a,\n        otherType = typeof b;\n\n    if (a === a &&\n        !(a && objectTypes[type]) &&\n        !(b && objectTypes[otherType])) {\n      return false;\n    }\n    if (a == null || b == null) {\n      return a === b;\n    }\n    var className = toString.call(a),\n        otherClass = toString.call(b);\n\n    if (className != otherClass) {\n      return false;\n    }\n    switch (className) {\n      case boolClass:\n      case dateClass:\n        return +a == +b;\n\n      case numberClass:\n        return a != +a\n          ? b != +b\n          : (a == 0 ? (1 / a == 1 / b) : a == +b);\n\n      case regexpClass:\n      case stringClass:\n        return a == String(b);\n    }\n    var isArr = className == arrayClass;\n    if (!isArr) {\n      var aWrapped = a instanceof lodash,\n          bWrapped = b instanceof lodash;\n\n      if (aWrapped || bWrapped) {\n        return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, stackA, stackB);\n      }\n      if (className != objectClass) {\n        return false;\n      }\n      var ctorA = a.constructor,\n          ctorB = b.constructor;\n\n      if (ctorA != ctorB &&\n            !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&\n            ('constructor' in a && 'constructor' in b)\n          ) {\n        return false;\n      }\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == a) {\n        return stackB[length] == b;\n      }\n    }\n    var result = true,\n        size = 0;\n\n    stackA.push(a);\n    stackB.push(b);\n\n    if (isArr) {\n      size = b.length;\n      result = size == a.length;\n\n      if (result) {\n        while (size--) {\n          if (!(result = baseIsEqual(a[size], b[size], stackA, stackB))) {\n            break;\n          }\n        }\n      }\n    }\n    else {\n      forIn(b, function(value, key, b) {\n        if (hasOwnProperty.call(b, key)) {\n          size++;\n          return !(result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, stackA, stackB)) && indicatorObject;\n        }\n      });\n\n      if (result) {\n        forIn(a, function(value, key, a) {\n          if (hasOwnProperty.call(a, key)) {\n            return !(result = --size > -1) && indicatorObject;\n          }\n        });\n      }\n    }\n    stackA.pop();\n    stackB.pop();\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.random` without argument juggling or support\n   * for returning floating-point numbers.\n   *\n   * @private\n   * @param {number} min The minimum possible value.\n   * @param {number} max The maximum possible value.\n   * @returns {number} Returns a random number.\n   */\n  function baseRandom(min, max) {\n    return min + floor(nativeRandom() * (max - min + 1));\n  }\n\n  /**\n   * The base implementation of `_.uniq` without support for callback shorthands\n   * or `thisArg` binding.\n   *\n   * @private\n   * @param {Array} array The array to process.\n   * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n   * @param {Function} [callback] The function called per iteration.\n   * @returns {Array} Returns a duplicate-value-free array.\n   */\n  function baseUniq(array, isSorted, callback) {\n    var index = -1,\n        indexOf = getIndexOf(),\n        length = array ? array.length : 0,\n        result = [],\n        seen = callback ? [] : result;\n\n    while (++index < length) {\n      var value = array[index],\n          computed = callback ? callback(value, index, array) : value;\n\n      if (isSorted\n            ? !index || seen[seen.length - 1] !== computed\n            : indexOf(seen, computed) < 0\n          ) {\n        if (callback) {\n          seen.push(computed);\n        }\n        result.push(value);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Creates a function that aggregates a collection, creating an object composed\n   * of keys generated from the results of running each element of the collection\n   * through a callback. The given `setter` function sets the keys and values\n   * of the composed object.\n   *\n   * @private\n   * @param {Function} setter The setter function.\n   * @returns {Function} Returns the new aggregator function.\n   */\n  function createAggregator(setter) {\n    return function(collection, callback, thisArg) {\n      var result = {};\n      callback = createCallback(callback, thisArg, 3);\n\n      var index = -1,\n          length = collection ? collection.length : 0;\n\n      if (typeof length == 'number') {\n        while (++index < length) {\n          var value = collection[index];\n          setter(result, value, callback(value, index, collection), collection);\n        }\n      } else {\n        forOwn(collection, function(value, key, collection) {\n          setter(result, value, callback(value, key, collection), collection);\n        });\n      }\n      return result;\n    };\n  }\n\n  /**\n   * Creates a function that, when called, either curries or invokes `func`\n   * with an optional `this` binding and partially applied arguments.\n   *\n   * @private\n   * @param {Function|string} func The function or method name to reference.\n   * @param {number} bitmask The bitmask of method flags to compose.\n   *  The bitmask may be composed of the following flags:\n   *  1 - `_.bind`\n   *  2 - `_.bindKey`\n   *  4 - `_.curry`\n   *  8 - `_.curry` (bound)\n   *  16 - `_.partial`\n   *  32 - `_.partialRight`\n   * @param {Array} [partialArgs] An array of arguments to prepend to those\n   *  provided to the new function.\n   * @param {Array} [partialRightArgs] An array of arguments to append to those\n   *  provided to the new function.\n   * @param {*} [thisArg] The `this` binding of `func`.\n   * @param {number} [arity] The arity of `func`.\n   * @returns {Function} Returns the new function.\n   */\n  function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n    var isBind = bitmask & 1,\n        isBindKey = bitmask & 2,\n        isCurry = bitmask & 4,\n        isCurryBound = bitmask & 8,\n        isPartial = bitmask & 16,\n        isPartialRight = bitmask & 32;\n\n    if (!isBindKey && !isFunction(func)) {\n      throw new TypeError;\n    }\n    if (isPartial && !partialArgs.length) {\n      bitmask &= ~16;\n      isPartial = partialArgs = false;\n    }\n    if (isPartialRight && !partialRightArgs.length) {\n      bitmask &= ~32;\n      isPartialRight = partialRightArgs = false;\n    }\n    // fast path for `_.bind`\n    var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n    return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n  }\n\n  /**\n   * Used by `escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} match The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeHtmlChar(match) {\n    return htmlEscapes[match];\n  }\n\n  /**\n   * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n   * customized, this method returns the custom method, otherwise it returns\n   * the `baseIndexOf` function.\n   *\n   * @private\n   * @returns {Function} Returns the \"indexOf\" function.\n   */\n  function getIndexOf() {\n    var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;\n    return result;\n  }\n\n  /**\n   * Checks if `value` is a native function.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.\n   */\n  function isNative(value) {\n    return typeof value == 'function' && reNative.test(value);\n  }\n\n  /**\n   * Used by `unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} match The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  function unescapeHtmlChar(match) {\n    return htmlUnescapes[match];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Checks if `value` is an `arguments` object.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.\n   * @example\n   *\n   * (function() { return _.isArguments(arguments); })(1, 2, 3);\n   * // => true\n   *\n   * _.isArguments([1, 2, 3]);\n   * // => false\n   */\n  function isArguments(value) {\n    return value && typeof value == 'object' && typeof value.length == 'number' &&\n      toString.call(value) == argsClass || false;\n  }\n  // fallback for browsers that can't detect `arguments` objects by [[Class]]\n  if (!isArguments(arguments)) {\n    isArguments = function(value) {\n      return value && typeof value == 'object' && typeof value.length == 'number' &&\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;\n    };\n  }\n\n  /**\n   * Checks if `value` is an array.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is an array, else `false`.\n   * @example\n   *\n   * (function() { return _.isArray(arguments); })();\n   * // => false\n   *\n   * _.isArray([1, 2, 3]);\n   * // => true\n   */\n  var isArray = nativeIsArray || function(value) {\n    return value && typeof value == 'object' && typeof value.length == 'number' &&\n      toString.call(value) == arrayClass || false;\n  };\n\n  /**\n   * A fallback implementation of `Object.keys` which produces an array of the\n   * given object's own enumerable property names.\n   *\n   * @private\n   * @type Function\n   * @param {Object} object The object to inspect.\n   * @returns {Array} Returns an array of property names.\n   */\n  var shimKeys = function(object) {\n    var index, iterable = object, result = [];\n    if (!iterable) return result;\n    if (!(objectTypes[typeof object])) return result;\n      for (index in iterable) {\n        if (hasOwnProperty.call(iterable, index)) {\n          result.push(index);\n        }\n      }\n    return result\n  };\n\n  /**\n   * Creates an array composed of the own enumerable property names of an object.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The object to inspect.\n   * @returns {Array} Returns an array of property names.\n   * @example\n   *\n   * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n   * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n   */\n  var keys = !nativeKeys ? shimKeys : function(object) {\n    if (!isObject(object)) {\n      return [];\n    }\n    return nativeKeys(object);\n  };\n\n  /**\n   * Used to convert characters to HTML entities:\n   *\n   * Though the `>` character is escaped for symmetry, characters like `>` and `/`\n   * don't require escaping in HTML and have no special meaning unless they're part\n   * of a tag or an unquoted attribute value.\n   * http://mathiasbynens.be/notes/ambiguous-ampersands (under \"semi-related fun fact\")\n   */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;'\n  };\n\n  /** Used to convert HTML entities to characters */\n  var htmlUnescapes = invert(htmlEscapes);\n\n  /** Used to match HTML entities and HTML characters */\n  var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),\n      reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Assigns own enumerable properties of source object(s) to the destination\n   * object. Subsequent sources will overwrite property assignments of previous\n   * sources. If a callback is provided it will be executed to produce the\n   * assigned values. The callback is bound to `thisArg` and invoked with two\n   * arguments; (objectValue, sourceValue).\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @alias extend\n   * @category Objects\n   * @param {Object} object The destination object.\n   * @param {...Object} [source] The source objects.\n   * @param {Function} [callback] The function to customize assigning values.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns the destination object.\n   * @example\n   *\n   * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });\n   * // => { 'name': 'fred', 'employer': 'slate' }\n   *\n   * var defaults = _.partialRight(_.assign, function(a, b) {\n   *   return typeof a == 'undefined' ? b : a;\n   * });\n   *\n   * var object = { 'name': 'barney' };\n   * defaults(object, { 'name': 'fred', 'employer': 'slate' });\n   * // => { 'name': 'barney', 'employer': 'slate' }\n   */\n  function assign(object) {\n    if (!object) {\n      return object;\n    }\n    for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) {\n      var iterable = arguments[argsIndex];\n      if (iterable) {\n        for (var key in iterable) {\n          object[key] = iterable[key];\n        }\n      }\n    }\n    return object;\n  }\n\n  /**\n   * Creates a clone of `value`. If `isDeep` is `true` nested objects will also\n   * be cloned, otherwise they will be assigned by reference. If a callback\n   * is provided it will be executed to produce the cloned values. If the\n   * callback returns `undefined` cloning will be handled by the method instead.\n   * The callback is bound to `thisArg` and invoked with one argument; (value).\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to clone.\n   * @param {boolean} [isDeep=false] Specify a deep clone.\n   * @param {Function} [callback] The function to customize cloning values.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the cloned value.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * var shallow = _.clone(characters);\n   * shallow[0] === characters[0];\n   * // => true\n   *\n   * var deep = _.clone(characters, true);\n   * deep[0] === characters[0];\n   * // => false\n   *\n   * _.mixin({\n   *   'clone': _.partialRight(_.clone, function(value) {\n   *     return _.isElement(value) ? value.cloneNode(false) : undefined;\n   *   })\n   * });\n   *\n   * var clone = _.clone(document.body);\n   * clone.childNodes.length;\n   * // => 0\n   */\n  function clone(value) {\n    return isObject(value)\n      ? (isArray(value) ? slice(value) : assign({}, value))\n      : value;\n  }\n\n  /**\n   * Assigns own enumerable properties of source object(s) to the destination\n   * object for all destination properties that resolve to `undefined`. Once a\n   * property is set, additional defaults of the same property will be ignored.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Objects\n   * @param {Object} object The destination object.\n   * @param {...Object} [source] The source objects.\n   * @param- {Object} [guard] Allows working with `_.reduce` without using its\n   *  `key` and `object` arguments as sources.\n   * @returns {Object} Returns the destination object.\n   * @example\n   *\n   * var object = { 'name': 'barney' };\n   * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });\n   * // => { 'name': 'barney', 'employer': 'slate' }\n   */\n  function defaults(object) {\n    if (!object) {\n      return object;\n    }\n    for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) {\n      var iterable = arguments[argsIndex];\n      if (iterable) {\n        for (var key in iterable) {\n          if (typeof object[key] == 'undefined') {\n            object[key] = iterable[key];\n          }\n        }\n      }\n    }\n    return object;\n  }\n\n  /**\n   * Iterates over own and inherited enumerable properties of an object,\n   * executing the callback for each property. The callback is bound to `thisArg`\n   * and invoked with three arguments; (value, key, object). Callbacks may exit\n   * iteration early by explicitly returning `false`.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Objects\n   * @param {Object} object The object to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns `object`.\n   * @example\n   *\n   * function Shape() {\n   *   this.x = 0;\n   *   this.y = 0;\n   * }\n   *\n   * Shape.prototype.move = function(x, y) {\n   *   this.x += x;\n   *   this.y += y;\n   * };\n   *\n   * _.forIn(new Shape, function(value, key) {\n   *   console.log(key);\n   * });\n   * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)\n   */\n  var forIn = function(collection, callback) {\n    var index, iterable = collection, result = iterable;\n    if (!iterable) return result;\n    if (!objectTypes[typeof iterable]) return result;\n      for (index in iterable) {\n        if (callback(iterable[index], index, collection) === indicatorObject) return result;\n      }\n    return result\n  };\n\n  /**\n   * Iterates over own enumerable properties of an object, executing the callback\n   * for each property. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, key, object). Callbacks may exit iteration early by\n   * explicitly returning `false`.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Objects\n   * @param {Object} object The object to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns `object`.\n   * @example\n   *\n   * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n   *   console.log(key);\n   * });\n   * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n   */\n  var forOwn = function(collection, callback) {\n    var index, iterable = collection, result = iterable;\n    if (!iterable) return result;\n    if (!objectTypes[typeof iterable]) return result;\n      for (index in iterable) {\n        if (hasOwnProperty.call(iterable, index)) {\n          if (callback(iterable[index], index, collection) === indicatorObject) return result;\n        }\n      }\n    return result\n  };\n\n  /**\n   * Creates a sorted array of property names of all enumerable properties,\n   * own and inherited, of `object` that have function values.\n   *\n   * @static\n   * @memberOf _\n   * @alias methods\n   * @category Objects\n   * @param {Object} object The object to inspect.\n   * @returns {Array} Returns an array of property names that have function values.\n   * @example\n   *\n   * _.functions(_);\n   * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]\n   */\n  function functions(object) {\n    var result = [];\n    forIn(object, function(value, key) {\n      if (isFunction(value)) {\n        result.push(key);\n      }\n    });\n    return result.sort();\n  }\n\n  /**\n   * Checks if the specified property name exists as a direct property of `object`,\n   * instead of an inherited property.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The object to inspect.\n   * @param {string} key The name of the property to check.\n   * @returns {boolean} Returns `true` if key is a direct property, else `false`.\n   * @example\n   *\n   * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');\n   * // => true\n   */\n  function has(object, key) {\n    return object ? hasOwnProperty.call(object, key) : false;\n  }\n\n  /**\n   * Creates an object composed of the inverted keys and values of the given object.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The object to invert.\n   * @returns {Object} Returns the created inverted object.\n   * @example\n   *\n   * _.invert({ 'first': 'fred', 'second': 'barney' });\n   * // => { 'fred': 'first', 'barney': 'second' }\n   */\n  function invert(object) {\n    var index = -1,\n        props = keys(object),\n        length = props.length,\n        result = {};\n\n    while (++index < length) {\n      var key = props[index];\n      result[object[key]] = key;\n    }\n    return result;\n  }\n\n  /**\n   * Checks if `value` is a boolean value.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.\n   * @example\n   *\n   * _.isBoolean(null);\n   * // => false\n   */\n  function isBoolean(value) {\n    return value === true || value === false ||\n      value && typeof value == 'object' && toString.call(value) == boolClass || false;\n  }\n\n  /**\n   * Checks if `value` is a date.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a date, else `false`.\n   * @example\n   *\n   * _.isDate(new Date);\n   * // => true\n   */\n  function isDate(value) {\n    return value && typeof value == 'object' && toString.call(value) == dateClass || false;\n  }\n\n  /**\n   * Checks if `value` is a DOM element.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.\n   * @example\n   *\n   * _.isElement(document.body);\n   * // => true\n   */\n  function isElement(value) {\n    return value && value.nodeType === 1 || false;\n  }\n\n  /**\n   * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a\n   * length of `0` and objects with no own enumerable properties are considered\n   * \"empty\".\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Array|Object|string} value The value to inspect.\n   * @returns {boolean} Returns `true` if the `value` is empty, else `false`.\n   * @example\n   *\n   * _.isEmpty([1, 2, 3]);\n   * // => false\n   *\n   * _.isEmpty({});\n   * // => true\n   *\n   * _.isEmpty('');\n   * // => true\n   */\n  function isEmpty(value) {\n    if (!value) {\n      return true;\n    }\n    if (isArray(value) || isString(value)) {\n      return !value.length;\n    }\n    for (var key in value) {\n      if (hasOwnProperty.call(value, key)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Performs a deep comparison between two values to determine if they are\n   * equivalent to each other. If a callback is provided it will be executed\n   * to compare values. If the callback returns `undefined` comparisons will\n   * be handled by the method instead. The callback is bound to `thisArg` and\n   * invoked with two arguments; (a, b).\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} a The value to compare.\n   * @param {*} b The other value to compare.\n   * @param {Function} [callback] The function to customize comparing values.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n   * @example\n   *\n   * var object = { 'name': 'fred' };\n   * var copy = { 'name': 'fred' };\n   *\n   * object == copy;\n   * // => false\n   *\n   * _.isEqual(object, copy);\n   * // => true\n   *\n   * var words = ['hello', 'goodbye'];\n   * var otherWords = ['hi', 'goodbye'];\n   *\n   * _.isEqual(words, otherWords, function(a, b) {\n   *   var reGreet = /^(?:hello|hi)$/i,\n   *       aGreet = _.isString(a) && reGreet.test(a),\n   *       bGreet = _.isString(b) && reGreet.test(b);\n   *\n   *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;\n   * });\n   * // => true\n   */\n  function isEqual(a, b) {\n    return baseIsEqual(a, b);\n  }\n\n  /**\n   * Checks if `value` is, or can be coerced to, a finite number.\n   *\n   * Note: This is not the same as native `isFinite` which will return true for\n   * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is finite, else `false`.\n   * @example\n   *\n   * _.isFinite(-101);\n   * // => true\n   *\n   * _.isFinite('10');\n   * // => true\n   *\n   * _.isFinite(true);\n   * // => false\n   *\n   * _.isFinite('');\n   * // => false\n   *\n   * _.isFinite(Infinity);\n   * // => false\n   */\n  function isFinite(value) {\n    return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));\n  }\n\n  /**\n   * Checks if `value` is a function.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n   * @example\n   *\n   * _.isFunction(_);\n   * // => true\n   */\n  function isFunction(value) {\n    return typeof value == 'function';\n  }\n  // fallback for older versions of Chrome and Safari\n  if (isFunction(/x/)) {\n    isFunction = function(value) {\n      return typeof value == 'function' && toString.call(value) == funcClass;\n    };\n  }\n\n  /**\n   * Checks if `value` is the language type of Object.\n   * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n   * @example\n   *\n   * _.isObject({});\n   * // => true\n   *\n   * _.isObject([1, 2, 3]);\n   * // => true\n   *\n   * _.isObject(1);\n   * // => false\n   */\n  function isObject(value) {\n    // check if the value is the ECMAScript language type of Object\n    // http://es5.github.io/#x8\n    // and avoid a V8 bug\n    // http://code.google.com/p/v8/issues/detail?id=2291\n    return !!(value && objectTypes[typeof value]);\n  }\n\n  /**\n   * Checks if `value` is `NaN`.\n   *\n   * Note: This is not the same as native `isNaN` which will return `true` for\n   * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.\n   * @example\n   *\n   * _.isNaN(NaN);\n   * // => true\n   *\n   * _.isNaN(new Number(NaN));\n   * // => true\n   *\n   * isNaN(undefined);\n   * // => true\n   *\n   * _.isNaN(undefined);\n   * // => false\n   */\n  function isNaN(value) {\n    // `NaN` as a primitive is the only value that is not equal to itself\n    // (perform the [[Class]] check first to avoid errors with some host objects in IE)\n    return isNumber(value) && value != +value;\n  }\n\n  /**\n   * Checks if `value` is `null`.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.\n   * @example\n   *\n   * _.isNull(null);\n   * // => true\n   *\n   * _.isNull(undefined);\n   * // => false\n   */\n  function isNull(value) {\n    return value === null;\n  }\n\n  /**\n   * Checks if `value` is a number.\n   *\n   * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a number, else `false`.\n   * @example\n   *\n   * _.isNumber(8.4 * 5);\n   * // => true\n   */\n  function isNumber(value) {\n    return typeof value == 'number' ||\n      value && typeof value == 'object' && toString.call(value) == numberClass || false;\n  }\n\n  /**\n   * Checks if `value` is a regular expression.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.\n   * @example\n   *\n   * _.isRegExp(/fred/);\n   * // => true\n   */\n  function isRegExp(value) {\n    return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;\n  }\n\n  /**\n   * Checks if `value` is a string.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is a string, else `false`.\n   * @example\n   *\n   * _.isString('fred');\n   * // => true\n   */\n  function isString(value) {\n    return typeof value == 'string' ||\n      value && typeof value == 'object' && toString.call(value) == stringClass || false;\n  }\n\n  /**\n   * Checks if `value` is `undefined`.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.\n   * @example\n   *\n   * _.isUndefined(void 0);\n   * // => true\n   */\n  function isUndefined(value) {\n    return typeof value == 'undefined';\n  }\n\n  /**\n   * Creates a shallow clone of `object` excluding the specified properties.\n   * Property names may be specified as individual arguments or as arrays of\n   * property names. If a callback is provided it will be executed for each\n   * property of `object` omitting the properties the callback returns truey\n   * for. The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, key, object).\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The source object.\n   * @param {Function|...string|string[]} [callback] The properties to omit or the\n   *  function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns an object without the omitted properties.\n   * @example\n   *\n   * _.omit({ 'name': 'fred', 'age': 40 }, 'age');\n   * // => { 'name': 'fred' }\n   *\n   * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {\n   *   return typeof value == 'number';\n   * });\n   * // => { 'name': 'fred' }\n   */\n  function omit(object) {\n    var props = [];\n    forIn(object, function(value, key) {\n      props.push(key);\n    });\n    props = baseDifference(props, baseFlatten(arguments, true, false, 1));\n\n    var index = -1,\n        length = props.length,\n        result = {};\n\n    while (++index < length) {\n      var key = props[index];\n      result[key] = object[key];\n    }\n    return result;\n  }\n\n  /**\n   * Creates a two dimensional array of an object's key-value pairs,\n   * i.e. `[[key1, value1], [key2, value2]]`.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The object to inspect.\n   * @returns {Array} Returns new array of key-value pairs.\n   * @example\n   *\n   * _.pairs({ 'barney': 36, 'fred': 40 });\n   * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)\n   */\n  function pairs(object) {\n    var index = -1,\n        props = keys(object),\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      var key = props[index];\n      result[index] = [key, object[key]];\n    }\n    return result;\n  }\n\n  /**\n   * Creates a shallow clone of `object` composed of the specified properties.\n   * Property names may be specified as individual arguments or as arrays of\n   * property names. If a callback is provided it will be executed for each\n   * property of `object` picking the properties the callback returns truey\n   * for. The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, key, object).\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The source object.\n   * @param {Function|...string|string[]} [callback] The function called per\n   *  iteration or property names to pick, specified as individual property\n   *  names or arrays of property names.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns an object composed of the picked properties.\n   * @example\n   *\n   * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');\n   * // => { 'name': 'fred' }\n   *\n   * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {\n   *   return key.charAt(0) != '_';\n   * });\n   * // => { 'name': 'fred' }\n   */\n  function pick(object) {\n    var index = -1,\n        props = baseFlatten(arguments, true, false, 1),\n        length = props.length,\n        result = {};\n\n    while (++index < length) {\n      var key = props[index];\n      if (key in object) {\n        result[key] = object[key];\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Creates an array composed of the own enumerable property values of `object`.\n   *\n   * @static\n   * @memberOf _\n   * @category Objects\n   * @param {Object} object The object to inspect.\n   * @returns {Array} Returns an array of property values.\n   * @example\n   *\n   * _.values({ 'one': 1, 'two': 2, 'three': 3 });\n   * // => [1, 2, 3] (property order is not guaranteed across environments)\n   */\n  function values(object) {\n    var index = -1,\n        props = keys(object),\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = object[props[index]];\n    }\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Checks if a given value is present in a collection using strict equality\n   * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the\n   * offset from the end of the collection.\n   *\n   * @static\n   * @memberOf _\n   * @alias include\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {*} target The value to check for.\n   * @param {number} [fromIndex=0] The index to search from.\n   * @returns {boolean} Returns `true` if the `target` element is found, else `false`.\n   * @example\n   *\n   * _.contains([1, 2, 3], 1);\n   * // => true\n   *\n   * _.contains([1, 2, 3], 1, 2);\n   * // => false\n   *\n   * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');\n   * // => true\n   *\n   * _.contains('pebbles', 'eb');\n   * // => true\n   */\n  function contains(collection, target) {\n    var indexOf = getIndexOf(),\n        length = collection ? collection.length : 0,\n        result = false;\n    if (length && typeof length == 'number') {\n      result = indexOf(collection, target) > -1;\n    } else {\n      forOwn(collection, function(value) {\n        return (result = value === target) && indicatorObject;\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Creates an object composed of keys generated from the results of running\n   * each element of `collection` through the callback. The corresponding value\n   * of each key is the number of times the key was returned by the callback.\n   * The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns the composed aggregate object.\n   * @example\n   *\n   * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });\n   * // => { '4': 1, '6': 2 }\n   *\n   * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n   * // => { '4': 1, '6': 2 }\n   *\n   * _.countBy(['one', 'two', 'three'], 'length');\n   * // => { '3': 2, '5': 1 }\n   */\n  var countBy = createAggregator(function(result, value, key) {\n    (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);\n  });\n\n  /**\n   * Checks if the given callback returns truey value for **all** elements of\n   * a collection. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias all\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {boolean} Returns `true` if all elements passed the callback check,\n   *  else `false`.\n   * @example\n   *\n   * _.every([true, 1, null, 'yes']);\n   * // => false\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.every(characters, 'age');\n   * // => true\n   *\n   * // using \"_.where\" callback shorthand\n   * _.every(characters, { 'age': 36 });\n   * // => false\n   */\n  function every(collection, callback, thisArg) {\n    var result = true;\n    callback = createCallback(callback, thisArg, 3);\n\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (typeof length == 'number') {\n      while (++index < length) {\n        if (!(result = !!callback(collection[index], index, collection))) {\n          break;\n        }\n      }\n    } else {\n      forOwn(collection, function(value, index, collection) {\n        return !(result = !!callback(value, index, collection)) && indicatorObject;\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Iterates over elements of a collection, returning an array of all elements\n   * the callback returns truey for. The callback is bound to `thisArg` and\n   * invoked with three arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias select\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a new array of elements that passed the callback check.\n   * @example\n   *\n   * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n   * // => [2, 4, 6]\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36, 'blocked': false },\n   *   { 'name': 'fred',   'age': 40, 'blocked': true }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.filter(characters, 'blocked');\n   * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n   *\n   * // using \"_.where\" callback shorthand\n   * _.filter(characters, { 'age': 36 });\n   * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n   */\n  function filter(collection, callback, thisArg) {\n    var result = [];\n    callback = createCallback(callback, thisArg, 3);\n\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (typeof length == 'number') {\n      while (++index < length) {\n        var value = collection[index];\n        if (callback(value, index, collection)) {\n          result.push(value);\n        }\n      }\n    } else {\n      forOwn(collection, function(value, index, collection) {\n        if (callback(value, index, collection)) {\n          result.push(value);\n        }\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Iterates over elements of a collection, returning the first element that\n   * the callback returns truey for. The callback is bound to `thisArg` and\n   * invoked with three arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias detect, findWhere\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the found element, else `undefined`.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'age': 36, 'blocked': false },\n   *   { 'name': 'fred',    'age': 40, 'blocked': true },\n   *   { 'name': 'pebbles', 'age': 1,  'blocked': false }\n   * ];\n   *\n   * _.find(characters, function(chr) {\n   *   return chr.age < 40;\n   * });\n   * // => { 'name': 'barney', 'age': 36, 'blocked': false }\n   *\n   * // using \"_.where\" callback shorthand\n   * _.find(characters, { 'age': 1 });\n   * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.find(characters, 'blocked');\n   * // => { 'name': 'fred', 'age': 40, 'blocked': true }\n   */\n  function find(collection, callback, thisArg) {\n    callback = createCallback(callback, thisArg, 3);\n\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (typeof length == 'number') {\n      while (++index < length) {\n        var value = collection[index];\n        if (callback(value, index, collection)) {\n          return value;\n        }\n      }\n    } else {\n      var result;\n      forOwn(collection, function(value, index, collection) {\n        if (callback(value, index, collection)) {\n          result = value;\n          return indicatorObject;\n        }\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Examines each element in a `collection`, returning the first that\n   * has the given properties. When checking `properties`, this method\n   * performs a deep comparison between values to determine if they are\n   * equivalent to each other.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Object} properties The object of property values to filter by.\n   * @returns {*} Returns the found element, else `undefined`.\n   * @example\n   *\n   * var food = [\n   *   { 'name': 'apple',  'organic': false, 'type': 'fruit' },\n   *   { 'name': 'banana', 'organic': true,  'type': 'fruit' },\n   *   { 'name': 'beet',   'organic': false, 'type': 'vegetable' }\n   * ];\n   *\n   * _.findWhere(food, { 'type': 'vegetable' });\n   * // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }\n   */\n  function findWhere(object, properties) {\n    return where(object, properties, true);\n  }\n\n  /**\n   * Iterates over elements of a collection, executing the callback for each\n   * element. The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, index|key, collection). Callbacks may exit iteration early by\n   * explicitly returning `false`.\n   *\n   * Note: As with other \"Collections\" methods, objects with a `length` property\n   * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n   * may be used for object iteration.\n   *\n   * @static\n   * @memberOf _\n   * @alias each\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array|Object|string} Returns `collection`.\n   * @example\n   *\n   * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n   * // => logs each number and returns '1,2,3'\n   *\n   * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n   * // => logs each number and returns the object (property order is not guaranteed across environments)\n   */\n  function forEach(collection, callback, thisArg) {\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n    if (typeof length == 'number') {\n      while (++index < length) {\n        if (callback(collection[index], index, collection) === indicatorObject) {\n          break;\n        }\n      }\n    } else {\n      forOwn(collection, callback);\n    }\n  }\n\n  /**\n   * This method is like `_.forEach` except that it iterates over elements\n   * of a `collection` from right to left.\n   *\n   * @static\n   * @memberOf _\n   * @alias eachRight\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array|Object|string} Returns `collection`.\n   * @example\n   *\n   * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');\n   * // => logs each number from right to left and returns '3,2,1'\n   */\n  function forEachRight(collection, callback) {\n    var length = collection ? collection.length : 0;\n    if (typeof length == 'number') {\n      while (length--) {\n        if (callback(collection[length], length, collection) === false) {\n          break;\n        }\n      }\n    } else {\n      var props = keys(collection);\n      length = props.length;\n      forOwn(collection, function(value, key, collection) {\n        key = props ? props[--length] : --length;\n        return callback(collection[key], key, collection) === false && indicatorObject;\n      });\n    }\n  }\n\n  /**\n   * Creates an object composed of keys generated from the results of running\n   * each element of a collection through the callback. The corresponding value\n   * of each key is an array of the elements responsible for generating the key.\n   * The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns the composed aggregate object.\n   * @example\n   *\n   * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });\n   * // => { '4': [4.2], '6': [6.1, 6.4] }\n   *\n   * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n   * // => { '4': [4.2], '6': [6.1, 6.4] }\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.groupBy(['one', 'two', 'three'], 'length');\n   * // => { '3': ['one', 'two'], '5': ['three'] }\n   */\n  var groupBy = createAggregator(function(result, value, key) {\n    (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);\n  });\n\n  /**\n   * Creates an object composed of keys generated from the results of running\n   * each element of the collection through the given callback. The corresponding\n   * value of each key is the last element responsible for generating the key.\n   * The callback is bound to `thisArg` and invoked with three arguments;\n   * (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Object} Returns the composed aggregate object.\n   * @example\n   *\n   * var keys = [\n   *   { 'dir': 'left', 'code': 97 },\n   *   { 'dir': 'right', 'code': 100 }\n   * ];\n   *\n   * _.indexBy(keys, 'dir');\n   * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n   *\n   * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });\n   * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n   *\n   * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);\n   * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n   */\n  var indexBy = createAggregator(function(result, value, key) {\n    result[key] = value;\n  });\n\n  /**\n   * Invokes the method named by `methodName` on each element in the `collection`\n   * returning an array of the results of each invoked method. Additional arguments\n   * will be provided to each invoked method. If `methodName` is a function it\n   * will be invoked for, and `this` bound to, each element in the `collection`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|string} methodName The name of the method to invoke or\n   *  the function invoked per iteration.\n   * @param {...*} [arg] Arguments to invoke the method with.\n   * @returns {Array} Returns a new array of the results of each invoked method.\n   * @example\n   *\n   * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n   * // => [[1, 5, 7], [1, 2, 3]]\n   *\n   * _.invoke([123, 456], String.prototype.split, '');\n   * // => [['1', '2', '3'], ['4', '5', '6']]\n   */\n  function invoke(collection, methodName) {\n    var args = slice(arguments, 2),\n        index = -1,\n        isFunc = typeof methodName == 'function',\n        length = collection ? collection.length : 0,\n        result = Array(typeof length == 'number' ? length : 0);\n\n    forEach(collection, function(value) {\n      result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);\n    });\n    return result;\n  }\n\n  /**\n   * Creates an array of values by running each element in the collection\n   * through the callback. The callback is bound to `thisArg` and invoked with\n   * three arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias collect\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a new array of the results of each `callback` execution.\n   * @example\n   *\n   * _.map([1, 2, 3], function(num) { return num * 3; });\n   * // => [3, 6, 9]\n   *\n   * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });\n   * // => [3, 6, 9] (property order is not guaranteed across environments)\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.map(characters, 'name');\n   * // => ['barney', 'fred']\n   */\n  function map(collection, callback, thisArg) {\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    callback = createCallback(callback, thisArg, 3);\n    if (typeof length == 'number') {\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = callback(collection[index], index, collection);\n      }\n    } else {\n      result = [];\n      forOwn(collection, function(value, key, collection) {\n        result[++index] = callback(value, key, collection);\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Retrieves the maximum value of a collection. If the collection is empty or\n   * falsey `-Infinity` is returned. If a callback is provided it will be executed\n   * for each value in the collection to generate the criterion by which the value\n   * is ranked. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, index, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the maximum value.\n   * @example\n   *\n   * _.max([4, 2, 8, 6]);\n   * // => 8\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * _.max(characters, function(chr) { return chr.age; });\n   * // => { 'name': 'fred', 'age': 40 };\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.max(characters, 'age');\n   * // => { 'name': 'fred', 'age': 40 };\n   */\n  function max(collection, callback, thisArg) {\n    var computed = -Infinity,\n        result = computed;\n\n    // allows working with functions like `_.map` without using\n    // their `index` argument as a callback\n    if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n      callback = null;\n    }\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (callback == null && typeof length == 'number') {\n      while (++index < length) {\n        var value = collection[index];\n        if (value > result) {\n          result = value;\n        }\n      }\n    } else {\n      callback = createCallback(callback, thisArg, 3);\n\n      forEach(collection, function(value, index, collection) {\n        var current = callback(value, index, collection);\n        if (current > computed) {\n          computed = current;\n          result = value;\n        }\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Retrieves the minimum value of a collection. If the collection is empty or\n   * falsey `Infinity` is returned. If a callback is provided it will be executed\n   * for each value in the collection to generate the criterion by which the value\n   * is ranked. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, index, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the minimum value.\n   * @example\n   *\n   * _.min([4, 2, 8, 6]);\n   * // => 2\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * _.min(characters, function(chr) { return chr.age; });\n   * // => { 'name': 'barney', 'age': 36 };\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.min(characters, 'age');\n   * // => { 'name': 'barney', 'age': 36 };\n   */\n  function min(collection, callback, thisArg) {\n    var computed = Infinity,\n        result = computed;\n\n    // allows working with functions like `_.map` without using\n    // their `index` argument as a callback\n    if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n      callback = null;\n    }\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (callback == null && typeof length == 'number') {\n      while (++index < length) {\n        var value = collection[index];\n        if (value < result) {\n          result = value;\n        }\n      }\n    } else {\n      callback = createCallback(callback, thisArg, 3);\n\n      forEach(collection, function(value, index, collection) {\n        var current = callback(value, index, collection);\n        if (current < computed) {\n          computed = current;\n          result = value;\n        }\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Retrieves the value of a specified property from all elements in the collection.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {string} property The name of the property to pluck.\n   * @returns {Array} Returns a new array of property values.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * _.pluck(characters, 'name');\n   * // => ['barney', 'fred']\n   */\n  var pluck = map;\n\n  /**\n   * Reduces a collection to a value which is the accumulated result of running\n   * each element in the collection through the callback, where each successive\n   * callback execution consumes the return value of the previous execution. If\n   * `accumulator` is not provided the first element of the collection will be\n   * used as the initial `accumulator` value. The callback is bound to `thisArg`\n   * and invoked with four arguments; (accumulator, value, index|key, collection).\n   *\n   * @static\n   * @memberOf _\n   * @alias foldl, inject\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [accumulator] Initial value of the accumulator.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the accumulated value.\n   * @example\n   *\n   * var sum = _.reduce([1, 2, 3], function(sum, num) {\n   *   return sum + num;\n   * });\n   * // => 6\n   *\n   * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n   *   result[key] = num * 3;\n   *   return result;\n   * }, {});\n   * // => { 'a': 3, 'b': 6, 'c': 9 }\n   */\n  function reduce(collection, callback, accumulator, thisArg) {\n    if (!collection) return accumulator;\n    var noaccum = arguments.length < 3;\n    callback = createCallback(callback, thisArg, 4);\n\n    var index = -1,\n        length = collection.length;\n\n    if (typeof length == 'number') {\n      if (noaccum) {\n        accumulator = collection[++index];\n      }\n      while (++index < length) {\n        accumulator = callback(accumulator, collection[index], index, collection);\n      }\n    } else {\n      forOwn(collection, function(value, index, collection) {\n        accumulator = noaccum\n          ? (noaccum = false, value)\n          : callback(accumulator, value, index, collection)\n      });\n    }\n    return accumulator;\n  }\n\n  /**\n   * This method is like `_.reduce` except that it iterates over elements\n   * of a `collection` from right to left.\n   *\n   * @static\n   * @memberOf _\n   * @alias foldr\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function} [callback=identity] The function called per iteration.\n   * @param {*} [accumulator] Initial value of the accumulator.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the accumulated value.\n   * @example\n   *\n   * var list = [[0, 1], [2, 3], [4, 5]];\n   * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);\n   * // => [4, 5, 2, 3, 0, 1]\n   */\n  function reduceRight(collection, callback, accumulator, thisArg) {\n    var noaccum = arguments.length < 3;\n    callback = createCallback(callback, thisArg, 4);\n    forEachRight(collection, function(value, index, collection) {\n      accumulator = noaccum\n        ? (noaccum = false, value)\n        : callback(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The opposite of `_.filter` this method returns the elements of a\n   * collection that the callback does **not** return truey for.\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a new array of elements that failed the callback check.\n   * @example\n   *\n   * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n   * // => [1, 3, 5]\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36, 'blocked': false },\n   *   { 'name': 'fred',   'age': 40, 'blocked': true }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.reject(characters, 'blocked');\n   * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n   *\n   * // using \"_.where\" callback shorthand\n   * _.reject(characters, { 'age': 36 });\n   * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n   */\n  function reject(collection, callback, thisArg) {\n    callback = createCallback(callback, thisArg, 3);\n    return filter(collection, function(value, index, collection) {\n      return !callback(value, index, collection);\n    });\n  }\n\n  /**\n   * Retrieves a random element or `n` random elements from a collection.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to sample.\n   * @param {number} [n] The number of elements to sample.\n   * @param- {Object} [guard] Allows working with functions like `_.map`\n   *  without using their `index` arguments as `n`.\n   * @returns {Array} Returns the random sample(s) of `collection`.\n   * @example\n   *\n   * _.sample([1, 2, 3, 4]);\n   * // => 2\n   *\n   * _.sample([1, 2, 3, 4], 2);\n   * // => [3, 1]\n   */\n  function sample(collection, n, guard) {\n    if (collection && typeof collection.length != 'number') {\n      collection = values(collection);\n    }\n    if (n == null || guard) {\n      return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;\n    }\n    var result = shuffle(collection);\n    result.length = nativeMin(nativeMax(0, n), result.length);\n    return result;\n  }\n\n  /**\n   * Creates an array of shuffled values, using a version of the Fisher-Yates\n   * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to shuffle.\n   * @returns {Array} Returns a new shuffled collection.\n   * @example\n   *\n   * _.shuffle([1, 2, 3, 4, 5, 6]);\n   * // => [4, 1, 6, 3, 5, 2]\n   */\n  function shuffle(collection) {\n    var index = -1,\n        length = collection ? collection.length : 0,\n        result = Array(typeof length == 'number' ? length : 0);\n\n    forEach(collection, function(value) {\n      var rand = baseRandom(0, ++index);\n      result[index] = result[rand];\n      result[rand] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Gets the size of the `collection` by returning `collection.length` for arrays\n   * and array-like objects or the number of own enumerable properties for objects.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to inspect.\n   * @returns {number} Returns `collection.length` or number of own enumerable properties.\n   * @example\n   *\n   * _.size([1, 2]);\n   * // => 2\n   *\n   * _.size({ 'one': 1, 'two': 2, 'three': 3 });\n   * // => 3\n   *\n   * _.size('pebbles');\n   * // => 7\n   */\n  function size(collection) {\n    var length = collection ? collection.length : 0;\n    return typeof length == 'number' ? length : keys(collection).length;\n  }\n\n  /**\n   * Checks if the callback returns a truey value for **any** element of a\n   * collection. The function returns as soon as it finds a passing value and\n   * does not iterate over the entire collection. The callback is bound to\n   * `thisArg` and invoked with three arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias any\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {boolean} Returns `true` if any element passed the callback check,\n   *  else `false`.\n   * @example\n   *\n   * _.some([null, 0, 'yes', false], Boolean);\n   * // => true\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36, 'blocked': false },\n   *   { 'name': 'fred',   'age': 40, 'blocked': true }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.some(characters, 'blocked');\n   * // => true\n   *\n   * // using \"_.where\" callback shorthand\n   * _.some(characters, { 'age': 1 });\n   * // => false\n   */\n  function some(collection, callback, thisArg) {\n    var result;\n    callback = createCallback(callback, thisArg, 3);\n\n    var index = -1,\n        length = collection ? collection.length : 0;\n\n    if (typeof length == 'number') {\n      while (++index < length) {\n        if ((result = callback(collection[index], index, collection))) {\n          break;\n        }\n      }\n    } else {\n      forOwn(collection, function(value, index, collection) {\n        return (result = callback(value, index, collection)) && indicatorObject;\n      });\n    }\n    return !!result;\n  }\n\n  /**\n   * Creates an array of elements, sorted in ascending order by the results of\n   * running each element in a collection through the callback. This method\n   * performs a stable sort, that is, it will preserve the original sort order\n   * of equal elements. The callback is bound to `thisArg` and invoked with\n   * three arguments; (value, index|key, collection).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an array of property names is provided for `callback` the collection\n   * will be sorted by each property value.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Array|Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a new array of sorted elements.\n   * @example\n   *\n   * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });\n   * // => [3, 1, 2]\n   *\n   * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);\n   * // => [3, 1, 2]\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'age': 36 },\n   *   { 'name': 'fred',    'age': 40 },\n   *   { 'name': 'barney',  'age': 26 },\n   *   { 'name': 'fred',    'age': 30 }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.map(_.sortBy(characters, 'age'), _.values);\n   * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]\n   *\n   * // sorting by multiple properties\n   * _.map(_.sortBy(characters, ['name', 'age']), _.values);\n   * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]\n   */\n  function sortBy(collection, callback, thisArg) {\n    var index = -1,\n        length = collection ? collection.length : 0,\n        result = Array(typeof length == 'number' ? length : 0);\n\n    callback = createCallback(callback, thisArg, 3);\n    forEach(collection, function(value, key, collection) {\n      result[++index] = {\n        'criteria': [callback(value, key, collection)],\n        'index': index,\n        'value': value\n      };\n    });\n\n    length = result.length;\n    result.sort(compareAscending);\n    while (length--) {\n      result[length] = result[length].value;\n    }\n    return result;\n  }\n\n  /**\n   * Converts the `collection` to an array.\n   *\n   * @static\n   * @memberOf _\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to convert.\n   * @returns {Array} Returns the new converted array.\n   * @example\n   *\n   * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);\n   * // => [2, 3, 4]\n   */\n  function toArray(collection) {\n    if (isArray(collection)) {\n      return slice(collection);\n    }\n    if (collection && typeof collection.length == 'number') {\n      return map(collection);\n    }\n    return values(collection);\n  }\n\n  /**\n   * Performs a deep comparison of each element in a `collection` to the given\n   * `properties` object, returning an array of all elements that have equivalent\n   * property values.\n   *\n   * @static\n   * @memberOf _\n   * @type Function\n   * @category Collections\n   * @param {Array|Object|string} collection The collection to iterate over.\n   * @param {Object} props The object of property values to filter by.\n   * @returns {Array} Returns a new array of elements that have the given properties.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },\n   *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n   * ];\n   *\n   * _.where(characters, { 'age': 36 });\n   * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]\n   *\n   * _.where(characters, { 'pets': ['dino'] });\n   * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]\n   */\n  function where(collection, properties, first) {\n    return (first && isEmpty(properties))\n      ? undefined\n      : (first ? find : filter)(collection, properties);\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Creates an array with all falsey values removed. The values `false`, `null`,\n   * `0`, `\"\"`, `undefined`, and `NaN` are all falsey.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to compact.\n   * @returns {Array} Returns a new array of filtered values.\n   * @example\n   *\n   * _.compact([0, 1, false, 2, '', 3]);\n   * // => [1, 2, 3]\n   */\n  function compact(array) {\n    var index = -1,\n        length = array ? array.length : 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value) {\n        result.push(value);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Creates an array excluding all values of the provided arrays using strict\n   * equality for comparisons, i.e. `===`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to process.\n   * @param {...Array} [values] The arrays of values to exclude.\n   * @returns {Array} Returns a new array of filtered values.\n   * @example\n   *\n   * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);\n   * // => [1, 3, 4]\n   */\n  function difference(array) {\n    return baseDifference(array, baseFlatten(arguments, true, true, 1));\n  }\n\n  /**\n   * Gets the first element or first `n` elements of an array. If a callback\n   * is provided elements at the beginning of the array are returned as long\n   * as the callback returns truey. The callback is bound to `thisArg` and\n   * invoked with three arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias head, take\n   * @category Arrays\n   * @param {Array} array The array to query.\n   * @param {Function|Object|number|string} [callback] The function called\n   *  per element or the number of elements to return. If a property name or\n   *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n   *  style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the first element(s) of `array`.\n   * @example\n   *\n   * _.first([1, 2, 3]);\n   * // => 1\n   *\n   * _.first([1, 2, 3], 2);\n   * // => [1, 2]\n   *\n   * _.first([1, 2, 3], function(num) {\n   *   return num < 3;\n   * });\n   * // => [1, 2]\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n   *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },\n   *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.first(characters, 'blocked');\n   * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]\n   *\n   * // using \"_.where\" callback shorthand\n   * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');\n   * // => ['barney', 'fred']\n   */\n  function first(array, callback, thisArg) {\n    var n = 0,\n        length = array ? array.length : 0;\n\n    if (typeof callback != 'number' && callback != null) {\n      var index = -1;\n      callback = createCallback(callback, thisArg, 3);\n      while (++index < length && callback(array[index], index, array)) {\n        n++;\n      }\n    } else {\n      n = callback;\n      if (n == null || thisArg) {\n        return array ? array[0] : undefined;\n      }\n    }\n    return slice(array, 0, nativeMin(nativeMax(0, n), length));\n  }\n\n  /**\n   * Flattens a nested array (the nesting can be to any depth). If `isShallow`\n   * is truey, the array will only be flattened a single level. If a callback\n   * is provided each element of the array is passed through the callback before\n   * flattening. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to flatten.\n   * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a new flattened array.\n   * @example\n   *\n   * _.flatten([1, [2], [3, [[4]]]]);\n   * // => [1, 2, 3, 4];\n   *\n   * _.flatten([1, [2], [3, [[4]]]], true);\n   * // => [1, 2, 3, [[4]]];\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },\n   *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.flatten(characters, 'pets');\n   * // => ['hoppy', 'baby puss', 'dino']\n   */\n  function flatten(array, isShallow) {\n    return baseFlatten(array, isShallow);\n  }\n\n  /**\n   * Gets the index at which the first occurrence of `value` is found using\n   * strict equality for comparisons, i.e. `===`. If the array is already sorted\n   * providing `true` for `fromIndex` will run a faster binary search.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n   *  to perform a binary search on a sorted array.\n   * @returns {number} Returns the index of the matched value or `-1`.\n   * @example\n   *\n   * _.indexOf([1, 2, 3, 1, 2, 3], 2);\n   * // => 1\n   *\n   * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);\n   * // => 4\n   *\n   * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);\n   * // => 2\n   */\n  function indexOf(array, value, fromIndex) {\n    if (typeof fromIndex == 'number') {\n      var length = array ? array.length : 0;\n      fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);\n    } else if (fromIndex) {\n      var index = sortedIndex(array, value);\n      return array[index] === value ? index : -1;\n    }\n    return baseIndexOf(array, value, fromIndex);\n  }\n\n  /**\n   * Gets all but the last element or last `n` elements of an array. If a\n   * callback is provided elements at the end of the array are excluded from\n   * the result as long as the callback returns truey. The callback is bound\n   * to `thisArg` and invoked with three arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to query.\n   * @param {Function|Object|number|string} [callback=1] The function called\n   *  per element or the number of elements to exclude. If a property name or\n   *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n   *  style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a slice of `array`.\n   * @example\n   *\n   * _.initial([1, 2, 3]);\n   * // => [1, 2]\n   *\n   * _.initial([1, 2, 3], 2);\n   * // => [1]\n   *\n   * _.initial([1, 2, 3], function(num) {\n   *   return num > 1;\n   * });\n   * // => [1]\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n   *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n   *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.initial(characters, 'blocked');\n   * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]\n   *\n   * // using \"_.where\" callback shorthand\n   * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');\n   * // => ['barney', 'fred']\n   */\n  function initial(array, callback, thisArg) {\n    var n = 0,\n        length = array ? array.length : 0;\n\n    if (typeof callback != 'number' && callback != null) {\n      var index = length;\n      callback = createCallback(callback, thisArg, 3);\n      while (index-- && callback(array[index], index, array)) {\n        n++;\n      }\n    } else {\n      n = (callback == null || thisArg) ? 1 : callback || n;\n    }\n    return slice(array, 0, nativeMin(nativeMax(0, length - n), length));\n  }\n\n  /**\n   * Creates an array of unique values present in all provided arrays using\n   * strict equality for comparisons, i.e. `===`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {...Array} [array] The arrays to inspect.\n   * @returns {Array} Returns an array of shared values.\n   * @example\n   *\n   * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n   * // => [1, 2]\n   */\n  function intersection() {\n    var args = [],\n        argsIndex = -1,\n        argsLength = arguments.length;\n\n    while (++argsIndex < argsLength) {\n      var value = arguments[argsIndex];\n       if (isArray(value) || isArguments(value)) {\n         args.push(value);\n       }\n    }\n    var array = args[0],\n        index = -1,\n        indexOf = getIndexOf(),\n        length = array ? array.length : 0,\n        result = [];\n\n    outer:\n    while (++index < length) {\n      value = array[index];\n      if (indexOf(result, value) < 0) {\n        var argsIndex = argsLength;\n        while (--argsIndex) {\n          if (indexOf(args[argsIndex], value) < 0) {\n            continue outer;\n          }\n        }\n        result.push(value);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Gets the last element or last `n` elements of an array. If a callback is\n   * provided elements at the end of the array are returned as long as the\n   * callback returns truey. The callback is bound to `thisArg` and invoked\n   * with three arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to query.\n   * @param {Function|Object|number|string} [callback] The function called\n   *  per element or the number of elements to return. If a property name or\n   *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n   *  style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {*} Returns the last element(s) of `array`.\n   * @example\n   *\n   * _.last([1, 2, 3]);\n   * // => 3\n   *\n   * _.last([1, 2, 3], 2);\n   * // => [2, 3]\n   *\n   * _.last([1, 2, 3], function(num) {\n   *   return num > 1;\n   * });\n   * // => [2, 3]\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },\n   *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },\n   *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.pluck(_.last(characters, 'blocked'), 'name');\n   * // => ['fred', 'pebbles']\n   *\n   * // using \"_.where\" callback shorthand\n   * _.last(characters, { 'employer': 'na' });\n   * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n   */\n  function last(array, callback, thisArg) {\n    var n = 0,\n        length = array ? array.length : 0;\n\n    if (typeof callback != 'number' && callback != null) {\n      var index = length;\n      callback = createCallback(callback, thisArg, 3);\n      while (index-- && callback(array[index], index, array)) {\n        n++;\n      }\n    } else {\n      n = callback;\n      if (n == null || thisArg) {\n        return array ? array[length - 1] : undefined;\n      }\n    }\n    return slice(array, nativeMax(0, length - n));\n  }\n\n  /**\n   * Gets the index at which the last occurrence of `value` is found using strict\n   * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used\n   * as the offset from the end of the collection.\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {number} [fromIndex=array.length-1] The index to search from.\n   * @returns {number} Returns the index of the matched value or `-1`.\n   * @example\n   *\n   * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);\n   * // => 4\n   *\n   * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);\n   * // => 1\n   */\n  function lastIndexOf(array, value, fromIndex) {\n    var index = array ? array.length : 0;\n    if (typeof fromIndex == 'number') {\n      index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;\n    }\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * Creates an array of numbers (positive and/or negative) progressing from\n   * `start` up to but not including `end`. If `start` is less than `stop` a\n   * zero-length range is created unless a negative `step` is specified.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {number} [start=0] The start of the range.\n   * @param {number} end The end of the range.\n   * @param {number} [step=1] The value to increment or decrement by.\n   * @returns {Array} Returns a new range array.\n   * @example\n   *\n   * _.range(4);\n   * // => [0, 1, 2, 3]\n   *\n   * _.range(1, 5);\n   * // => [1, 2, 3, 4]\n   *\n   * _.range(0, 20, 5);\n   * // => [0, 5, 10, 15]\n   *\n   * _.range(0, -4, -1);\n   * // => [0, -1, -2, -3]\n   *\n   * _.range(1, 4, 0);\n   * // => [1, 1, 1]\n   *\n   * _.range(0);\n   * // => []\n   */\n  function range(start, end, step) {\n    start = +start || 0;\n    step =  (+step || 1);\n\n    if (end == null) {\n      end = start;\n      start = 0;\n    }\n    // use `Array(length)` so engines like Chakra and V8 avoid slower modes\n    // http://youtu.be/XAqIpGU8ZZk#t=17m25s\n    var index = -1,\n        length = nativeMax(0, ceil((end - start) / step)),\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = start;\n      start += step;\n    }\n    return result;\n  }\n\n  /**\n   * The opposite of `_.initial` this method gets all but the first element or\n   * first `n` elements of an array. If a callback function is provided elements\n   * at the beginning of the array are excluded from the result as long as the\n   * callback returns truey. The callback is bound to `thisArg` and invoked\n   * with three arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias drop, tail\n   * @category Arrays\n   * @param {Array} array The array to query.\n   * @param {Function|Object|number|string} [callback=1] The function called\n   *  per element or the number of elements to exclude. If a property name or\n   *  object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n   *  style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a slice of `array`.\n   * @example\n   *\n   * _.rest([1, 2, 3]);\n   * // => [2, 3]\n   *\n   * _.rest([1, 2, 3], 2);\n   * // => [3]\n   *\n   * _.rest([1, 2, 3], function(num) {\n   *   return num < 3;\n   * });\n   * // => [3]\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },\n   *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },\n   *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n   * ];\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.pluck(_.rest(characters, 'blocked'), 'name');\n   * // => ['fred', 'pebbles']\n   *\n   * // using \"_.where\" callback shorthand\n   * _.rest(characters, { 'employer': 'slate' });\n   * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n   */\n  function rest(array, callback, thisArg) {\n    if (typeof callback != 'number' && callback != null) {\n      var n = 0,\n          index = -1,\n          length = array ? array.length : 0;\n\n      callback = createCallback(callback, thisArg, 3);\n      while (++index < length && callback(array[index], index, array)) {\n        n++;\n      }\n    } else {\n      n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);\n    }\n    return slice(array, n);\n  }\n\n  /**\n   * Uses a binary search to determine the smallest index at which a value\n   * should be inserted into a given sorted array in order to maintain the sort\n   * order of the array. If a callback is provided it will be executed for\n   * `value` and each element of `array` to compute their sort ranking. The\n   * callback is bound to `thisArg` and invoked with one argument; (value).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to evaluate.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {number} Returns the index at which `value` should be inserted\n   *  into `array`.\n   * @example\n   *\n   * _.sortedIndex([20, 30, 50], 40);\n   * // => 2\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n   * // => 2\n   *\n   * var dict = {\n   *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }\n   * };\n   *\n   * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n   *   return dict.wordToNumber[word];\n   * });\n   * // => 2\n   *\n   * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n   *   return this.wordToNumber[word];\n   * }, dict);\n   * // => 2\n   */\n  function sortedIndex(array, value, callback, thisArg) {\n    var low = 0,\n        high = array ? array.length : low;\n\n    // explicitly reference `identity` for better inlining in Firefox\n    callback = callback ? createCallback(callback, thisArg, 1) : identity;\n    value = callback(value);\n\n    while (low < high) {\n      var mid = (low + high) >>> 1;\n      (callback(array[mid]) < value)\n        ? low = mid + 1\n        : high = mid;\n    }\n    return low;\n  }\n\n  /**\n   * Creates an array of unique values, in order, of the provided arrays using\n   * strict equality for comparisons, i.e. `===`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {...Array} [array] The arrays to inspect.\n   * @returns {Array} Returns an array of combined values.\n   * @example\n   *\n   * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n   * // => [1, 2, 3, 5, 4]\n   */\n  function union() {\n    return baseUniq(baseFlatten(arguments, true, true));\n  }\n\n  /**\n   * Creates a duplicate-value-free version of an array using strict equality\n   * for comparisons, i.e. `===`. If the array is sorted, providing\n   * `true` for `isSorted` will use a faster algorithm. If a callback is provided\n   * each element of `array` is passed through the callback before uniqueness\n   * is computed. The callback is bound to `thisArg` and invoked with three\n   * arguments; (value, index, array).\n   *\n   * If a property name is provided for `callback` the created \"_.pluck\" style\n   * callback will return the property value of the given element.\n   *\n   * If an object is provided for `callback` the created \"_.where\" style callback\n   * will return `true` for elements that have the properties of the given object,\n   * else `false`.\n   *\n   * @static\n   * @memberOf _\n   * @alias unique\n   * @category Arrays\n   * @param {Array} array The array to process.\n   * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n   * @param {Function|Object|string} [callback=identity] The function called\n   *  per iteration. If a property name or object is provided it will be used\n   *  to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns a duplicate-value-free array.\n   * @example\n   *\n   * _.uniq([1, 2, 1, 3, 1]);\n   * // => [1, 2, 3]\n   *\n   * _.uniq([1, 1, 2, 2, 3], true);\n   * // => [1, 2, 3]\n   *\n   * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });\n   * // => ['A', 'b', 'C']\n   *\n   * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);\n   * // => [1, 2.5, 3]\n   *\n   * // using \"_.pluck\" callback shorthand\n   * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n   * // => [{ 'x': 1 }, { 'x': 2 }]\n   */\n  function uniq(array, isSorted, callback, thisArg) {\n    // juggle arguments\n    if (typeof isSorted != 'boolean' && isSorted != null) {\n      thisArg = callback;\n      callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;\n      isSorted = false;\n    }\n    if (callback != null) {\n      callback = createCallback(callback, thisArg, 3);\n    }\n    return baseUniq(array, isSorted, callback);\n  }\n\n  /**\n   * Creates an array excluding all provided values using strict equality for\n   * comparisons, i.e. `===`.\n   *\n   * @static\n   * @memberOf _\n   * @category Arrays\n   * @param {Array} array The array to filter.\n   * @param {...*} [value] The values to exclude.\n   * @returns {Array} Returns a new array of filtered values.\n   * @example\n   *\n   * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);\n   * // => [2, 3, 4]\n   */\n  function without(array) {\n    return baseDifference(array, slice(arguments, 1));\n  }\n\n  /**\n   * Creates an array of grouped elements, the first of which contains the first\n   * elements of the given arrays, the second of which contains the second\n   * elements of the given arrays, and so on.\n   *\n   * @static\n   * @memberOf _\n   * @alias unzip\n   * @category Arrays\n   * @param {...Array} [array] Arrays to process.\n   * @returns {Array} Returns a new array of grouped elements.\n   * @example\n   *\n   * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n   * // => [['fred', 30, true], ['barney', 40, false]]\n   */\n  function zip() {\n    var index = -1,\n        length = max(pluck(arguments, 'length')),\n        result = Array(length < 0 ? 0 : length);\n\n    while (++index < length) {\n      result[index] = pluck(arguments, index);\n    }\n    return result;\n  }\n\n  /**\n   * Creates an object composed from arrays of `keys` and `values`. Provide\n   * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`\n   * or two arrays, one of `keys` and one of corresponding `values`.\n   *\n   * @static\n   * @memberOf _\n   * @alias object\n   * @category Arrays\n   * @param {Array} keys The array of keys.\n   * @param {Array} [values=[]] The array of values.\n   * @returns {Object} Returns an object composed of the given keys and\n   *  corresponding values.\n   * @example\n   *\n   * _.zipObject(['fred', 'barney'], [30, 40]);\n   * // => { 'fred': 30, 'barney': 40 }\n   */\n  function zipObject(keys, values) {\n    var index = -1,\n        length = keys ? keys.length : 0,\n        result = {};\n\n    if (!values && length && !isArray(keys[0])) {\n      values = [];\n    }\n    while (++index < length) {\n      var key = keys[index];\n      if (values) {\n        result[key] = values[index];\n      } else if (key) {\n        result[key[0]] = key[1];\n      }\n    }\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Creates a function that executes `func`, with  the `this` binding and\n   * arguments of the created function, only after being called `n` times.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {number} n The number of times the function must be called before\n   *  `func` is executed.\n   * @param {Function} func The function to restrict.\n   * @returns {Function} Returns the new restricted function.\n   * @example\n   *\n   * var saves = ['profile', 'settings'];\n   *\n   * var done = _.after(saves.length, function() {\n   *   console.log('Done saving!');\n   * });\n   *\n   * _.forEach(saves, function(type) {\n   *   asyncSave({ 'type': type, 'complete': done });\n   * });\n   * // => logs 'Done saving!', after all saves have completed\n   */\n  function after(n, func) {\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    return function() {\n      if (--n < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  }\n\n  /**\n   * Creates a function that, when called, invokes `func` with the `this`\n   * binding of `thisArg` and prepends any additional `bind` arguments to those\n   * provided to the bound function.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to bind.\n   * @param {*} [thisArg] The `this` binding of `func`.\n   * @param {...*} [arg] Arguments to be partially applied.\n   * @returns {Function} Returns the new bound function.\n   * @example\n   *\n   * var func = function(greeting) {\n   *   return greeting + ' ' + this.name;\n   * };\n   *\n   * func = _.bind(func, { 'name': 'fred' }, 'hi');\n   * func();\n   * // => 'hi fred'\n   */\n  function bind(func, thisArg) {\n    return arguments.length > 2\n      ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n      : createWrapper(func, 1, null, null, thisArg);\n  }\n\n  /**\n   * Binds methods of an object to the object itself, overwriting the existing\n   * method. Method names may be specified as individual arguments or as arrays\n   * of method names. If no method names are provided all the function properties\n   * of `object` will be bound.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Object} object The object to bind and assign the bound methods to.\n   * @param {...string} [methodName] The object method names to\n   *  bind, specified as individual method names or arrays of method names.\n   * @returns {Object} Returns `object`.\n   * @example\n   *\n   * var view = {\n   *   'label': 'docs',\n   *   'onClick': function() { console.log('clicked ' + this.label); }\n   * };\n   *\n   * _.bindAll(view);\n   * jQuery('#docs').on('click', view.onClick);\n   * // => logs 'clicked docs', when the button is clicked\n   */\n  function bindAll(object) {\n    var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),\n        index = -1,\n        length = funcs.length;\n\n    while (++index < length) {\n      var key = funcs[index];\n      object[key] = createWrapper(object[key], 1, null, null, object);\n    }\n    return object;\n  }\n\n  /**\n   * Creates a function that is the composition of the provided functions,\n   * where each function consumes the return value of the function that follows.\n   * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.\n   * Each function is executed with the `this` binding of the composed function.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {...Function} [func] Functions to compose.\n   * @returns {Function} Returns the new composed function.\n   * @example\n   *\n   * var realNameMap = {\n   *   'pebbles': 'penelope'\n   * };\n   *\n   * var format = function(name) {\n   *   name = realNameMap[name.toLowerCase()] || name;\n   *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n   * };\n   *\n   * var greet = function(formatted) {\n   *   return 'Hiya ' + formatted + '!';\n   * };\n   *\n   * var welcome = _.compose(greet, format);\n   * welcome('pebbles');\n   * // => 'Hiya Penelope!'\n   */\n  function compose() {\n    var funcs = arguments,\n        length = funcs.length;\n\n    while (length--) {\n      if (!isFunction(funcs[length])) {\n        throw new TypeError;\n      }\n    }\n    return function() {\n      var args = arguments,\n          length = funcs.length;\n\n      while (length--) {\n        args = [funcs[length].apply(this, args)];\n      }\n      return args[0];\n    };\n  }\n\n  /**\n   * Creates a function that will delay the execution of `func` until after\n   * `wait` milliseconds have elapsed since the last time it was invoked.\n   * Provide an options object to indicate that `func` should be invoked on\n   * the leading and/or trailing edge of the `wait` timeout. Subsequent calls\n   * to the debounced function will return the result of the last `func` call.\n   *\n   * Note: If `leading` and `trailing` options are `true` `func` will be called\n   * on the trailing edge of the timeout only if the the debounced function is\n   * invoked more than once during the `wait` timeout.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to debounce.\n   * @param {number} wait The number of milliseconds to delay.\n   * @param {Object} [options] The options object.\n   * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.\n   * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.\n   * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n   * @returns {Function} Returns the new debounced function.\n   * @example\n   *\n   * // avoid costly calculations while the window size is in flux\n   * var lazyLayout = _.debounce(calculateLayout, 150);\n   * jQuery(window).on('resize', lazyLayout);\n   *\n   * // execute `sendMail` when the click event is fired, debouncing subsequent calls\n   * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n   *   'leading': true,\n   *   'trailing': false\n   * });\n   *\n   * // ensure `batchLog` is executed once after 1 second of debounced calls\n   * var source = new EventSource('/stream');\n   * source.addEventListener('message', _.debounce(batchLog, 250, {\n   *   'maxWait': 1000\n   * }, false);\n   */\n  function debounce(func, wait, options) {\n    var args,\n        maxTimeoutId,\n        result,\n        stamp,\n        thisArg,\n        timeoutId,\n        trailingCall,\n        lastCalled = 0,\n        maxWait = false,\n        trailing = true;\n\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    wait = nativeMax(0, wait) || 0;\n    if (options === true) {\n      var leading = true;\n      trailing = false;\n    } else if (isObject(options)) {\n      leading = options.leading;\n      maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);\n      trailing = 'trailing' in options ? options.trailing : trailing;\n    }\n    var delayed = function() {\n      var remaining = wait - (now() - stamp);\n      if (remaining <= 0) {\n        if (maxTimeoutId) {\n          clearTimeout(maxTimeoutId);\n        }\n        var isCalled = trailingCall;\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (isCalled) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = null;\n          }\n        }\n      } else {\n        timeoutId = setTimeout(delayed, remaining);\n      }\n    };\n\n    var maxDelayed = function() {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n      maxTimeoutId = timeoutId = trailingCall = undefined;\n      if (trailing || (maxWait !== wait)) {\n        lastCalled = now();\n        result = func.apply(thisArg, args);\n        if (!timeoutId && !maxTimeoutId) {\n          args = thisArg = null;\n        }\n      }\n    };\n\n    return function() {\n      args = arguments;\n      stamp = now();\n      thisArg = this;\n      trailingCall = trailing && (timeoutId || !leading);\n\n      if (maxWait === false) {\n        var leadingCall = leading && !timeoutId;\n      } else {\n        if (!maxTimeoutId && !leading) {\n          lastCalled = stamp;\n        }\n        var remaining = maxWait - (stamp - lastCalled),\n            isCalled = remaining <= 0;\n\n        if (isCalled) {\n          if (maxTimeoutId) {\n            maxTimeoutId = clearTimeout(maxTimeoutId);\n          }\n          lastCalled = stamp;\n          result = func.apply(thisArg, args);\n        }\n        else if (!maxTimeoutId) {\n          maxTimeoutId = setTimeout(maxDelayed, remaining);\n        }\n      }\n      if (isCalled && timeoutId) {\n        timeoutId = clearTimeout(timeoutId);\n      }\n      else if (!timeoutId && wait !== maxWait) {\n        timeoutId = setTimeout(delayed, wait);\n      }\n      if (leadingCall) {\n        isCalled = true;\n        result = func.apply(thisArg, args);\n      }\n      if (isCalled && !timeoutId && !maxTimeoutId) {\n        args = thisArg = null;\n      }\n      return result;\n    };\n  }\n\n  /**\n   * Defers executing the `func` function until the current call stack has cleared.\n   * Additional arguments will be provided to `func` when it is invoked.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to defer.\n   * @param {...*} [arg] Arguments to invoke the function with.\n   * @returns {number} Returns the timer id.\n   * @example\n   *\n   * _.defer(function(text) { console.log(text); }, 'deferred');\n   * // logs 'deferred' after one or more milliseconds\n   */\n  function defer(func) {\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    var args = slice(arguments, 1);\n    return setTimeout(function() { func.apply(undefined, args); }, 1);\n  }\n\n  /**\n   * Executes the `func` function after `wait` milliseconds. Additional arguments\n   * will be provided to `func` when it is invoked.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to delay.\n   * @param {number} wait The number of milliseconds to delay execution.\n   * @param {...*} [arg] Arguments to invoke the function with.\n   * @returns {number} Returns the timer id.\n   * @example\n   *\n   * _.delay(function(text) { console.log(text); }, 1000, 'later');\n   * // => logs 'later' after one second\n   */\n  function delay(func, wait) {\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    var args = slice(arguments, 2);\n    return setTimeout(function() { func.apply(undefined, args); }, wait);\n  }\n\n  /**\n   * Creates a function that memoizes the result of `func`. If `resolver` is\n   * provided it will be used to determine the cache key for storing the result\n   * based on the arguments provided to the memoized function. By default, the\n   * first argument provided to the memoized function is used as the cache key.\n   * The `func` is executed with the `this` binding of the memoized function.\n   * The result cache is exposed as the `cache` property on the memoized function.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to have its output memoized.\n   * @param {Function} [resolver] A function used to resolve the cache key.\n   * @returns {Function} Returns the new memoizing function.\n   * @example\n   *\n   * var fibonacci = _.memoize(function(n) {\n   *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);\n   * });\n   *\n   * fibonacci(9)\n   * // => 34\n   *\n   * var data = {\n   *   'fred': { 'name': 'fred', 'age': 40 },\n   *   'pebbles': { 'name': 'pebbles', 'age': 1 }\n   * };\n   *\n   * // modifying the result cache\n   * var get = _.memoize(function(name) { return data[name]; }, _.identity);\n   * get('pebbles');\n   * // => { 'name': 'pebbles', 'age': 1 }\n   *\n   * get.cache.pebbles.name = 'penelope';\n   * get('pebbles');\n   * // => { 'name': 'penelope', 'age': 1 }\n   */\n  function memoize(func, resolver) {\n    var cache = {};\n    return function() {\n      var key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];\n      return hasOwnProperty.call(cache, key)\n        ? cache[key]\n        : (cache[key] = func.apply(this, arguments));\n    };\n  }\n\n  /**\n   * Creates a function that is restricted to execute `func` once. Repeat calls to\n   * the function will return the value of the first call. The `func` is executed\n   * with the `this` binding of the created function.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to restrict.\n   * @returns {Function} Returns the new restricted function.\n   * @example\n   *\n   * var initialize = _.once(createApplication);\n   * initialize();\n   * initialize();\n   * // `initialize` executes `createApplication` once\n   */\n  function once(func) {\n    var ran,\n        result;\n\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    return function() {\n      if (ran) {\n        return result;\n      }\n      ran = true;\n      result = func.apply(this, arguments);\n\n      // clear the `func` variable so the function may be garbage collected\n      func = null;\n      return result;\n    };\n  }\n\n  /**\n   * Creates a function that, when called, invokes `func` with any additional\n   * `partial` arguments prepended to those provided to the new function. This\n   * method is similar to `_.bind` except it does **not** alter the `this` binding.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to partially apply arguments to.\n   * @param {...*} [arg] Arguments to be partially applied.\n   * @returns {Function} Returns the new partially applied function.\n   * @example\n   *\n   * var greet = function(greeting, name) { return greeting + ' ' + name; };\n   * var hi = _.partial(greet, 'hi');\n   * hi('fred');\n   * // => 'hi fred'\n   */\n  function partial(func) {\n    return createWrapper(func, 16, slice(arguments, 1));\n  }\n\n  /**\n   * Creates a function that, when executed, will only call the `func` function\n   * at most once per every `wait` milliseconds. Provide an options object to\n   * indicate that `func` should be invoked on the leading and/or trailing edge\n   * of the `wait` timeout. Subsequent calls to the throttled function will\n   * return the result of the last `func` call.\n   *\n   * Note: If `leading` and `trailing` options are `true` `func` will be called\n   * on the trailing edge of the timeout only if the the throttled function is\n   * invoked more than once during the `wait` timeout.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {Function} func The function to throttle.\n   * @param {number} wait The number of milliseconds to throttle executions to.\n   * @param {Object} [options] The options object.\n   * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.\n   * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n   * @returns {Function} Returns the new throttled function.\n   * @example\n   *\n   * // avoid excessively updating the position while scrolling\n   * var throttled = _.throttle(updatePosition, 100);\n   * jQuery(window).on('scroll', throttled);\n   *\n   * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes\n   * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n   *   'trailing': false\n   * }));\n   */\n  function throttle(func, wait, options) {\n    var leading = true,\n        trailing = true;\n\n    if (!isFunction(func)) {\n      throw new TypeError;\n    }\n    if (options === false) {\n      leading = false;\n    } else if (isObject(options)) {\n      leading = 'leading' in options ? options.leading : leading;\n      trailing = 'trailing' in options ? options.trailing : trailing;\n    }\n    options = {};\n    options.leading = leading;\n    options.maxWait = wait;\n    options.trailing = trailing;\n\n    return debounce(func, wait, options);\n  }\n\n  /**\n   * Creates a function that provides `value` to the wrapper function as its\n   * first argument. Additional arguments provided to the function are appended\n   * to those provided to the wrapper function. The wrapper is executed with\n   * the `this` binding of the created function.\n   *\n   * @static\n   * @memberOf _\n   * @category Functions\n   * @param {*} value The value to wrap.\n   * @param {Function} wrapper The wrapper function.\n   * @returns {Function} Returns the new function.\n   * @example\n   *\n   * var p = _.wrap(_.escape, function(func, text) {\n   *   return '<p>' + func(text) + '</p>';\n   * });\n   *\n   * p('Fred, Wilma, & Pebbles');\n   * // => '<p>Fred, Wilma, &amp; Pebbles</p>'\n   */\n  function wrap(value, wrapper) {\n    return createWrapper(wrapper, 16, [value]);\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Produces a callback bound to an optional `thisArg`. If `func` is a property\n   * name the created callback will return the property value for a given element.\n   * If `func` is an object the created callback will return `true` for elements\n   * that contain the equivalent object properties, otherwise it will return `false`.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {*} [func=identity] The value to convert to a callback.\n   * @param {*} [thisArg] The `this` binding of the created callback.\n   * @param {number} [argCount] The number of arguments the callback accepts.\n   * @returns {Function} Returns a callback function.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * // wrap to create custom callback shorthands\n   * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {\n   *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);\n   *   return !match ? func(callback, thisArg) : function(object) {\n   *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];\n   *   };\n   * });\n   *\n   * _.filter(characters, 'age__gt38');\n   * // => [{ 'name': 'fred', 'age': 40 }]\n   */\n  function createCallback(func, thisArg, argCount) {\n    var type = typeof func;\n    if (func == null || type == 'function') {\n      return baseCreateCallback(func, thisArg, argCount);\n    }\n    // handle \"_.pluck\" style callback shorthands\n    if (type != 'object') {\n      return property(func);\n    }\n    var props = keys(func);\n    return function(object) {\n      var length = props.length,\n          result = false;\n\n      while (length--) {\n        if (!(result = object[props[length]] === func[props[length]])) {\n          break;\n        }\n      }\n      return result;\n    };\n  }\n\n  /**\n   * Converts the characters `&`, `<`, `>`, `\"`, and `'` in `string` to their\n   * corresponding HTML entities.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {string} string The string to escape.\n   * @returns {string} Returns the escaped string.\n   * @example\n   *\n   * _.escape('Fred, Wilma, & Pebbles');\n   * // => 'Fred, Wilma, &amp; Pebbles'\n   */\n  function escape(string) {\n    return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);\n  }\n\n  /**\n   * This method returns the first argument provided to it.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {*} value Any value.\n   * @returns {*} Returns `value`.\n   * @example\n   *\n   * var object = { 'name': 'fred' };\n   * _.identity(object) === object;\n   * // => true\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Adds function properties of a source object to the destination object.\n   * If `object` is a function methods will be added to its prototype as well.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {Function|Object} [object=lodash] object The destination object.\n   * @param {Object} source The object of functions to add.\n   * @param {Object} [options] The options object.\n   * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.\n   * @example\n   *\n   * function capitalize(string) {\n   *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n   * }\n   *\n   * _.mixin({ 'capitalize': capitalize });\n   * _.capitalize('fred');\n   * // => 'Fred'\n   *\n   * _('fred').capitalize().value();\n   * // => 'Fred'\n   *\n   * _.mixin({ 'capitalize': capitalize }, { 'chain': false });\n   * _('fred').capitalize();\n   * // => 'Fred'\n   */\n  function mixin(object) {\n    forEach(functions(object), function(methodName) {\n      var func = lodash[methodName] = object[methodName];\n\n      lodash.prototype[methodName] = function() {\n        var args = [this.__wrapped__];\n        push.apply(args, arguments);\n\n        var result = func.apply(lodash, args);\n        return this.__chain__\n          ? new lodashWrapper(result, true)\n          : result;\n      };\n    });\n  }\n\n  /**\n   * Reverts the '_' variable to its previous value and returns a reference to\n   * the `lodash` function.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @returns {Function} Returns the `lodash` function.\n   * @example\n   *\n   * var lodash = _.noConflict();\n   */\n  function noConflict() {\n    root._ = oldDash;\n    return this;\n  }\n\n  /**\n   * A no-operation function.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @example\n   *\n   * var object = { 'name': 'fred' };\n   * _.noop(object) === undefined;\n   * // => true\n   */\n  function noop() {\n    // no operation performed\n  }\n\n  /**\n   * Gets the number of milliseconds that have elapsed since the Unix epoch\n   * (1 January 1970 00:00:00 UTC).\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @example\n   *\n   * var stamp = _.now();\n   * _.defer(function() { console.log(_.now() - stamp); });\n   * // => logs the number of milliseconds it took for the deferred function to be called\n   */\n  var now = isNative(now = Date.now) && now || function() {\n    return new Date().getTime();\n  };\n\n  /**\n   * Creates a \"_.pluck\" style function, which returns the `key` value of a\n   * given object.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {string} key The name of the property to retrieve.\n   * @returns {Function} Returns the new function.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'fred',   'age': 40 },\n   *   { 'name': 'barney', 'age': 36 }\n   * ];\n   *\n   * var getName = _.property('name');\n   *\n   * _.map(characters, getName);\n   * // => ['barney', 'fred']\n   *\n   * _.sortBy(characters, getName);\n   * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]\n   */\n  function property(key) {\n    return function(object) {\n      return object[key];\n    };\n  }\n\n  /**\n   * Produces a random number between `min` and `max` (inclusive). If only one\n   * argument is provided a number between `0` and the given number will be\n   * returned. If `floating` is truey or either `min` or `max` are floats a\n   * floating-point number will be returned instead of an integer.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {number} [min=0] The minimum possible value.\n   * @param {number} [max=1] The maximum possible value.\n   * @param {boolean} [floating=false] Specify returning a floating-point number.\n   * @returns {number} Returns a random number.\n   * @example\n   *\n   * _.random(0, 5);\n   * // => an integer between 0 and 5\n   *\n   * _.random(5);\n   * // => also an integer between 0 and 5\n   *\n   * _.random(5, true);\n   * // => a floating-point number between 0 and 5\n   *\n   * _.random(1.2, 5.2);\n   * // => a floating-point number between 1.2 and 5.2\n   */\n  function random(min, max) {\n    if (min == null && max == null) {\n      max = 1;\n    }\n    min = +min || 0;\n    if (max == null) {\n      max = min;\n      min = 0;\n    } else {\n      max = +max || 0;\n    }\n    return min + floor(nativeRandom() * (max - min + 1));\n  }\n\n  /**\n   * Resolves the value of property `key` on `object`. If `key` is a function\n   * it will be invoked with the `this` binding of `object` and its result returned,\n   * else the property value is returned. If `object` is falsey then `undefined`\n   * is returned.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {Object} object The object to inspect.\n   * @param {string} key The name of the property to resolve.\n   * @returns {*} Returns the resolved value.\n   * @example\n   *\n   * var object = {\n   *   'cheese': 'crumpets',\n   *   'stuff': function() {\n   *     return 'nonsense';\n   *   }\n   * };\n   *\n   * _.result(object, 'cheese');\n   * // => 'crumpets'\n   *\n   * _.result(object, 'stuff');\n   * // => 'nonsense'\n   */\n  function result(object, key) {\n    if (object) {\n      var value = object[key];\n      return isFunction(value) ? object[key]() : value;\n    }\n  }\n\n  /**\n   * A micro-templating method that handles arbitrary delimiters, preserves\n   * whitespace, and correctly escapes quotes within interpolated code.\n   *\n   * Note: In the development build, `_.template` utilizes sourceURLs for easier\n   * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n   *\n   * For more information on precompiling templates see:\n   * http://lodash.com/custom-builds\n   *\n   * For more information on Chrome extension sandboxes see:\n   * http://developer.chrome.com/stable/extensions/sandboxingEval.html\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {string} text The template text.\n   * @param {Object} data The data object used to populate the text.\n   * @param {Object} [options] The options object.\n   * @param {RegExp} [options.escape] The \"escape\" delimiter.\n   * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n   * @param {Object} [options.imports] An object to import into the template as local variables.\n   * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n   * @param {string} [sourceURL] The sourceURL of the template's compiled source.\n   * @param {string} [variable] The data object variable name.\n   * @returns {Function|string} Returns a compiled function when no `data` object\n   *  is given, else it returns the interpolated text.\n   * @example\n   *\n   * // using the \"interpolate\" delimiter to create a compiled template\n   * var compiled = _.template('hello <%= name %>');\n   * compiled({ 'name': 'fred' });\n   * // => 'hello fred'\n   *\n   * // using the \"escape\" delimiter to escape HTML in data property values\n   * _.template('<b><%- value %></b>', { 'value': '<script>' });\n   * // => '<b>&lt;script&gt;</b>'\n   *\n   * // using the \"evaluate\" delimiter to generate HTML\n   * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';\n   * _.template(list, { 'people': ['fred', 'barney'] });\n   * // => '<li>fred</li><li>barney</li>'\n   *\n   * // using the ES6 delimiter as an alternative to the default \"interpolate\" delimiter\n   * _.template('hello ${ name }', { 'name': 'pebbles' });\n   * // => 'hello pebbles'\n   *\n   * // using the internal `print` function in \"evaluate\" delimiters\n   * _.template('<% print(\"hello \" + name); %>!', { 'name': 'barney' });\n   * // => 'hello barney!'\n   *\n   * // using a custom template delimiters\n   * _.templateSettings = {\n   *   'interpolate': /{{([\\s\\S]+?)}}/g\n   * };\n   *\n   * _.template('hello {{ name }}!', { 'name': 'mustache' });\n   * // => 'hello mustache!'\n   *\n   * // using the `imports` option to import jQuery\n   * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';\n   * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });\n   * // => '<li>fred</li><li>barney</li>'\n   *\n   * // using the `sourceURL` option to specify a custom sourceURL for the template\n   * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });\n   * compiled(data);\n   * // => find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector\n   *\n   * // using the `variable` option to ensure a with-statement isn't used in the compiled template\n   * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });\n   * compiled.source;\n   * // => function(data) {\n   *   var __t, __p = '', __e = _.escape;\n   *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';\n   *   return __p;\n   * }\n   *\n   * // using the `source` property to inline compiled templates for meaningful\n   * // line numbers in error messages and a stack trace\n   * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\n   *   var JST = {\\\n   *     \"main\": ' + _.template(mainText).source + '\\\n   *   };\\\n   * ');\n   */\n  function template(text, data, options) {\n    var _ = lodash,\n        settings = _.templateSettings;\n\n    text = String(text || '');\n    options = defaults({}, options, settings);\n\n    var index = 0,\n        source = \"__p += '\",\n        variable = options.variable;\n\n    var reDelimiters = RegExp(\n      (options.escape || reNoMatch).source + '|' +\n      (options.interpolate || reNoMatch).source + '|' +\n      (options.evaluate || reNoMatch).source + '|$'\n    , 'g');\n\n    text.replace(reDelimiters, function(match, escapeValue, interpolateValue, evaluateValue, offset) {\n      source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n      if (escapeValue) {\n        source += \"' +\\n_.escape(\" + escapeValue + \") +\\n'\";\n      }\n      if (evaluateValue) {\n        source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n      }\n      if (interpolateValue) {\n        source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n      }\n      index = offset + match.length;\n      return match;\n    });\n\n    source += \"';\\n\";\n    if (!variable) {\n      variable = 'obj';\n      source = 'with (' + variable + ' || {}) {\\n' + source + '\\n}\\n';\n    }\n    source = 'function(' + variable + ') {\\n' +\n      \"var __t, __p = '', __j = Array.prototype.join;\\n\" +\n      \"function print() { __p += __j.call(arguments, '') }\\n\" +\n      source +\n      'return __p\\n}';\n\n    try {\n      var result = Function('_', 'return ' + source)(_);\n    } catch(e) {\n      e.source = source;\n      throw e;\n    }\n    if (data) {\n      return result(data);\n    }\n    result.source = source;\n    return result;\n  }\n\n  /**\n   * Executes the callback `n` times, returning an array of the results\n   * of each callback execution. The callback is bound to `thisArg` and invoked\n   * with one argument; (index).\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {number} n The number of times to execute the callback.\n   * @param {Function} callback The function called per iteration.\n   * @param {*} [thisArg] The `this` binding of `callback`.\n   * @returns {Array} Returns an array of the results of each `callback` execution.\n   * @example\n   *\n   * var diceRolls = _.times(3, _.partial(_.random, 1, 6));\n   * // => [3, 6, 4]\n   *\n   * _.times(3, function(n) { mage.castSpell(n); });\n   * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively\n   *\n   * _.times(3, function(n) { this.cast(n); }, mage);\n   * // => also calls `mage.castSpell(n)` three times\n   */\n  function times(n, callback, thisArg) {\n    n = (n = +n) > -1 ? n : 0;\n    var index = -1,\n        result = Array(n);\n\n    callback = baseCreateCallback(callback, thisArg, 1);\n    while (++index < n) {\n      result[index] = callback(index);\n    }\n    return result;\n  }\n\n  /**\n   * The inverse of `_.escape` this method converts the HTML entities\n   * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their\n   * corresponding characters.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {string} string The string to unescape.\n   * @returns {string} Returns the unescaped string.\n   * @example\n   *\n   * _.unescape('Fred, Barney &amp; Pebbles');\n   * // => 'Fred, Barney & Pebbles'\n   */\n  function unescape(string) {\n    return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);\n  }\n\n  /**\n   * Generates a unique ID. If `prefix` is provided the ID will be appended to it.\n   *\n   * @static\n   * @memberOf _\n   * @category Utilities\n   * @param {string} [prefix] The value to prefix the ID with.\n   * @returns {string} Returns the unique ID.\n   * @example\n   *\n   * _.uniqueId('contact_');\n   * // => 'contact_104'\n   *\n   * _.uniqueId();\n   * // => '105'\n   */\n  function uniqueId(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Creates a `lodash` object that wraps the given value with explicit\n   * method chaining enabled.\n   *\n   * @static\n   * @memberOf _\n   * @category Chaining\n   * @param {*} value The value to wrap.\n   * @returns {Object} Returns the wrapper object.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney',  'age': 36 },\n   *   { 'name': 'fred',    'age': 40 },\n   *   { 'name': 'pebbles', 'age': 1 }\n   * ];\n   *\n   * var youngest = _.chain(characters)\n   *     .sortBy('age')\n   *     .map(function(chr) { return chr.name + ' is ' + chr.age; })\n   *     .first()\n   *     .value();\n   * // => 'pebbles is 1'\n   */\n  function chain(value) {\n    value = new lodashWrapper(value);\n    value.__chain__ = true;\n    return value;\n  }\n\n  /**\n   * Invokes `interceptor` with the `value` as the first argument and then\n   * returns `value`. The purpose of this method is to \"tap into\" a method\n   * chain in order to perform operations on intermediate results within\n   * the chain.\n   *\n   * @static\n   * @memberOf _\n   * @category Chaining\n   * @param {*} value The value to provide to `interceptor`.\n   * @param {Function} interceptor The function to invoke.\n   * @returns {*} Returns `value`.\n   * @example\n   *\n   * _([1, 2, 3, 4])\n   *  .tap(function(array) { array.pop(); })\n   *  .reverse()\n   *  .value();\n   * // => [3, 2, 1]\n   */\n  function tap(value, interceptor) {\n    interceptor(value);\n    return value;\n  }\n\n  /**\n   * Enables explicit method chaining on the wrapper object.\n   *\n   * @name chain\n   * @memberOf _\n   * @category Chaining\n   * @returns {*} Returns the wrapper object.\n   * @example\n   *\n   * var characters = [\n   *   { 'name': 'barney', 'age': 36 },\n   *   { 'name': 'fred',   'age': 40 }\n   * ];\n   *\n   * // without explicit chaining\n   * _(characters).first();\n   * // => { 'name': 'barney', 'age': 36 }\n   *\n   * // with explicit chaining\n   * _(characters).chain()\n   *   .first()\n   *   .pick('age')\n   *   .value();\n   * // => { 'age': 36 }\n   */\n  function wrapperChain() {\n    this.__chain__ = true;\n    return this;\n  }\n\n  /**\n   * Extracts the wrapped value.\n   *\n   * @name valueOf\n   * @memberOf _\n   * @alias value\n   * @category Chaining\n   * @returns {*} Returns the wrapped value.\n   * @example\n   *\n   * _([1, 2, 3]).valueOf();\n   * // => [1, 2, 3]\n   */\n  function wrapperValueOf() {\n    return this.__wrapped__;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  // add functions that return wrapped values when chaining\n  lodash.after = after;\n  lodash.bind = bind;\n  lodash.bindAll = bindAll;\n  lodash.chain = chain;\n  lodash.compact = compact;\n  lodash.compose = compose;\n  lodash.countBy = countBy;\n  lodash.debounce = debounce;\n  lodash.defaults = defaults;\n  lodash.defer = defer;\n  lodash.delay = delay;\n  lodash.difference = difference;\n  lodash.filter = filter;\n  lodash.flatten = flatten;\n  lodash.forEach = forEach;\n  lodash.functions = functions;\n  lodash.groupBy = groupBy;\n  lodash.indexBy = indexBy;\n  lodash.initial = initial;\n  lodash.intersection = intersection;\n  lodash.invert = invert;\n  lodash.invoke = invoke;\n  lodash.keys = keys;\n  lodash.map = map;\n  lodash.max = max;\n  lodash.memoize = memoize;\n  lodash.min = min;\n  lodash.omit = omit;\n  lodash.once = once;\n  lodash.pairs = pairs;\n  lodash.partial = partial;\n  lodash.pick = pick;\n  lodash.pluck = pluck;\n  lodash.range = range;\n  lodash.reject = reject;\n  lodash.rest = rest;\n  lodash.shuffle = shuffle;\n  lodash.sortBy = sortBy;\n  lodash.tap = tap;\n  lodash.throttle = throttle;\n  lodash.times = times;\n  lodash.toArray = toArray;\n  lodash.union = union;\n  lodash.uniq = uniq;\n  lodash.values = values;\n  lodash.where = where;\n  lodash.without = without;\n  lodash.wrap = wrap;\n  lodash.zip = zip;\n\n  // add aliases\n  lodash.collect = map;\n  lodash.drop = rest;\n  lodash.each = forEach;\n  lodash.extend = assign;\n  lodash.methods = functions;\n  lodash.object = zipObject;\n  lodash.select = filter;\n  lodash.tail = rest;\n  lodash.unique = uniq;\n\n  /*--------------------------------------------------------------------------*/\n\n  // add functions that return unwrapped values when chaining\n  lodash.clone = clone;\n  lodash.contains = contains;\n  lodash.escape = escape;\n  lodash.every = every;\n  lodash.find = find;\n  lodash.has = has;\n  lodash.identity = identity;\n  lodash.indexOf = indexOf;\n  lodash.isArguments = isArguments;\n  lodash.isArray = isArray;\n  lodash.isBoolean = isBoolean;\n  lodash.isDate = isDate;\n  lodash.isElement = isElement;\n  lodash.isEmpty = isEmpty;\n  lodash.isEqual = isEqual;\n  lodash.isFinite = isFinite;\n  lodash.isFunction = isFunction;\n  lodash.isNaN = isNaN;\n  lodash.isNull = isNull;\n  lodash.isNumber = isNumber;\n  lodash.isObject = isObject;\n  lodash.isRegExp = isRegExp;\n  lodash.isString = isString;\n  lodash.isUndefined = isUndefined;\n  lodash.lastIndexOf = lastIndexOf;\n  lodash.mixin = mixin;\n  lodash.noConflict = noConflict;\n  lodash.random = random;\n  lodash.reduce = reduce;\n  lodash.reduceRight = reduceRight;\n  lodash.result = result;\n  lodash.size = size;\n  lodash.some = some;\n  lodash.sortedIndex = sortedIndex;\n  lodash.template = template;\n  lodash.unescape = unescape;\n  lodash.uniqueId = uniqueId;\n\n  // add aliases\n  lodash.all = every;\n  lodash.any = some;\n  lodash.detect = find;\n  lodash.findWhere = findWhere;\n  lodash.foldl = reduce;\n  lodash.foldr = reduceRight;\n  lodash.include = contains;\n  lodash.inject = reduce;\n\n  /*--------------------------------------------------------------------------*/\n\n  // add functions capable of returning wrapped and unwrapped values when chaining\n  lodash.first = first;\n  lodash.last = last;\n  lodash.sample = sample;\n\n  // add aliases\n  lodash.take = first;\n  lodash.head = first;\n\n  /*--------------------------------------------------------------------------*/\n\n  // add functions to `lodash.prototype`\n  mixin(lodash);\n\n  /**\n   * The semantic version number.\n   *\n   * @static\n   * @memberOf _\n   * @type string\n   */\n  lodash.VERSION = '2.4.1';\n\n  // add \"Chaining\" functions to the wrapper\n  lodash.prototype.chain = wrapperChain;\n  lodash.prototype.value = wrapperValueOf;\n\n    // add `Array` mutator functions to the wrapper\n    forEach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__;\n        func.apply(value, arguments);\n\n        // avoid array-like object bugs with `Array#shift` and `Array#splice`\n        // in Firefox < 10 and IE < 9\n        if (!support.spliceObjects && value.length === 0) {\n          delete value[0];\n        }\n        return this;\n      };\n    });\n\n    // add `Array` accessor functions to the wrapper\n    forEach(['concat', 'join', 'slice'], function(methodName) {\n      var func = arrayRef[methodName];\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            result = func.apply(value, arguments);\n\n        if (this.__chain__) {\n          result = new lodashWrapper(result);\n          result.__chain__ = true;\n        }\n        return result;\n      };\n    });\n\n  /*--------------------------------------------------------------------------*/\n\n  // some AMD build optimizers like r.js check for condition patterns like the following:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lo-Dash to the global object even when an AMD loader is present in\n    // case Lo-Dash is loaded with a RequireJS shim config.\n    // See http://requirejs.org/docs/api.html#config-shim\n    root._ = lodash;\n\n    // define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module\n    define(function() {\n      return lodash;\n    });\n  }\n  // check for `exports` after `define` in case a build optimizer adds an `exports` object\n  else if (freeExports && freeModule) {\n    // in Node.js or RingoJS\n    if (moduleExports) {\n      (freeModule.exports = lodash)._ = lodash;\n    }\n    // in Narwhal or Rhino -require\n    else {\n      freeExports._ = lodash;\n    }\n  }\n  else {\n    // in a browser or Rhino\n    root._ = lodash;\n  }\n}.call(this));\n"
  },
  {
    "path": "client/components/normalize-css/.bower.json",
    "content": "{\n  \"name\": \"normalize-css\",\n  \"version\": \"3.0.2\",\n  \"main\": \"normalize.css\",\n  \"author\": \"Nicolas Gallagher\",\n  \"ignore\": [\n    \"CHANGELOG.md\",\n    \"CONTRIBUTING.md\",\n    \"component.json\",\n    \"package.json\",\n    \"test.html\"\n  ],\n  \"homepage\": \"https://github.com/necolas/normalize.css\",\n  \"_release\": \"3.0.2\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"3.0.2\",\n    \"commit\": \"2334aed3efee9f4dd2297c4e6f4c0021b3279c7a\"\n  },\n  \"_source\": \"git://github.com/necolas/normalize.css.git\",\n  \"_target\": \"~3.0.2\",\n  \"_originalSource\": \"normalize-css\"\n}"
  },
  {
    "path": "client/components/normalize-css/LICENSE.md",
    "content": "Copyright (c) Nicolas Gallagher and Jonathan Neal\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "client/components/normalize-css/README.md",
    "content": "# normalize.css v3\n\nNormalize.css is a customisable CSS file that makes browsers render all\nelements more consistently and in line with modern standards.\n\nThe project relies on researching the differences between default browser\nstyles in order to precisely target only the styles that need or benefit from\nnormalizing.\n\n[View the test file](http://necolas.github.io/normalize.css/latest/test.html)\n\n## Install\n\n* [npm](http://npmjs.org/): `npm install --save normalize.css`\n* [Component(1)](https://github.com/component/component/): `component install necolas/normalize.css`\n* [Bower](http://bower.io/): `bower install --save normalize.css`\n* [Download](http://necolas.github.io/normalize.css/latest/normalize.css).\n\nNo other styles should come before Normalize.css.\n\nIt is recommended that you include the `normalize.css` file as untouched\nlibrary code.\n\n## What does it do?\n\n* Preserves useful defaults, unlike many CSS resets.\n* Normalizes styles for a wide range of elements.\n* Corrects bugs and common browser inconsistencies.\n* Improves usability with subtle improvements.\n* Explains what code does using detailed comments.\n\n## Browser support\n\n* Google Chrome (latest)\n* Mozilla Firefox (latest)\n* Mozilla Firefox 4\n* Opera (latest)\n* Apple Safari 6+\n* Internet Explorer 8+\n\n[Normalize.css v1 provides legacy browser\nsupport](https://github.com/necolas/normalize.css/tree/v1) (IE 6+, Safari 4+),\nbut is no longer actively developed.\n\n## Extended details\n\nAdditional detail and explanation of the esoteric parts of normalize.css.\n\n#### `pre, code, kbd, samp`\n\nThe `font-family: monospace, monospace` hack fixes the inheritance and scaling\nof font-size for preformated text. The duplication of `monospace` is\nintentional.  [Source](http://en.wikipedia.org/wiki/User:Davidgothberg/Test59).\n\n#### `sub, sup`\n\nNormally, using `sub` or `sup` affects the line-box height of text in all\nbrowsers. [Source](http://gist.github.com/413930).\n\n#### `svg:not(:root)`\n\nAdding `overflow: hidden` fixes IE9's SVG rendering. Earlier versions of IE\ndon't support SVG, so we can safely use the `:not()` and `:root` selectors that\nmodern browsers use in the default UA stylesheets to apply this style. [SVG\nMailing List discussion](http://lists.w3.org/Archives/Public/public-svg-wg/2008JulSep/0339.html)\n\n#### `input[type=\"search\"]`\n\nThe search input is not fully stylable by default. In Chrome and Safari on\nOSX/iOS you can't control `font`, `padding`, `border`, or `background`. In\nChrome and Safari on Windows you can't control `border` properly. It will apply\n`border-width` but will only show a border color (which cannot be controlled)\nfor the outer 1px of that border. Applying `-webkit-appearance: textfield`\naddresses these issues without removing the benefits of search inputs (e.g.\nshowing past searches).\n\n#### `legend`\n\nAdding `border: 0` corrects an IE 8–11 bug where `color` (yes, `color`) is not\ninherited by `legend`.\n\n## Contributing\n\nPlease read the CONTRIBUTING.md\n\n## Acknowledgements\n\nNormalize.css is a project by [Nicolas Gallagher](https://github.com/necolas),\nco-created with [Jonathan Neal](https://github.com/jonathantneal).\n"
  },
  {
    "path": "client/components/normalize-css/bower.json",
    "content": "{\n  \"name\": \"normalize-css\",\n  \"version\": \"3.0.2\",\n  \"main\": \"normalize.css\",\n  \"author\": \"Nicolas Gallagher\",\n  \"ignore\": [\n    \"CHANGELOG.md\",\n    \"CONTRIBUTING.md\",\n    \"component.json\",\n    \"package.json\",\n    \"test.html\"\n  ]\n}\n"
  },
  {
    "path": "client/components/normalize-css/normalize.css",
    "content": "/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "client/components/plugin-json/.bower.json",
    "content": "{\n  \"name\": \"plugin-json\",\n  \"homepage\": \"https://github.com/systemjs/plugin-json\",\n  \"version\": \"0.1.0\",\n  \"_release\": \"0.1.0\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.1.0\",\n    \"commit\": \"476c01034237dfec4dec8c94a59e3bd0750bdf03\"\n  },\n  \"_source\": \"git@github.com:systemjs/plugin-json.git\",\n  \"_target\": \"*\",\n  \"_originalSource\": \"git@github.com:systemjs/plugin-json.git\"\n}"
  },
  {
    "path": "client/components/plugin-json/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 jspm\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "client/components/plugin-json/README.md",
    "content": "plugin-json\n===========\n\nJSON loader plugin\n"
  },
  {
    "path": "client/components/plugin-json/json.js",
    "content": "/*\n  JSON plugin\n*/\nexports.translate = function(load) {\n  return 'module.exports = ' + load.source;\n}"
  },
  {
    "path": "client/components/plugin-json/json.json",
    "content": "{\n  \"some\": \"json\"\n}"
  },
  {
    "path": "client/components/plugin-json/package.json",
    "content": "{\n  \"main\": \"json\"\n}\n"
  },
  {
    "path": "client/components/plugin-json/test.html",
    "content": "<script src=\"../es6-module-loader/dist/es6-module-loader.js\"></script>\n<script src=\"../systemjs/dist/system.js\"></script>\n<script>\n  System.import('json.json!').then(console.log.bind(console));\n</script>"
  },
  {
    "path": "client/components/plugin-text/.bower.json",
    "content": "{\n  \"name\": \"plugin-text\",\n  \"homepage\": \"https://github.com/systemjs/plugin-text\",\n  \"version\": \"0.0.2\",\n  \"_release\": \"0.0.2\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.0.2\",\n    \"commit\": \"3f05122b725d091a193b679946efbac23effebf4\"\n  },\n  \"_source\": \"git@github.com:systemjs/plugin-text.git\",\n  \"_target\": \"*\",\n  \"_originalSource\": \"git@github.com:systemjs/plugin-text.git\"\n}"
  },
  {
    "path": "client/components/plugin-text/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 jspm\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "client/components/plugin-text/README.md",
    "content": "plugin-text\n===========\n\nText plugin\n"
  },
  {
    "path": "client/components/plugin-text/package.json",
    "content": "{\n  \"main\": \"text\"\n}\n"
  },
  {
    "path": "client/components/plugin-text/test.html",
    "content": "<script src=\"../es6-module-loader/dist/es6-module-loader.js\"></script>\n<script src=\"../systemjs/dist/system.js\"></script>\n<script>\n  System.import('text.txt!text').then(console.log.bind(console));\n</script>"
  },
  {
    "path": "client/components/plugin-text/text.js",
    "content": "/*\n  Text plugin\n*/\nexports.translate = function(load) {\n  return 'module.exports = \"' + load.source\n    .replace(/([\"\\\\])/g, '\\\\$1')\n    .replace(/[\\f]/g, \"\\\\f\")\n    .replace(/[\\b]/g, \"\\\\b\")\n    .replace(/[\\n]/g, \"\\\\n\")\n    .replace(/[\\t]/g, \"\\\\t\")\n    .replace(/[\\r]/g, \"\\\\r\")\n    .replace(/[\\u2028]/g, \"\\\\u2028\")\n    .replace(/[\\u2029]/g, \"\\\\u2029\")\n  + '\";';\n}"
  },
  {
    "path": "client/components/plugin-text/text.txt",
    "content": "This is\nSome text\n\n\"yay\""
  },
  {
    "path": "client/components/system.js/.bower.json",
    "content": "{\n  \"name\": \"system.js\",\n  \"version\": \"0.10.2\",\n  \"main\": \"dist/system.js\",\n  \"dependencies\": {\n    \"es6-module-loader\": \"~0.10.0\"\n  },\n  \"devDependencies\": {\n    \"qunit\": \"~1.12.0\"\n  },\n  \"ignore\": [\n    \"test\",\n    \"Makefile\",\n    \"package.json\"\n  ],\n  \"homepage\": \"https://github.com/systemjs/systemjs\",\n  \"_release\": \"0.10.2\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.10.2\",\n    \"commit\": \"ba271aa257bb0f8270197720c0dba15b0012ea42\"\n  },\n  \"_source\": \"git://github.com/systemjs/systemjs.git\",\n  \"_target\": \"~0.10.2\",\n  \"_originalSource\": \"system.js\"\n}"
  },
  {
    "path": "client/components/system.js/.gitignore",
    "content": "node_modules\nbower_components\n"
  },
  {
    "path": "client/components/system.js/LICENSE",
    "content": "MIT License\n-----------\n\nCopyright (C) 2013 Guy Bedford\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "client/components/system.js/README.md",
    "content": "SystemJS\n========\n\nSpec-compliant universal module loader - loads ES6 modules, AMD, CommonJS and global scripts.\n\nDesigned as a collection of small extensions to the ES6 specification System loader, which can also be applied individually.\n\n* Loads any module format, by detecting the format automatically. Modules can also [specify their format with meta config](#meta-configuration).\n* Provides comprehensive and exact replications of AMD, CommonJS and ES6 circular reference handling.\n* Loads [ES6 modules compiled into the `System.register` form for production](#es6-systemregister-compilation), maintaining full circular references support.\n* Supports RequireJS-style [map](#map-configuration), [paths](https://github.com/ModuleLoader/es6-module-loader#paths-implementation), [bundles](#bundles), [shim](#global-module-format-support) and [plugins](#plugins).\n* Tracks package versions, and resolves semver-compatibile requests through [package version syntax](#versions) - `package@x.y.z`, `package^@x.y.z`.\n* [Loader plugins](#plugins) allow loading assets through the module naming system such as CSS, JSON or images.\n\nDesigned to work with the [ES6 Module Loader polyfill](https://github.com/ModuleLoader/es6-module-loader) (9KB) for a combined total footprint of 16KB minified and gzipped. In future, with native implementations, the ES6 Module Loader polyfill should no longer be necessary. As jQuery provides for the DOM, this library can smooth over inconsistiencies and missing practical functionality provided by the native System loader.\n\nRuns in IE8+ and NodeJS.\n\nFor discussion, [see the Google Group](https://groups.google.com/group/systemjs).\n\nBasic Configuration\n---\n\n### Setup\n\nDownload [`es6-module-loader.js`](https://github.com/ModuleLoader/es6-module-loader/blob/v0.9.4/dist/es6-module-loader.js) and [`traceur.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur/0.0.72/traceur.js) and locate them in the same folder as `system.js` from this repo.\n\nWe then include `dist/system.js` with a script tag in the page.\n\n`es6-module-loader.js` will then be included from the same folder automatically and [Traceur](https://github.com/google/traceur-compiler) is dynamically included from `traceur.js` when loading an ES6 module only.\n\nAlternatively, `es6-module-loader.js` or `traceur.js` can be included before `system.js` with a script tag in the page.\n\n### Simple Application Structure\n\nThe standard application structure would be something like the following:\n\nindex.html:\n```html\n<script src=\"system.js\"></script>\n<script>\n  // Identical to writing System.baseURL = ...\n  System.config({\n\n    // set all requires to \"lib\" for library code\n    baseURL: '/lib',\n    \n    // set \"app\" as an exception for our application code\n    paths: {\n      'app/*': '/app/*.js'\n    }\n  });\n\n  System.import('app/app')\n</script>\n```\n\napp/app.js:\n```javascript\n  // relative require for within the package\n  require('./local-dep');    // -> /app/local-dep.js\n\n  // library resource\n  var $ = require('jquery'); // -> /lib/jquery.js\n\n  // format detected automatically\n  console.log('loaded CommonJS');\n```\n\nModule format detection happens in the order System.register, ES6, AMD, then CommonJS and falls back to global modules.\n\nNamed defines are also supported, with the return value for a module containing named defines being its last named define.\n\n> _Note that when running locally, ensure you are running from a local server or a browser with local XHR requests enabled. If not you will get an error message._\n\n> _For Chrome on Mac, you can run it with: `/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --allow-file-access-from-files &> /dev/null &`_\n\n> _In Firefox this requires navigating to `about:config`, entering `security.fileuri.strict_origin_policy` in the filter box and toggling the option to false._\n\n### Loading ES6\n\napp/es6-file.js:\n```javascript\n  export class q {\n    constructor() {\n      this.es6 = 'yay';\n    }\n  }\n```\n\n```html\n  <script>\n    System.import('app/es6-file').then(function(m) {\n      console.log(new m.q().es6); // yay\n    });\n  </script>\n```\n\nES6 modules define named exports, provided as getters on a special immutable `Module` object.\n\nTo build for production, see the [System.register build workflow](#es6-systemregister-compilation).\n\nFor further infomation on ES6 module loading, see the [ES6 Module Loader polyfill documentation](https://github.com/ModuleLoader/es6-module-loader).\n\n### Loading Other Formats\n\nWhen loading from CommonJS, AMD or globals, SystemJS will detect the format automatically.\n\nAny module type can be loaded from any other type.\n\nWhen loading CommonJS, AMD or globals from ES6, use the `default` import syntax:\n\napp/es6-loading-commonjs:\n```javascript\nimport _ from './underscore';\n```\n\nWhere underscore.js is located in the same folder.\n\nFeatures\n---\n\n### Map Configuration\n\nMap configuration alters the module name at the normalization stage. It is useful for creating aliases:\n\n```javascript\n  System.map['jquery'] = 'location/for/jquery';\n\n  System.import('jquery')           // -> 'location/for/jquery'\n  System.import('jquery/submodule') // -> `location/for/jquery/submodule'\n```\n\nContexual map configuration can also be used to provide maps only for certain modules, which is useful for version mappings:\n\n```javascript  \n  System.map['some-module'] = {\n    jquery: 'jquery@2.0.3'\n  };\n\n  // some-module.js now gets 'jquery@2.0.3'\n  // everything else still gets 'location/for/jquery'\n```\n\nContextual maps apply from the most specific module name match only.\n\n### Meta Configuration\n\nThe ES6 module loader uses a special `metadata` object that is passed between hooks.\n\nAn example of meta config is the module format of a module, which is stored at `metadata.format`.\n\nThe meta extension opens up this object for setting defaults through `System.meta` as well as inline module syntax.\n\nIn this way, we can specify the module format of a module through config:\n\n```javascript\n  System.meta['some/module'] = {\n    format: 'amd'\n  };\n\n  System.import('some/module') // always loaded as AMD even if it is a UMD module\n```\n\nOr the module can even specify its own meta:\n\nsome/module.js\n```javascript\n  \"format amd\";\n\n  if (typeof module != 'undefined' && module.exports)\n    module.exports = 'cjs';\n  else\n    define(function() { return 'amd' });\n```\n\nSince it is impossible to write 100% accurate module detection, this inline `format` hint provides a useful way of informing the module format of a module.\n\nThe format options are - `register`, `es6`, `amd`, `cjs`, `global`.\n\n### Global Module Format Support\n\nWhen a module is loaded as a global, the global object is detected automatically from the change in the `window` properties:\n\napp/sample-global.js\n```javascript\n  hello = 'world';\n```\n\n```javascript\n  System.import('app/sample-global').then(function(m) {\n    m == 'world';\n  });\n```\n\nWhen multiple global properties are detected, the module object becomes the collection of those objects:\n\napp/multi-global.js\n```javascript\n  first = 'global1';\n  var second = 'global2';\n```\n\n```javascript\nSystem.import('app/multi-global').then(function(m) {\n  m.first == 'global1';\n  m.second == 'global2';\n});\n```\n\nGlobal dependencies can be specified with the `deps` [meta config](#meta-configuration):\n\napp/another-global.js\n```javascript\n  $(document).fn();\n  this.is = 'a global dependent on jQuery';\n```\n\n```javascript\n  System.meta['app/another-global'] = { deps: ['jquery'] };\n```\n\nNote that the name used in `System.meta` must be the fully normalized name that is returned by `Promise.resolve(System.normalize('module-name')).then(console.log.bind(console))`.\n\nThe `exports` meta config can also be set (using inline meta as an example):\n\napp/more-global.js\n```javascript\n  \"format global\";\n  \"deps jquery\";\n  \"exports my.export\";\n\n  (function(global) {\n    global.my = {\n      export: 'value'\n    };\n    $(document).fn();\n  })(typeof window != 'undefined' ? window : global);\n```\n\nThere is also supports for the `init` function meta config just like RequireJS as well.\n\n**IE8 Support**\n\nIn IE8, automatic global detection does not work for globals declared as variables or implicitly:\n\n```javascript\n  var someGlobal = 'IE8 wont detect this';\n  anotherGlobal = 'unless using an explicit shim';\n```\n\nIF IE8 support is needed, these exports will need to be declared manually with configuration.\n\n### Versions\n\nAn optional syntax for version support can be used: `moduleName@version`.\n\nFor example, consider an app which wants to specify the jQuery version through config:\n\n```javascript\n  System.versions['jquery'] = '2.0.3';\n```\n\nNow an import of the form:\n\n```javascript\n  System.import('jquery');\n```\n\nwill load a load will be made to the file `/lib/jquery@2.0.3.js`.\n\nThis centralises the version management to the configuration file, which is key to handling versions with correct caching.\n\nFor multi-version support, provide an array of versions:\n\n```javascript\n  System.versions['jquery'] = ['2.0.3', '1.8.3'];\n```\n\nThese correspond to `/lib/jquery@2.0.3.js` and `/lib/jquery@1.8.3.js`.\n\nSemver-compatible requires of any of the following forms can be used:\n\n```javascript\n  System.import('jquery')        // -> /lib/jquery@2.0.3.js\n  System.import('jquery@2')      // -> /lib/jquery@2.0.3.js\n  System.import('jquery@2.0')    // -> /lib/jquery@2.0.3.js\n  \n  System.import('jquery@1')      // -> /lib/jquery@1.8.3.js\n  System.import('jquery@1.8')    // -> /lib/jquery@1.8.3.js\n  System.import('jquery@1.8.2')  // -> /lib/jquery@1.8.2.js\n  \n  // semver compatible form (caret operator ^)\n  System.import('jquery@^2')     // -> /lib/jquery@2.0.3.js\n  System.import('jquery@^1.8.2') // -> /lib/jquery@1.8.3.js\n  System.import('jquery@^1.8')   // -> /lib/jquery@1.8.3.js\n```\n\n### Relative Dynamic Loading\n\nModules can check their own name from the global variable `__moduleName`. `__moduleAddress` is also available.\n\nThis allows easy relative dynamic loading, allowing modules to load additional functionality after the initial load:\n\n```javascript\nexport function moreFunctionality() {\n  return System.import('./extrafunctionality', { name: __moduleName });\n}\n```\n\nThis can be useful for modules that may only know during runtime which functionality they need to load.\n\n### Plugins\n\nPlugins handle alternative loading scenarios, including loading assets such as CSS or images, and providing custom transpilation scenarios.\n\nPlugins are indicated by `!` syntax, which unlike RequireJS is appended at the end of the module name, not the beginning.\n\nThe plugin name is just a module name itself, and if not specified, is assumed to be the extension name of the module.\n\nSupported Plugins:\n\n* [CSS](https://github.com/systemjs/plugin-css) `System.import('my/file.css!')`\n* [Image](https://github.com/systemjs/plugin-image) `System.import('some/image.png!image')`\n* [JSON](https://github.com/systemjs/plugin-json) `System.import('some/data.json!').then(function(json){})`\n* [Text](https://github.com/systemjs/plugin-text) `System.import('some/text.txt!text').then(function(text) {})`\n\nAdditional Plugins:\n\n* [Markdown](https://github.com/guybedford/plugin-md) `System.import('app/some/project/README.md!').then(function(html) {})`\n* [WebFont](https://github.com/guybedford/plugin-font) `System.import('google Port Lligat Slab, Droid Sans !font')`\n\nCreating custom plugins can be quite simple. See the plugins above, and [read the guide here](https://github.com/systemjs/systemjs/wiki/Creating-a-Plugin).\n\n### ES6 System.register Compilation\n\nIf writing an application in ES6, we can compile into ES5 with Traceur:\n\n```\n  npm install traceur -g\n```\n\n```\n  traceur --dir app app-built --modules=instantiate\n```\n\nThis will compile all ES6 files in the directory `app` into corresponding ES5 `System.register` files in `app-built`.\n\nThe `instantiate` modules option writes the modules out using a `System.register` call, which is supported by SystemJS.\n\nThen include [`traceur-runtime.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur/0.0.72/traceur-runtimr.js) (also found inside traceur's `bin` folder when installed via npm) before es6-module-loader.js:\n\n```html\n  <script src=\"traceur-runtime.js\"></script>\n  <script src=\"system.js\"></script>\n  <script>\n    System.paths['app/*'] = 'app-built/*.js';\n  </script>\n```\n\nWe can then use map or paths config to ensure that `app/main` gets directed to the new folder. Alternatively rename `app-built` to replace `app`.\n\nNow the application will continue to behave identically without needing to compile ES6 in the browser.\n\n### Compiling ES6 to ES5 and AMD\n\nThe same method above can also be used to compile ES6 into AMD with `--modules=amd`.\n\nWe can then use the r.js optimizer to create a bundle with named defines, which are supported by SystemJS.\n\nNote that the ES6 live bindings and circular references don't work in AMD, although circular references still work in many cases.\n\n### Bundles\n\nBundles configuration allows a single bundle file to be loaded in place of separate module files.\n\n```javascript\n  System.bundles['build/core'] = ['jquery', 'app/app', 'app/dep', 'lib/third-party'];\n  \n  // loads \"app/app\" from the module \"build/core\".\n  System.import('app/app');\n  \n  // a request to any one of 'jquery', 'app/app', 'app/dep', 'lib/third-party'\n  // would delegate to the \"build/core\" module\n```\n\nA built file must contain the exact named defines or named `System.register` statements for the modules\nit contains. Mismatched names will result in separate requests still being made.\n\nWe can create a custom bundle with Traceur by combining together a module with all its dependencies into a single file:\n\n```\n  traceur --out build.js app/main.js app/core.js app/another.js\n```\n\nEach file will be traced and all its dependencies included in the final build file.\n\nWe can also just include this bundle with a `<script>` tag in the page.\n\n### CSP-Compatible Production\n\nSystemJS comes with a separate build for production only. This is fully CSP-compatible using script tag injection to load scripts, while still remaining an\nextension of the ES6 Module Loader.\n\nReplace the `system.js` file with `dist/system-csp.js`.\n\nIf we have compiled all our modules into a `System.register` bundle, we can do:\n\n```html\n  <script src=\"system-csp.js\"></script>\n  <script>\n    System.paths['app-built'] = '/app-built.js';\n    System.bundles['app-built'] = ['app/main'];\n    System.import('app/main').then(function(m) { \n      // loads app/main from the app-built bundle\n    });\n  </script>\n```\n\nTo make all module formats work with CSP, we need to ensure everything is built with a suitable wrapper.\n\nSee [SystemJS Builder](https://github.com/systemjs/builder) for a single-file build workflow that can wrap up all module formats.\n\n### RequireJS Support\n\nTo use SystemJS side-by-side in a RequireJS project, make sure to include RequireJS after ES6 Module Loader but before SystemJS.\n\nConversely, to have SystemJS provide a RequireJS-like API in an application set:\n\n```javascript\nwindow.define = loader.amdDefine;\nwindow.require = window.requirejs = loader.amdRequire;\n```\n\n### NodeJS Usage\n\nTo load modules in NodeJS, install SystemJS with:\n\n```\n  npm install systemjs\n```\n\nWe can then load modules equivalently to in the browser:\n\n```javascript\nvar System = require('systemjs');\n\n// loads './app.js' from the current directory\nSystem.import('./app').then(function(m) {\n  console.log(m);\n});\n```\n\n## Contributing\n\nContributions are welcome. The goal of SystemJS is to encourage loaders made out of small self-contained features.\n\nSince different builds can be created for different use cases, new builds or new features are welcome to be submitted for\nconsideration with pull requests.\n\n#### Running the tests\n\nTo install the dependencies correctly, run `bower install` from the root of the repo, then open `test/test.html` in a browser with a local server\nor file access flags enabled.\n\n\nLicense\n---\n\nMIT\n\n"
  },
  {
    "path": "client/components/system.js/bower.json",
    "content": "{\n  \"name\": \"system.js\",\n  \"version\": \"0.10.1\",\n  \"main\": \"dist/system.js\",\n  \"dependencies\": {\n    \"es6-module-loader\": \"~0.10.0\"\n  },\n  \"devDependencies\": {\n    \"qunit\": \"~1.12.0\"\n  },\n  \"ignore\": [\n    \"test\",\n    \"Makefile\",\n    \"package.json\"\n  ]\n}\n"
  },
  {
    "path": "client/components/system.js/dist/system-csp.js",
    "content": "!function($__global){$__global.upgradeSystemLoader=function(){function e(e){var t=String(e).replace(/^\\s+|\\s+$/g,\"\").match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);return t?{href:t[0]||\"\",protocol:t[1]||\"\",authority:t[2]||\"\",host:t[3]||\"\",hostname:t[4]||\"\",port:t[5]||\"\",pathname:t[6]||\"\",search:t[7]||\"\",hash:t[8]||\"\"}:null}function t(t,a){function r(e){var t=[];return e.replace(/^(\\.\\.?(\\/|$))+/,\"\").replace(/\\/(\\.(\\/|$))+/g,\"/\").replace(/\\/\\.\\.$/,\"/../\").replace(/\\/?[^\\/]*/g,function(e){\"/..\"===e?t.pop():t.push(e)}),t.join(\"\").replace(/^\\//,\"/\"===e.charAt(0)?\"/\":\"\")}return a=e(a||\"\"),t=e(t||\"\"),a&&t?(a.protocol||t.protocol)+(a.protocol||a.authority?a.authority:t.authority)+r(a.protocol||a.authority||\"/\"===a.pathname.charAt(0)?a.pathname:a.pathname?(t.authority&&!t.pathname?\"/\":\"\")+t.pathname.slice(0,t.pathname.lastIndexOf(\"/\")+1)+a.pathname:t.pathname)+(a.protocol||a.authority||a.pathname?a.search:a.search||t.search)+a.hash:null}function a(e){\"undefined\"==typeof h&&(h=Array.prototype.indexOf);var t=document.getElementsByTagName(\"head\")[0];e.onScriptLoad=function(){},e.fetch=function(a){return new Promise(function(r,n){function o(){l.readyState&&\"loaded\"!=l.readyState&&\"complete\"!=l.readyState||(s(),e.onScriptLoad(a),a.metadata.registered||n(a.address+\" did not call System.register or AMD define\"),r(\"\"))}function i(e){s(),n(e)}function s(){l.detachEvent?l.detachEvent(\"onreadystatechange\",o):(l.removeEventListener(\"load\",o,!1),l.removeEventListener(\"error\",i,!1)),t.removeChild(l)}var l=document.createElement(\"script\");l.async=!0,l.attachEvent?l.attachEvent(\"onreadystatechange\",o):(l.addEventListener(\"load\",o,!1),l.addEventListener(\"error\",i,!1)),l.src=a.address,t.appendChild(l)})},e.scriptLoader=!0}function r(e){function t(e,t){var a=e.meta&&e.meta[t.name];if(a)for(var r in a)t.metadata[r]=t.metadata[r]||a[r]}var a=/^(\\s*\\/\\*.*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/,r=/\\/\\*.*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;e.meta={};var n=e.locate;e.locate=function(e){return t(this,e),n.call(this,e)};var o=e.translate;e.translate=function(e){var n=e.source.match(a);if(n)for(var i=n[0].match(r),s=0;s<i.length;s++){var l=i[s].length,u=i[s].substr(0,1);if(\";\"==i[s].substr(l-1,1)&&l--,'\"'==u||\"'\"==u){var d=i[s].substr(1,i[s].length-3),c=d.substr(0,d.indexOf(\" \"));if(c){var f=d.substr(c.length+1,d.length-c.length-1);e.metadata[c]instanceof Array?e.metadata[c].push(f):e.metadata[c]||(e.metadata[c]=f)}}}return t(this,e),o.call(this,e)}}function n(e){function a(e){var a=this;\"@traceur\"==e.name&&(m=p);var r,n=e.source.lastIndexOf(\"\\n\");-1!=n&&\"//# sourceMappingURL=\"==e.source.substr(n+1,21)&&(r=e.source.substr(n+22,e.source.length-n-22),\"undefined\"!=typeof t&&(r=t(e.address,r))),__eval(e.source,e.address,r),\"@traceur\"==e.name&&(a.global.traceurSystem=a.global.System,a.global.System=m)}function r(e){for(var t=[],a=0,r=e.length;r>a;a++)-1==h.call(t,e[a])&&t.push(e[a]);return t}function n(t,a,r,n){\"string\"!=typeof t&&(n=r,r=a,a=t,t=null),g=!0;var o;if(o=\"boolean\"==typeof r?{declarative:!1,deps:a,execute:n,executingRequire:r}:{declarative:!0,deps:a,declare:r},t)o.name=t,e.defined[t]||(e.defined[t]=o);else if(o.declarative){if(v)throw new TypeError(\"Multiple anonymous System.register calls in the same module file.\");v=o}}function o(e){if(!e.register){e.register=n,e.defined||(e.defined={});var t=e.onScriptLoad;e.onScriptLoad=function(e){t(e),v&&(e.metadata.entry=v),g&&(e.metadata.format=e.metadata.format||\"register\",e.metadata.registered=!0)}}}function i(e,t,a){if(a[e.groupIndex]=a[e.groupIndex]||[],-1==h.call(a[e.groupIndex],e)){a[e.groupIndex].push(e);for(var r=0,n=e.normalizedDeps.length;n>r;r++){var o=e.normalizedDeps[r],s=t.defined[o];if(s&&!s.evaluated){var l=e.groupIndex+(s.declarative!=e.declarative);if(void 0===s.groupIndex||s.groupIndex<l){if(s.groupIndex&&(a[s.groupIndex].splice(h.call(a[s.groupIndex],s),1),0==a[s.groupIndex].length))throw new TypeError(\"Mixed dependency cycle detected\");s.groupIndex=l}i(s,t,a)}}}}function s(e,t){var a=t.defined[e];a.groupIndex=0;var r=[];i(a,t,r);for(var n=!!a.declarative==r.length%2,o=r.length-1;o>=0;o--){for(var s=r[o],l=0;l<s.length;l++){var d=s[l];n?u(d,t):c(d,t)}n=!n}}function l(e){return b[e]||(b[e]={name:e,dependencies:[],exports:{},importers:[]})}function u(e,t){if(!e.module){var a=e.module=l(e.name),r=e.module.exports,n=e.declare.call(t.global,function(e,t){a.locked=!0,r[e]=t;for(var n=0,o=a.importers.length;o>n;n++){var i=a.importers[n];if(!i.locked){var s=h.call(i.dependencies,a);i.setters[s](r)}}return a.locked=!1,t});if(a.setters=n.setters,a.execute=n.execute,!a.setters||!a.execute)throw new TypeError(\"Invalid System.register form for \"+e.name);for(var o=0,i=e.normalizedDeps.length;i>o;o++){var s,d=e.normalizedDeps[o],c=t.defined[d],f=b[d];f?s=f.exports:c&&!c.declarative?s={\"default\":c.module.exports,__useDefault:!0}:c?(u(c,t),f=c.module,s=f.exports):s=t.get(d),f&&f.importers?(f.importers.push(a),a.dependencies.push(f)):a.dependencies.push(null),a.setters[o]&&a.setters[o](s)}}}function d(e,t){var a,r=t.defined[e];if(r)r.declarative?f(e,[],t):r.evaluated||c(r,t),a=r.module.exports;else if(a=t.get(e),!a)throw new Error(\"Unable to load dependency \"+e+\".\");return(!r||r.declarative)&&a&&a.__useDefault?a[\"default\"]:a}function c(e,t){if(!e.module){var a={},r=e.module={exports:a,id:e.name};if(!e.executingRequire)for(var n=0,o=e.normalizedDeps.length;o>n;n++){var i=e.normalizedDeps[n],s=t.defined[i];s&&c(s,t)}e.evaluated=!0;var l=e.execute.call(t.global,function(a){for(var r=0,n=e.deps.length;n>r;r++)if(e.deps[r]==a)return d(e.normalizedDeps[r],t);throw new TypeError(\"Module \"+a+\" not declared as a dependency.\")},a,r);l&&(r.exports=l)}}function f(e,t,a){var r=a.defined[e];if(!r.evaluated&&r.declarative){t.push(e);for(var n=0,o=r.normalizedDeps.length;o>n;n++){var i=r.normalizedDeps[n];-1==h.call(t,i)&&(a.defined[i]?f(i,t,a):a.get(i))}r.evaluated||(r.evaluated=!0,r.module.execute.call(a.global))}}\"undefined\"==typeof h&&(h=Array.prototype.indexOf),\"undefined\"==typeof __eval&&(__eval=0||eval);var m;e.__exec=a;var v,g;o(e);var b={},y=/System\\.register/,x=e.fetch;e.fetch=function(e){var t=this;return o(t),t.defined[e.name]?(e.metadata.format=\"defined\",\"\"):(v=null,g=!1,x.call(t,e))};var _=e.translate;e.translate=function(e){return this.register=n,this.__exec=a,e.metadata.deps=e.metadata.deps||[],Promise.resolve(_.call(this,e)).then(function(t){return(e.metadata.init||e.metadata.exports)&&(e.metadata.format=e.metadata.format||\"global\"),(\"register\"==e.metadata.format||!e.metadata.format&&e.source.match(y))&&(e.metadata.format=\"register\"),t})};var w=e.instantiate;e.instantiate=function(e){var t,a=this;if(a.defined[e.name])t=a.defined[e.name],t.deps=t.deps.concat(e.metadata.deps);else if(e.metadata.entry)t=e.metadata.entry;else if(e.metadata.execute)t={declarative:!1,deps:e.metadata.deps||[],execute:e.metadata.execute,executingRequire:e.metadata.executingRequire};else if(\"register\"==e.metadata.format){v=null,g=!1;var o=a.global.System=a.global.System||a,i=o.register;if(o.register=n,a.__exec(e),o.register=i,v&&(t=v),!t&&o.defined[e.name]&&(t=o.defined[e.name]),!g&&!e.metadata.registered)throw new TypeError(e.name+\" detected as System.register but didn't execute.\")}if(!t&&\"es6\"!=e.metadata.format)return{deps:[],execute:function(){return a.newModule({})}};if(!t)return w.call(this,e);a.defined[e.name]=t,t.deps=r(t.deps),t.name=e.name;for(var l=[],u=0,d=t.deps.length;d>u;u++)l.push(Promise.resolve(a.normalize(t.deps[u],e.name)));return Promise.all(l).then(function(r){return t.normalizedDeps=r,{deps:t.deps,execute:function(){s(e.name,a),f(e.name,[],a),a.defined[e.name]=void 0;var r=a.newModule(t.declarative?t.module.exports:{\"default\":t.module.exports,__useDefault:!0});return r}}})}}function o(e){var a=e[\"import\"];e[\"import\"]=function(e,t){return a.call(this,e,t).then(function(e){return e.__useDefault?e[\"default\"]:e})},e.set(\"@empty\",e.newModule({})),\"undefined\"!=typeof require&&(e._nodeRequire=require),e.config=function(e){for(var t in e){var a=e[t];if(\"object\"!=typeof a||a instanceof Array)this[t]=a;else{this[t]=this[t]||{};for(var r in a)this[t][r]=a[r]}}};var r;if(\"undefined\"==typeof window&&\"undefined\"==typeof WorkerGlobalScope)r=\"file:\"+process.cwd()+\"/\";else if(\"undefined\"==typeof window)r=e.global.location.href;else if(r=document.baseURI,!r){var n=document.getElementsByTagName(\"base\");r=n[0]&&n[0].href||window.location.href}var o,i=e.locate;e.locate=function(e){return this.baseURL!=o&&(o=t(r,this.baseURL),\"/\"!=o.substr(o.length-1,1)&&(o+=\"/\"),this.baseURL=o),Promise.resolve(i.call(this,e))};var s=/(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let))/,l=e.translate;e.translate=function(e){var t=this;return\"@traceur\"==e.name?l.call(t,e):\"es6\"!=e.metadata.format&&(e.metadata.format||!e.source.match(s))||(e.metadata.format=\"es6\",t.global.traceur)?l.call(t,e):t[\"import\"](\"@traceur\").then(function(){return l.call(t,e)})};var u=e.instantiate;e.instantiate=function(e){var t=this;return\"@traceur\"==e.name?(t.__exec(e),{deps:[],execute:function(){return t.newModule({})}}):u.call(t,e)}}function i(e){function t(e,t){for(var a=e.split(\".\");a.length;)t=t[a.shift()];return t}function a(e){if(!e.has(\"@@global-helpers\")){var a,r,n=e.global.hasOwnProperty,o={};e.set(\"@@global-helpers\",e.newModule({prepareGlobal:function(t,i){for(var s=0;s<i.length;s++){var l=o[i[s]];if(l)for(var u in l)e.global[u]=l[u]}a={},r=[\"indexedDB\",\"sessionStorage\",\"localStorage\",\"clipboardData\",\"frames\",\"webkitStorageInfo\",\"toolbar\",\"statusbar\",\"scrollbars\",\"personalbar\",\"menubar\",\"locationbar\",\"webkitIndexedDB\"];for(var d in e.global)if(-1==h.call(r,d)&&(!n||e.global.hasOwnProperty(d)))try{a[d]=e.global[d]}catch(c){r.push(d)}},retrieveGlobal:function(i,s,l){var u,d,c={};if(l){for(var f=[],m=0;m<deps.length;m++)f.push(require(deps[m]));u=l.apply(e.global,f)}else if(s){var p=s.split(\".\")[0];u=t(s,e.global),c[p]=e.global[p]}else for(var v in e.global)-1==h.call(r,v)&&(n&&!e.global.hasOwnProperty(v)||v==e.global||a[v]==e.global[v]||(c[v]=e.global[v],u?u!==e.global[v]&&(d=!0):u!==!1&&(u=e.global[v])));return o[i]=c,d?c:u}}))}}a(e);var r=e.instantiate;e.instantiate=function(e){var t=this;a(t);var n=e.metadata.exports;return e.metadata.format||(e.metadata.format=\"global\"),\"global\"==e.metadata.format&&(e.metadata.execute=function(a,r,o){t.get(\"@@global-helpers\").prepareGlobal(o.id,e.metadata.deps),n&&(e.source+='\\nthis[\"'+n+'\"] = '+n+\";\");var i=t.global.define;return t.global.define=void 0,t.global.module=void 0,t.global.exports=void 0,t.__exec(e),t.global.define=i,t.get(\"@@global-helpers\").retrieveGlobal(o.id,n,e.metadata.init)}),r.call(t,e)}}function s(e){function t(e){r.lastIndex=0;var t=[];e.length/e.split(\"\\n\").length<200&&(e=e.replace(n,\"\"));for(var a;a=r.exec(e);)t.push(a[1].substr(1,a[1].length-2));return t}var a=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)(exports\\s*\\[['\"]|\\exports\\s*\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*\\=/,r=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g,n=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm,o=e.instantiate;e.instantiate=function(n){return n.metadata.format||(a.lastIndex=0,r.lastIndex=0,(r.exec(n.source)||a.exec(n.source))&&(n.metadata.format=\"cjs\")),\"cjs\"==n.metadata.format&&(n.metadata.deps=n.metadata.deps?n.metadata.deps.concat(t(n.source)):n.metadata.deps,n.metadata.executingRequire=!0,n.metadata.execute=function(t,a,r){var o=(n.address||\"\").split(\"/\");o.pop(),o=o.join(\"/\"),e.global._g={global:e.global,exports:a,module:r,require:t,__filename:n.address,__dirname:o};var i=\"(function(global, exports, module, require, __filename, __dirname) { \"+n.source+\"\\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);\",s=e.global.define;e.global.define=void 0,e.__exec({name:n.name,address:n.address,source:i}),e.global.define=s,e.global._g=void 0}),o.call(this,n)}}function l(e){function t(e,t){e=e.replace(d,\"\");var a=e.match(m),r=(a[1].split(\",\")[t]||\"require\").replace(p,\"\"),n=v[r]||(v[r]=new RegExp(c+r+f,\"g\"));n.lastIndex=0;for(var o,i=[];o=n.exec(e);)i.push(o[2]||o[3]);return i}function a(e,t,r,n){var o=this;if(\"object\"==typeof e&&!(e instanceof Array))return a.apply(null,Array.prototype.splice.call(arguments,1,arguments.length-1));if(!(e instanceof Array)){if(\"string\"==typeof e){var i=o.get(e);return i.__useDefault?i[\"default\"]:i}throw new TypeError(\"Invalid require\")}Promise.all(e.map(function(e){return o[\"import\"](e,n)})).then(function(e){t.apply(null,e)},r)}function r(e,t,r){return function(n,o,i){return\"string\"==typeof n?t(n):a.call(r,n,o,i,{name:e})}}function n(e){function a(a,n,o){\"string\"!=typeof a&&(o=n,n=a,a=null),n instanceof Array||(o=n,n=[\"require\",\"exports\",\"module\"]),\"function\"!=typeof o&&(o=function(e){return function(){return e}}(o)),void 0===n[n.length-1]&&n.pop();var s,l,u;if(-1!=(s=h.call(n,\"require\"))){n.splice(s,1);var d=o.toString();n=n.concat(t(d,s))}-1!=(l=h.call(n,\"exports\"))&&n.splice(l,1),-1!=(u=h.call(n,\"module\"))&&n.splice(u,1);var c={deps:n,execute:function(t,a,d){for(var c=[],f=0;f<n.length;f++)c.push(t(n[f]));d.uri=e.baseURL+d.id,d.config=function(){},-1!=u&&c.splice(u,0,d),-1!=l&&c.splice(l,0,a),-1!=s&&c.splice(s,0,r(d.id,t,e));var m=o.apply(i,c);return\"undefined\"==typeof m&&d&&(m=d.exports),\"undefined\"!=typeof m?m:void 0}};if(a)g=0!=n.length||g||b?null:c,b=!0,e.register(a,c.deps,!1,c.execute);else{if(g)throw new TypeError(\"Multiple defines for anonymous module\");g=c}}var n=e.onScriptLoad;e.onScriptLoad=function(e){n(e),(g||b)&&(e.metadata.format=\"defined\",e.metadata.registered=!0),g&&(e.metadata.deps=e.metadata.deps?e.metadata.deps.concat(g.deps):g.deps,e.metadata.execute=g.execute)},a.amd={},e.amdDefine=a}function o(e){e.amdDefine||n(e),g=null,b=null;var t=e.global;y=t.module,x=t.exports,_=t.define,t.module=void 0,t.exports=void 0,t.define&&t.define===e.amdDefine||(t.define=e.amdDefine)}function s(e){var t=e.global;t.define=_,t.module=y,t.exports=x}var l=\"undefined\"!=typeof module&&module.exports,u=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/,d=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm,c=\"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\",f=\"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\",m=/\\(([^\\)]*)\\)/,p=/^\\s+|\\s+$/g,v={};e.amdRequire=a;var g,b,y,x,_;if(n(e),e.scriptLoader){var w=e.fetch;e.fetch=function(e){return o(this),w.call(this,e)}}var S=e.instantiate;e.instantiate=function(e){var t=this;if(\"amd\"==e.metadata.format||!e.metadata.format&&e.source.match(u)){if(e.metadata.format=\"amd\",t.execute!==!1&&(o(t),t.__exec(e),s(t),!g&&!b&&!l))throw new TypeError(\"AMD module \"+e.name+\" did not define\");g&&(e.metadata.deps=e.metadata.deps?e.metadata.deps.concat(g.deps):g.deps,e.metadata.execute=g.execute)}return S.call(t,e)}}function u(e){function t(e,t){return e.length<t.length?!1:e.substr(0,t.length)!=t?!1:e[t.length]&&\"/\"!=e[t.length]?!1:!0}function a(e){for(var t=1,a=0,r=e.length;r>a;a++)\"/\"===e[a]&&t++;return t}function r(e,t,a){return a+e.substr(t)}function n(e,n,o){var i,s,l,u,d=0,c=0;if(n)for(var f in o.map){var m=o.map[f];if(\"object\"==typeof m&&t(n,f)&&(l=a(f),!(c>=l)))for(var p in m)t(e,p)&&(u=a(p),d>=u||(i=p,d=u,s=f,c=l))}if(i)return r(e,i.length,o.map[s][i]);for(var f in o.map){var m=o.map[f];if(\"string\"==typeof m&&t(e,f)){var u=a(f);d>=u||(i=f,d=u)}}return i?r(e,i.length,o.map[i]):e}e.map=e.map||{};var o=e.normalize;e.normalize=function(e,t,a){var r=this;r.map||(r.map={});var i=!1;return\"/\"==e.substr(e.length-1,1)&&(i=!0,e+=\"#\"),Promise.resolve(o.call(r,e,t,a)).then(function(e){if(e=n(e,t,r),i){var a=e.split(\"/\");a.pop();var o=a.pop();a.push(o),a.push(o),e=a.join(\"/\")}return e})}}function d(e){\"undefined\"==typeof h&&(h=Array.prototype.indexOf);var t=e.normalize;e.normalize=function(e,a,r){var n,o=this;return a&&-1!=(n=a.indexOf(\"!\"))&&(a=a.substr(0,n)),Promise.resolve(t.call(o,e,a,r)).then(function(e){var t=e.lastIndexOf(\"!\");if(-1!=t){var n=e.substr(0,t),i=e.substr(t+1)||n.substr(n.lastIndexOf(\".\")+1);return new Promise(function(e){e(o.normalize(i,a,r))}).then(function(e){return i=e,o.normalize(n,a,r)}).then(function(e){return e+\"!\"+i})}return e})};var a=e.locate;e.locate=function(e){var t=this,r=e.name;if(this.defined&&this.defined[r])return a.call(this,e);var n=r.lastIndexOf(\"!\");if(-1!=n){var o=r.substr(n+1);e.name=r.substr(0,n);var i=t.pluginLoader||t;return i[\"import\"](o).then(function(){var a=i.get(o);return a=a[\"default\"]||a,a.build===!1&&t.pluginLoader&&(e.metadata.build=!1),e.metadata.plugin=a,e.metadata.pluginName=o,e.metadata.pluginArgument=e.name,a.locate?a.locate.call(t,e):Promise.resolve(t.locate(e)).then(function(e){return e.substr(0,e.length-3)})})}return a.call(this,e)};var r=e.fetch;e.fetch=function(e){var t=this;return e.metadata.build===!1?\"\":e.metadata.plugin&&e.metadata.plugin.fetch&&!e.metadata.pluginFetchCalled?(e.metadata.pluginFetchCalled=!0,e.metadata.plugin.fetch.call(t,e,r)):r.call(t,e)};var n=e.translate;e.translate=function(e){var t=this;return e.metadata.plugin&&e.metadata.plugin.translate?Promise.resolve(e.metadata.plugin.translate.call(t,e)).then(function(a){return a&&(e.source=a),n.call(t,e)}):n.call(t,e)};var o=e.instantiate;e.instantiate=function(e){var t=this;return e.metadata.plugin&&e.metadata.plugin.instantiate?Promise.resolve(e.metadata.plugin.instantiate.call(t,e)).then(function(a){return e.metadata.format=\"defined\",e.metadata.execute=function(){return a},o.call(t,e)}):e.metadata.plugin&&e.metadata.plugin.build===!1?(e.metadata.format=\"defined\",e.metadata.deps.push(e.metadata.pluginName),e.metadata.execute=function(){return t.newModule({})},o.call(t,e)):o.call(t,e)}}function c(e){\"undefined\"==typeof h&&(h=Array.prototype.indexOf),e.bundles=e.bundles||{};var t=e.fetch;e.fetch=function(e){var a=this;if(a.trace)return t.call(this,e);a.bundles||(a.bundles={});for(var r in a.bundles)if(-1!=h.call(a.bundles[r],e.name))return Promise.resolve(a.normalize(r)).then(function(e){return a.bundles[e]=a.bundles[e]||a.bundles[r],a.meta=a.meta||{},a.meta[e]=a.meta[e]||{},a.meta[e].bundle=!0,a.load(e)}).then(function(){return\"\"});return t.call(this,e)}}function f(e){function t(e){return parseInt(e,10)}function a(e){var a=e.match(s);return a?{major:t(a[1]),minor:t(a[2]),patch:t(a[3]),pre:a[4]&&a[4].split(\".\")}:{tag:e}}function r(e,a){if(e.tag&&a.tag)return 0;if(e.tag)return-1;if(a.tag)return 1;for(var r=0;r<u.length;r++){var n=u[r],o=e[n],i=a[n];if(o!=i)return isNaN(o)?-1:isNaN(i)?1:o>i?1:-1}if(!e.pre&&!a.pre)return 0;if(!e.pre)return 1;if(!a.pre)return-1;for(var r=0,s=Math.min(e.pre.length,a.pre.length);s>r;r++)if(e.pre[r]!=a.pre[r]){var d=e.pre[r].match(l),c=a.pre[r].match(l);return d&&!c?-1:c&&!d?1:d&&c?t(e.pre[r])>t(a.pre[r])?1:-1:e.pre[r]>a.pre[r]?1:-1}return e.pre.length==a.pre.length?0:e.pre.length>a.pre.length?1:-1}function n(e,t){var a=e.version;return a.tag?a.tag==t.tag:1==r(a,t)?!1:isNaN(t.minor)||isNaN(t.patch)?!1:t.pre?a.major!=t.major||a.minor!=t.minor||a.patch!=t.patch?!1:e.semver||e.fuzzy||a.pre.join(\".\")==t.pre.join(\".\"):e.semver?0==a.major&&isNaN(a.minor)?t.major<1:a.major>=1?a.major==t.major:a.minor>=1?a.minor==t.minor:(a.patch||0)==t.patch:e.fuzzy?t.major==a.major&&t.minor<(a.minor||0)+1:!a.pre&&a.major==t.major&&a.minor==t.minor&&a.patch==t.patch}function o(e){var t={};((t.semver=\"^\"==e.substr(0,1))||(t.fuzzy=\"~\"==e.substr(0,1)))&&(e=e.substr(1));var r=t.version=a(e);return r.tag?t:(t.fuzzy||t.semver||!isNaN(r.minor)&&!isNaN(r.patch)||(t.fuzzy=!0),t.fuzzy&&isNaN(r.minor)&&(t.semver=!0,t.fuzzy=!1),t.semver&&!isNaN(r.minor)&&isNaN(r.patch)&&(t.semver=!1,t.fuzzy=!0),t)}function i(e,t){return r(a(e),a(t))}\"undefined\"==typeof h&&(h=Array.prototype.indexOf);var s=/^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:-([\\da-z-]+(?:\\.[\\da-z-]+)*)(?:\\+([\\da-z-]+(?:\\.[\\da-z-]+)*))?)?)?)?$/i,l=/^\\d+$/,u=[\"major\",\"minor\",\"patch\"];e.versions=e.versions||{};var d=e.normalize;e.normalize=function(t,r,s){e.versions||(e.versions={});var l,u,c=this.versions;if(t.indexOf(\"@\")>0){var f=t.lastIndexOf(\"@\"),m=t.substr(f+1,t.length-f-1).split(\"/\");l=m[0],u=m.length,t=t.substr(0,f)+t.substr(f+l.length+1,t.length-f-l.length-1)}return Promise.resolve(d.call(this,t,r,s)).then(function(e){var t=e.indexOf(\"@\");if(l&&(-1==t||0==t)){var r=e.split(\"/\");r[r.length-u]+=\"@\"+l,e=r.join(\"/\"),t=e.indexOf(\"@\")}var s,d;if(-1==t||0==t){for(var f in c)if(d=c[f],e.substr(0,f.length)==f&&(s=e.substr(f.length,1),!s||\"/\"==s))return f+\"@\"+(\"string\"==typeof d?d:d[d.length-1])+e.substr(f.length);return e}var m=e.substr(0,t),p=e.substr(t+1).split(\"/\")[0],h=p.length,v=o(e.substr(t+1).split(\"/\")[0]);d=c[e.substr(0,t)]||[],\"string\"==typeof d&&(d=[d]);for(var g=d.length-1;g>=0;g--)if(n(v,a(d[g])))return m+\"@\"+d[g]+e.substr(t+h+1);var b;return v.semver?b=0!=v.version.major||isNaN(v.version.minor)?v.version.major:\"0.\"+v.version.minor:v.fuzzy?b=v.version.major+\".\"+v.version.minor:(b=p,d.push(p),d.sort(i),c[m]=1==d.length?d[0]:d),m+\"@\"+b+e.substr(t+h+1)})}}function m(e){e.depCache=e.depCache||{},loaderLocate=e.locate,e.locate=function(e){var t=this;t.depCache||(t.depCache={});var a=t.depCache[e.name];if(a)for(var r=0;r<a.length;r++)t.load(a[r]);return loaderLocate.call(t,e)}}$__global.upgradeSystemLoader=void 0;var p,h=Array.prototype.indexOf||function(e){for(var t=0,a=this.length;a>t;t++)if(this[t]===e)return t;return-1};!function(){var e=$__global.System;p=$__global.System=new LoaderPolyfill(e),p.baseURL=e.baseURL,p.paths={\"*\":\"*.js\"},p.originalSystem=e}(),p.noConflict=function(){$__global.SystemJS=p,$__global.System=p.originalSystem},a(p),r(p),n(p),o(p),i(p),s(p),l(p),u(p),d(p),c(p),f(p),m(p),p.paths[\"@traceur\"]||(p.paths[\"@traceur\"]=$__curScript&&$__curScript.getAttribute(\"data-traceur-src\")||($__curScript&&$__curScript.src?$__curScript.src.substr(0,$__curScript.src.lastIndexOf(\"/\")+1):p.baseURL+(p.baseURL.lastIndexOf(\"/\")==p.baseURL.length-1?\"\":\"/\"))+\"traceur.js\")};var $__curScript,__eval;!function(){var doEval;__eval=function(e,t,a){e+=\"\\n//# sourceURL=\"+t+(a?\"\\n//# sourceMappingURL=\"+a:\"\");try{doEval(e)}catch(r){var n=\"Error evaluating \"+t+\"\\n\";throw r instanceof Error?r.message=n+r.message:r=n+r,r}};var isWorker=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,isBrowser=\"undefined\"!=typeof window;if(isBrowser){var head,scripts=document.getElementsByTagName(\"script\");if($__curScript=scripts[scripts.length-1],doEval=function(e){head||(head=document.head||document.body||document.documentElement);var t=document.createElement(\"script\");t.text=e;var a,r=window.onerror;if(window.onerror=function(e){a=e},head.appendChild(t),head.removeChild(t),window.onerror=r,a)throw a},$__global.System&&$__global.LoaderPolyfill)$__global.upgradeSystemLoader();else{var curPath=$__curScript.src,basePath=curPath.substr(0,curPath.lastIndexOf(\"/\")+1);document.write('<script type=\"text/javascript\" src=\"'+basePath+'es6-module-loader.js\" data-init=\"upgradeSystemLoader\">'+\"<\"+\"/script>\")}}else if(isWorker)if(doEval=function(source){try{eval(source)}catch(e){throw e}},$__global.System&&$__global.LoaderPolyfill)$__global.upgradeSystemLoader();else{var basePath=\"\";try{throw new TypeError(\"Unable to get Worker base path.\")}catch(err){var idx=err.stack.indexOf(\"at \")+3,withSystem=err.stack.substr(idx,err.stack.substr(idx).indexOf(\"\\n\"));basePath=withSystem.substr(0,withSystem.lastIndexOf(\"/\")+1)}importScripts(basePath+\"es6-module-loader.js\")}else{var es6ModuleLoader=require(\"es6-module-loader\");$__global.System=es6ModuleLoader.System,$__global.Loader=es6ModuleLoader.Loader,$__global.upgradeSystemLoader(),module.exports=$__global.System;var vm=require(\"vm\");doEval=function(e){vm.runInThisContext(e)}}}()}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope?self:global);\n//# sourceMappingURL=system-csp.js.map"
  },
  {
    "path": "client/components/system.js/dist/system-csp.src.js",
    "content": "/*\n * SystemJS v0.10.0\n */\n\n(function($__global) {\n\n$__global.upgradeSystemLoader = function() {\n  $__global.upgradeSystemLoader = undefined;\n\n  // indexOf polyfill for IE\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, l = this.length; i < l; i++)\n      if (this[i] === item)\n        return i;\n    return -1;\n  }\n\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n  function toAbsoluteURL(base, href) {\n    function removeDotSegments(input) {\n      var output = [];\n      input.replace(/^(\\.\\.?(\\/|$))+/, '')\n        .replace(/\\/(\\.(\\/|$))+/g, '/')\n        .replace(/\\/\\.\\.$/, '/../')\n        .replace(/\\/?[^\\/]*/g, function (p) {\n          if (p === '/..')\n            output.pop();\n          else\n            output.push(p);\n      });\n      return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n    }\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  // clone the original System loader\n  var System;\n  (function() {\n    var originalSystem = $__global.System;\n    System = $__global.System = new LoaderPolyfill(originalSystem);\n    System.baseURL = originalSystem.baseURL;\n    System.paths = { '*': '*.js' };\n    System.originalSystem = originalSystem;\n  })();\n\n  System.noConflict = function() {\n    $__global.SystemJS = System;\n    $__global.System = System.originalSystem;\n  }\n\n  \n/*\n * Script tag fetch\n */\n\nfunction scriptLoader(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var head = document.getElementsByTagName('head')[0];\n\n  // call this functione everytime a wrapper executes\n  loader.onScriptLoad = function() {};\n\n  // override fetch to use script injection\n  loader.fetch = function(load) {\n    return new Promise(function(resolve, reject) {\n      var s = document.createElement('script');\n      s.async = true;\n\n      function complete(evt) {\n        if (s.readyState && s.readyState != 'loaded' && s.readyState != 'complete')\n          return;\n        cleanup();\n\n        // this runs synchronously after execution\n        // we now need to tell the wrapper handlers that\n        // this load record has just executed\n        loader.onScriptLoad(load);\n\n        // if nothing registered, then something went wrong\n        if (!load.metadata.registered)\n          reject(load.address + ' did not call System.register or AMD define');\n\n        resolve('');\n      }\n\n      function error(evt) {\n        cleanup();\n        reject(evt);\n      }\n\n      if (s.attachEvent) {\n        s.attachEvent('onreadystatechange', complete);\n      }\n      else {\n        s.addEventListener('load', complete, false);\n        s.addEventListener('error', error, false);\n      }\n\n      s.src = load.address;\n      head.appendChild(s);\n\n      function cleanup() {\n        if (s.detachEvent)\n          s.detachEvent('onreadystatechange', complete);\n        else {\n          s.removeEventListener('load', complete, false);\n          s.removeEventListener('error', error, false);\n        }\n        head.removeChild(s);\n      }\n    });\n  }\n\n  loader.scriptLoader = true;\n}\n/*\n * Meta Extension\n *\n * Sets default metadata on a load record (load.metadata) from\n * loader.meta[moduleName].\n * Also provides an inline meta syntax for module meta in source.\n *\n * Eg:\n *\n * loader.meta['my/module'] = { some: 'meta' };\n *\n * load.metadata.some = 'meta' will now be set on the load record.\n *\n * The same meta could be set with a my/module.js file containing:\n * \n * my/module.js\n *   \"some meta\"; \n *   \"another meta\";\n *   console.log('this is my/module');\n *\n * The benefit of inline meta is that coniguration doesn't need\n * to be known in advance, which is useful for modularising\n * configuration and avoiding the need for configuration injection.\n *\n *\n * Example\n * -------\n *\n * The simplest meta example is setting the module format:\n *\n * System.meta['my/module'] = { format: 'amd' };\n *\n * or inside 'my/module.js':\n *\n * \"format amd\";\n * define(...);\n * \n */\n\nfunction meta(loader) {\n  var metaRegEx = /^(\\s*\\/\\*.*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/;\n  var metaPartRegEx = /\\/\\*.*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;\n\n  loader.meta = {};\n\n  function setConfigMeta(loader, load) {\n    var meta = loader.meta && loader.meta[load.name];\n    if (meta) {\n      for (var p in meta)\n        load.metadata[p] = load.metadata[p] || meta[p];\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    setConfigMeta(this, load);\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    // detect any meta header syntax\n    var meta = load.source.match(metaRegEx);\n    if (meta) {\n      var metaParts = meta[0].match(metaPartRegEx);\n      for (var i = 0; i < metaParts.length; i++) {\n        var len = metaParts[i].length;\n\n        var firstChar = metaParts[i].substr(0, 1);\n        if (metaParts[i].substr(len - 1, 1) == ';')\n          len--;\n      \n        if (firstChar != '\"' && firstChar != \"'\")\n          continue;\n\n        var metaString = metaParts[i].substr(1, metaParts[i].length - 3);\n\n        var metaName = metaString.substr(0, metaString.indexOf(' '));\n        if (metaName) {\n          var metaValue = metaString.substr(metaName.length + 1, metaString.length - metaName.length - 1);\n\n          if (load.metadata[metaName] instanceof Array)\n            load.metadata[metaName].push(metaValue);\n          else if (!load.metadata[metaName])\n            load.metadata[metaName] = metaValue;\n        }\n      }\n    }\n    // config meta overrides\n    setConfigMeta(this, load);\n    \n    return loaderTranslate.call(this, load);\n  }\n}\n/*\n * Instantiate registry extension\n *\n * Supports Traceur System.register 'instantiate' output for loading ES6 as ES5.\n *\n * - Creates the loader.register function\n * - Also supports metadata.format = 'register' in instantiate for anonymous register modules\n * - Also supports metadata.deps, metadata.execute and metadata.executingRequire\n *     for handling dynamic modules alongside register-transformed ES6 modules\n *\n * Works as a standalone extension, but benefits from having a more \n * advanced __eval defined like in SystemJS polyfill-wrapper-end.js\n *\n * The code here replicates the ES6 linking groups algorithm to ensure that\n * circular ES6 compiled into System.register can work alongside circular AMD \n * and CommonJS, identically to the actual ES6 loader.\n *\n */\nfunction register(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n  if (typeof __eval == 'undefined')\n    __eval = 0 || eval; // uglify breaks without the 0 ||\n\n  // define exec for easy evaluation of a load record (load.name, load.source, load.address)\n  // main feature is source maps support handling\n  var curSystem;\n  function exec(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      curSystem = System;\n    }\n    // support sourceMappingURL (efficiently)\n    var sourceMappingURL;\n    var lastLineIndex = load.source.lastIndexOf('\\n');\n    if (lastLineIndex != -1) {\n      if (load.source.substr(lastLineIndex + 1, 21) == '//# sourceMappingURL=') {\n        sourceMappingURL = load.source.substr(lastLineIndex + 22, load.source.length - lastLineIndex - 22);\n        if (typeof toAbsoluteURL != 'undefined')\n          sourceMappingURL = toAbsoluteURL(load.address, sourceMappingURL);\n      }\n    }\n\n    __eval(load.source, load.address, sourceMappingURL);\n\n    // traceur overwrites System and Module - write them back\n    if (load.name == '@traceur') {\n      loader.global.traceurSystem = loader.global.System;\n      loader.global.System = curSystem;\n    }\n  }\n  loader.__exec = exec;\n\n  function dedupe(deps) {\n    var newDeps = [];\n    for (var i = 0, l = deps.length; i < l; i++)\n      if (indexOf.call(newDeps, deps[i]) == -1)\n        newDeps.push(deps[i])\n    return newDeps;\n  }\n\n  /*\n   * There are two variations of System.register:\n   * 1. System.register for ES6 conversion (2-3 params) - System.register([name, ]deps, declare)\n   *    see https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained\n   *\n   * 2. System.register for dynamic modules (3-4 params) - System.register([name, ]deps, executingRequire, execute)\n   * the true or false statement \n   *\n   * this extension implements the linking algorithm for the two variations identical to the spec\n   * allowing compiled ES6 circular references to work alongside AMD and CJS circular references.\n   *\n   */\n  // loader.register sets loader.defined for declarative modules\n  var anonRegister;\n  var calledRegister;\n  function register(name, deps, declare, execute) {\n    if (typeof name != 'string') {\n      execute = declare;\n      declare = deps;\n      deps = name;\n      name = null;\n    }\n\n    calledRegister = true;\n    \n    var register;\n\n    // dynamic\n    if (typeof declare == 'boolean') {\n      register = {\n        declarative: false,\n        deps: deps,\n        execute: execute,\n        executingRequire: declare\n      };\n    }\n    else {\n      // ES6 declarative\n      register = {\n        declarative: true,\n        deps: deps,\n        declare: declare\n      };\n    }\n    \n    // named register\n    if (name) {\n      register.name = name;\n      // we never overwrite an existing define\n      if (!loader.defined[name])\n        loader.defined[name] = register; \n    }\n    // anonymous register\n    else if (register.declarative) {\n      if (anonRegister)\n        throw new TypeError('Multiple anonymous System.register calls in the same module file.');\n      anonRegister = register;\n    }\n  }\n  /*\n   * Registry side table - loader.defined\n   * Registry Entry Contains:\n   *    - name\n   *    - deps \n   *    - declare for declarative modules\n   *    - execute for dynamic modules, different to declarative execute on module\n   *    - executingRequire indicates require drives execution for circularity of dynamic modules\n   *    - declarative optional boolean indicating which of the above\n   *\n   * Can preload modules directly on System.defined['my/module'] = { deps, execute, executingRequire }\n   *\n   * Then the entry gets populated with derived information during processing:\n   *    - normalizedDeps derived from deps, created in instantiate\n   *    - groupIndex used by group linking algorithm\n   *    - evaluated indicating whether evaluation has happend\n   *    - module the module record object, containing:\n   *      - exports actual module exports\n   *      \n   *    Then for declarative only we track dynamic bindings with the records:\n   *      - name\n   *      - setters declarative setter functions\n   *      - exports actual module values\n   *      - dependencies, module records of dependencies\n   *      - importers, module records of dependents\n   *\n   * After linked and evaluated, entries are removed, declarative module records remain in separate\n   * module binding table\n   *\n   */\n\n  function defineRegister(loader) {\n    if (loader.register)\n      return;\n\n    loader.register = register;\n\n    if (!loader.defined)\n      loader.defined = {};\n    \n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      // anonymous define\n      if (anonRegister)\n        load.metadata.entry = anonRegister;\n      \n      if (calledRegister) {\n        load.metadata.format = load.metadata.format || 'register';\n        load.metadata.registered = true;\n      }\n    }\n  }\n\n  defineRegister(loader);\n\n  function buildGroups(entry, loader, groups) {\n    groups[entry.groupIndex] = groups[entry.groupIndex] || [];\n\n    if (indexOf.call(groups[entry.groupIndex], entry) != -1)\n      return;\n\n    groups[entry.groupIndex].push(entry);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      \n      // not in the registry means already linked / ES6\n      if (!depEntry || depEntry.evaluated)\n        continue;\n      \n      // now we know the entry is in our unlinked linkage group\n      var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);\n\n      // the group index of an entry is always the maximum\n      if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {\n        \n        // if already in a group, remove from the old group\n        if (depEntry.groupIndex) {\n          groups[depEntry.groupIndex].splice(indexOf.call(groups[depEntry.groupIndex], depEntry), 1);\n\n          // if the old group is empty, then we have a mixed depndency cycle\n          if (groups[depEntry.groupIndex].length == 0)\n            throw new TypeError(\"Mixed dependency cycle detected\");\n        }\n\n        depEntry.groupIndex = depGroupIndex;\n      }\n\n      buildGroups(depEntry, loader, groups);\n    }\n  }\n\n  function link(name, loader) {\n    var startEntry = loader.defined[name];\n\n    startEntry.groupIndex = 0;\n\n    var groups = [];\n\n    buildGroups(startEntry, loader, groups);\n\n    var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var entry = group[j];\n\n        // link each group\n        if (curGroupDeclarative)\n          linkDeclarativeModule(entry, loader);\n        else\n          linkDynamicModule(entry, loader);\n      }\n      curGroupDeclarative = !curGroupDeclarative; \n    }\n  }\n\n  // module binding records\n  var moduleRecords = {};\n  function getOrCreateModuleRecord(name) {\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      exports: {}, // start from an empty module and extend\n      importers: []\n    })\n  }\n\n  function linkDeclarativeModule(entry, loader) {\n    // only link if already not already started linking (stops at circular)\n    if (entry.module)\n      return;\n\n    var module = entry.module = getOrCreateModuleRecord(entry.name);\n    var exports = entry.module.exports;\n\n    var declaration = entry.declare.call(loader.global, function(name, value) {\n      module.locked = true;\n      exports[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](exports);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n    \n    module.setters = declaration.setters;\n    module.execute = declaration.execute;\n\n    if (!module.setters || !module.execute) {\n      throw new TypeError('Invalid System.register form for ' + entry.name);\n    }\n\n    // now link all the module dependencies\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      var depModule = moduleRecords[depName];\n\n      // work out how to set depExports based on scenarios...\n      var depExports;\n\n      if (depModule) {\n        depExports = depModule.exports;\n      }\n      // dynamic, already linked in our registry\n      else if (depEntry && !depEntry.declarative) {\n        depExports = { 'default': depEntry.module.exports, '__useDefault': true };\n      }\n      // in the loader registry\n      else if (!depEntry) {\n        depExports = loader.get(depName);\n      }\n      // we have an entry -> link\n      else {\n        linkDeclarativeModule(depEntry, loader);\n        depModule = depEntry.module;\n        depExports = depModule.exports;\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule && depModule.importers) {\n        depModule.importers.push(module);\n        module.dependencies.push(depModule);\n      }\n      else {\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depExports);\n    }\n  }\n\n  // An analog to loader.get covering execution of all three layers (real declarative, simulated declarative, simulated dynamic)\n  function getModule(name, loader) {\n    var exports;\n    var entry = loader.defined[name];\n\n    if (!entry) {\n      exports = loader.get(name);\n      if (!exports)\n        throw new Error('Unable to load dependency ' + name + '.');\n    }\n\n    else {\n      if (entry.declarative)\n        ensureEvaluated(name, [], loader);\n    \n      else if (!entry.evaluated)\n        linkDynamicModule(entry, loader);\n\n      exports = entry.module.exports;\n    }\n\n    if ((!entry || entry.declarative) && exports && exports.__useDefault)\n      return exports['default'];\n    \n    return exports;\n  }\n\n  function linkDynamicModule(entry, loader) {\n    if (entry.module)\n      return;\n\n    var exports = {};\n\n    var module = entry.module = { exports: exports, id: entry.name };\n\n    // AMD requires execute the tree first\n    if (!entry.executingRequire) {\n      for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n        var depName = entry.normalizedDeps[i];\n        var depEntry = loader.defined[depName];\n        if (depEntry)\n          linkDynamicModule(depEntry, loader);\n      }\n    }\n\n    // now execute\n    entry.evaluated = true;\n    var output = entry.execute.call(loader.global, function(name) {\n      for (var i = 0, l = entry.deps.length; i < l; i++) {\n        if (entry.deps[i] != name)\n          continue;\n        return getModule(entry.normalizedDeps[i], loader);\n      }\n      throw new TypeError('Module ' + name + ' not declared as a dependency.');\n    }, exports, module);\n    \n    if (output)\n      module.exports = output;\n  }\n\n  /*\n   * Given a module, and the list of modules for this current branch,\n   *  ensure that each of the dependencies of this module is evaluated\n   *  (unless one is a circular dependency already in the list of seen\n   *  modules, in which case we execute it)\n   *\n   * Then we evaluate the module itself depth-first left to right \n   * execution to match ES6 modules\n   */\n  function ensureEvaluated(moduleName, seen, loader) {\n    var entry = loader.defined[moduleName];\n\n    // if already seen, that means it's an already-evaluated non circular dependency\n    if (entry.evaluated || !entry.declarative)\n      return;\n\n    // this only applies to declarative modules which late-execute\n\n    seen.push(moduleName);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      if (indexOf.call(seen, depName) == -1) {\n        if (!loader.defined[depName])\n          loader.get(depName);\n        else\n          ensureEvaluated(depName, seen, loader);\n      }\n    }\n\n    if (entry.evaluated)\n      return;\n\n    entry.evaluated = true;\n    entry.module.execute.call(loader.global);\n  }\n\n  var registerRegEx = /System\\.register/;\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    defineRegister(loader);\n    if (loader.defined[load.name]) {\n      load.metadata.format = 'defined';\n      return '';\n    }\n    anonRegister = null;\n    calledRegister = false;\n    // the above get picked up by onScriptLoad\n    return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    this.register = register;\n\n    this.__exec = exec;\n\n    load.metadata.deps = load.metadata.deps || [];\n\n    // we run the meta detection here (register is after meta)\n    return Promise.resolve(loaderTranslate.call(this, load)).then(function(source) {\n      \n      // dont run format detection for globals shimmed\n      // ideally this should be in the global extension, but there is\n      // currently no neat way to separate it\n      if (load.metadata.init || load.metadata.exports)\n        load.metadata.format = load.metadata.format || 'global';\n\n      // run detection for register format\n      if (load.metadata.format == 'register' || !load.metadata.format && load.source.match(registerRegEx))\n        load.metadata.format = 'register';\n      return source;\n    });\n  }\n\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    var entry;\n\n    // first we check if this module has already been defined in the registry\n    if (loader.defined[load.name]) {\n      entry = loader.defined[load.name];\n      entry.deps = entry.deps.concat(load.metadata.deps);\n    }\n\n    // picked up already by a script injection\n    else if (load.metadata.entry)\n      entry = load.metadata.entry;\n\n    // otherwise check if it is dynamic\n    else if (load.metadata.execute) {\n      entry = {\n        declarative: false,\n        deps: load.metadata.deps || [],\n        execute: load.metadata.execute,\n        executingRequire: load.metadata.executingRequire // NodeJS-style requires or not\n      };\n    }\n\n    // Contains System.register calls\n    else if (load.metadata.format == 'register') {\n      anonRegister = null;\n      calledRegister = false;\n\n      var System = loader.global.System = loader.global.System || loader;\n\n      var curRegister = System.register;\n      System.register = register;\n\n      loader.__exec(load);\n\n      System.register = curRegister;\n\n      if (anonRegister)\n        entry = anonRegister;\n\n      if (!entry && System.defined[load.name])\n        entry = System.defined[load.name];\n\n      if (!calledRegister && !load.metadata.registered)\n        throw new TypeError(load.name + ' detected as System.register but didn\\'t execute.');\n    }\n\n    // named bundles are just an empty module\n    if (!entry && load.metadata.format != 'es6')\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n\n    // place this module onto defined for circular references\n    if (entry)\n      loader.defined[load.name] = entry;\n\n    // no entry -> treat as ES6\n    else\n      return loaderInstantiate.call(this, load);\n\n    entry.deps = dedupe(entry.deps);\n    entry.name = load.name;\n\n    // first, normalize all dependencies\n    var normalizePromises = [];\n    for (var i = 0, l = entry.deps.length; i < l; i++)\n      normalizePromises.push(Promise.resolve(loader.normalize(entry.deps[i], load.name)));\n\n    return Promise.all(normalizePromises).then(function(normalizedDeps) {\n\n      entry.normalizedDeps = normalizedDeps;\n\n      return {\n        deps: entry.deps,\n        execute: function() {\n          // recursively ensure that the module and all its \n          // dependencies are linked (with dependency group handling)\n          link(load.name, loader);\n\n          // now handle dependency execution in correct order\n          ensureEvaluated(load.name, [], loader);\n\n          // remove from the registry\n          loader.defined[load.name] = undefined;\n\n          var module = loader.newModule(entry.declarative ? entry.module.exports : { 'default': entry.module.exports, '__useDefault': true });\n\n          // return the defined module object\n          return module;\n        }\n      };\n    });\n  }\n}\n/*\n * SystemJS Core\n * Code should be vaguely readable\n * \n */\nfunction core(loader) {\n\n  /*\n    __useDefault\n    \n    When a module object looks like:\n    newModule({\n      __useDefault: true,\n      default: 'some-module'\n    })\n\n    Then importing that module provides the 'some-module'\n    result directly instead of the full module.\n\n    Useful for eg module.exports = function() {}\n  */\n  var loaderImport = loader['import'];\n  loader['import'] = function(name, options) {\n    return loaderImport.call(this, name, options).then(function(module) {\n      return module.__useDefault ? module['default'] : module;\n    });\n  }\n\n  // support the empty module, as a concept\n  loader.set('@empty', loader.newModule({}));\n\n  // include the node require since we're overriding it\n  if (typeof require != 'undefined')\n    loader._nodeRequire = require;\n\n  /*\n    Config\n    Extends config merging one deep only\n\n    loader.config({\n      some: 'random',\n      config: 'here',\n      deep: {\n        config: { too: 'too' }\n      }\n    });\n\n    <=>\n\n    loader.some = 'random';\n    loader.config = 'here'\n    loader.deep = loader.deep || {};\n    loader.deep.config = { too: 'too' };\n  */\n  loader.config = function(cfg) {\n    for (var c in cfg) {\n      var v = cfg[c];\n      if (typeof v == 'object' && !(v instanceof Array)) {\n        this[c] = this[c] || {};\n        for (var p in v)\n          this[c][p] = v[p];\n      }\n      else\n        this[c] = v;\n    }\n  }\n\n  // override locate to allow baseURL to be document-relative\n  var baseURI;\n  if (typeof window == 'undefined' &&\n      typeof WorkerGlobalScope == 'undefined') {\n    baseURI = 'file:' + process.cwd() + '/';\n  }\n  // Inside of a Web Worker\n  else if(typeof window == 'undefined') {\n    baseURI = loader.global.location.href;\n  }\n  else {\n    baseURI = document.baseURI;\n    if (!baseURI) {\n      var bases = document.getElementsByTagName('base');\n      baseURI = bases[0] && bases[0].href || window.location.href;\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  var normalizedBaseURL;\n  loader.locate = function(load) {\n    if (this.baseURL != normalizedBaseURL) {\n      normalizedBaseURL = toAbsoluteURL(baseURI, this.baseURL);\n\n      if (normalizedBaseURL.substr(normalizedBaseURL.length - 1, 1) != '/')\n        normalizedBaseURL += '/';\n      this.baseURL = normalizedBaseURL;\n    }\n\n    return Promise.resolve(loaderLocate.call(this, load));\n  }\n\n  // Traceur conveniences\n  // good enough ES6 detection regex - format detections not designed to be accurate, but to handle the 99% use case\n  var es6RegEx = /(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let))/;\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n\n    if (load.name == '@traceur')\n      return loaderTranslate.call(loader, load);\n\n    // detect ES6\n    else if (load.metadata.format == 'es6' || !load.metadata.format && load.source.match(es6RegEx)) {\n      load.metadata.format = 'es6';\n\n      // dynamically load Traceur for ES6 if necessary\n      if (!loader.global.traceur) {\n        return loader['import']('@traceur').then(function() {\n          return loaderTranslate.call(loader, load);\n        });\n      }\n    }\n\n    return loaderTranslate.call(loader, load);\n  }\n\n  // always load Traceur as a global\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      loader.__exec(load);\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS Global Format\n\n  Supports\n    metadata.deps\n    metadata.init\n    metadata.exports\n\n  Also detects writes to the global object avoiding global collisions.\n  See the SystemJS readme global support section for further information.\n*/\nfunction global(loader) {\n\n  function readGlobalProperty(p, value) {\n    var pParts = p.split('.');\n    while (pParts.length)\n      value = value[pParts.shift()];\n    return value;\n  }\n\n  function createHelpers(loader) {\n    if (loader.has('@@global-helpers'))\n      return;\n\n    var hasOwnProperty = loader.global.hasOwnProperty;\n    var moduleGlobals = {};\n\n    var curGlobalObj;\n    var ignoredGlobalProps;\n\n    loader.set('@@global-helpers', loader.newModule({\n      prepareGlobal: function(moduleName, deps) {\n        // first, we add all the dependency modules to the global\n        for (var i = 0; i < deps.length; i++) {\n          var moduleGlobal = moduleGlobals[deps[i]];\n          if (moduleGlobal)\n            for (var m in moduleGlobal)\n              loader.global[m] = moduleGlobal[m];\n        }\n\n        // now store a complete copy of the global object\n        // in order to detect changes\n        curGlobalObj = {};\n        ignoredGlobalProps = ['indexedDB', 'sessionStorage', 'localStorage',\n          'clipboardData', 'frames', 'webkitStorageInfo', 'toolbar', 'statusbar',\n          'scrollbars', 'personalbar', 'menubar', 'locationbar', 'webkitIndexedDB'\n        ];\n        for (var g in loader.global) {\n          if (indexOf.call(ignoredGlobalProps, g) != -1) { continue; }\n          if (!hasOwnProperty || loader.global.hasOwnProperty(g)) {\n            try {\n              curGlobalObj[g] = loader.global[g];\n            } catch (e) {\n              ignoredGlobalProps.push(g);\n            }\n          }\n        }\n      },\n      retrieveGlobal: function(moduleName, exportName, init) {\n        var singleGlobal;\n        var multipleExports;\n        var exports = {};\n\n        // run init\n        if (init) {\n          var depModules = [];\n          for (var i = 0; i < deps.length; i++)\n            depModules.push(require(deps[i]));\n          singleGlobal = init.apply(loader.global, depModules);\n        }\n\n        // check for global changes, creating the globalObject for the module\n        // if many globals, then a module object for those is created\n        // if one global, then that is the module directly\n        else if (exportName) {\n          var firstPart = exportName.split('.')[0];\n          singleGlobal = readGlobalProperty(exportName, loader.global);\n          exports[firstPart] = loader.global[firstPart];\n        }\n\n        else {\n          for (var g in loader.global) {\n            if (indexOf.call(ignoredGlobalProps, g) != -1)\n              continue;\n            if ((!hasOwnProperty || loader.global.hasOwnProperty(g)) && g != loader.global && curGlobalObj[g] != loader.global[g]) {\n              exports[g] = loader.global[g];\n              if (singleGlobal) {\n                if (singleGlobal !== loader.global[g])\n                  multipleExports = true;\n              }\n              else if (singleGlobal !== false) {\n                singleGlobal = loader.global[g];\n              }\n            }\n          }\n        }\n\n        moduleGlobals[moduleName] = exports;\n\n        return multipleExports ? exports : singleGlobal;\n      }\n    }));\n  }\n\n  createHelpers(loader);\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    createHelpers(loader);\n\n    var exportName = load.metadata.exports;\n\n    if (!load.metadata.format)\n      load.metadata.format = 'global';\n\n    // global is a fallback module format\n    if (load.metadata.format == 'global') {\n      load.metadata.execute = function(require, exports, module) {\n\n        loader.get('@@global-helpers').prepareGlobal(module.id, load.metadata.deps);\n\n        if (exportName)\n          load.source += '\\nthis[\"' + exportName + '\"] = ' + exportName + ';';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        // ensure no NodeJS environment detection\n        loader.global.module = undefined;\n        loader.global.exports = undefined;\n\n        loader.__exec(load);\n\n        loader.global.define = define;\n\n        return loader.get('@@global-helpers').retrieveGlobal(module.id, exportName, load.metadata.init);\n      }\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS CommonJS Format\n*/\nfunction cjs(loader) {\n\n  // CJS Module Format\n  // require('...') || exports[''] = ... || exports.asd = ... || module.exports = ...\n  var cjsExportsRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)(exports\\s*\\[['\"]|\\exports\\s*\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*\\=/;\n  // RegEx adjusted from https://github.com/jbrantly/yabble/blob/master/lib/yabble.js#L339\n  var cjsRequireRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  function getCJSDeps(source) {\n    cjsRequireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    // remove comments from the source first, if not minified\n    if (source.length / source.split('\\n').length < 200)\n      source = source.replace(commentRegEx, '');\n\n    var match;\n\n    while (match = cjsRequireRegEx.exec(source))\n      deps.push(match[1].substr(1, match[1].length - 2));\n\n    return deps;\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n\n    if (!load.metadata.format) {\n      cjsExportsRegEx.lastIndex = 0;\n      cjsRequireRegEx.lastIndex = 0;\n      if (cjsRequireRegEx.exec(load.source) || cjsExportsRegEx.exec(load.source))\n        load.metadata.format = 'cjs';\n    }\n\n    if (load.metadata.format == 'cjs') {\n      load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(getCJSDeps(load.source)) : load.metadata.deps;\n\n      load.metadata.executingRequire = true;\n\n      load.metadata.execute = function(require, exports, module) {\n        var dirname = (load.address || '').split('/');\n        dirname.pop();\n        dirname = dirname.join('/');\n\n        var globals = loader.global._g = {\n          global: loader.global,\n          exports: exports,\n          module: module,\n          require: require,\n          __filename: load.address,\n          __dirname: dirname\n        };\n\n        var source = '(function(global, exports, module, require, __filename, __dirname) { ' + load.source \n          + '\\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        loader.__exec({\n          name: load.name,\n          address: load.address,\n          source: source\n        });\n\n        loader.global.define = define;\n\n        loader.global._g = undefined;\n      }\n    }\n\n    return loaderInstantiate.call(this, load);\n  };\n}\n/*\n  SystemJS AMD Format\n  Provides the AMD module format definition at System.format.amd\n  as well as a RequireJS-style require on System.require\n*/\nfunction amd(loader) {\n  // by default we only enforce AMD noConflict mode in Node\n  var isNode = typeof module != 'undefined' && module.exports;\n\n  // AMD Module Format Detection RegEx\n  // define([.., .., ..], ...)\n  // define(varName); || define(function(require, exports) {}); || define({})\n  var amdRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  var cjsRequirePre = \"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\";\n  var cjsRequirePost = \"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\";\n\n  var fnBracketRegEx = /\\(([^\\)]*)\\)/;\n\n  var wsRegEx = /^\\s+|\\s+$/g;\n\n  var requireRegExs = {};\n\n  function getCJSDeps(source, requireIndex) {\n\n    // remove comments\n    source = source.replace(commentRegEx, '');\n\n    // determine the require alias\n    var params = source.match(fnBracketRegEx);\n    var requireAlias = (params[1].split(',')[requireIndex] || 'require').replace(wsRegEx, '');\n\n    // find or generate the regex for this requireAlias\n    var requireRegEx = requireRegExs[requireAlias] || (requireRegExs[requireAlias] = new RegExp(cjsRequirePre + requireAlias + cjsRequirePost, 'g'));\n\n    requireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    var match;\n    while (match = requireRegEx.exec(source))\n      deps.push(match[2] || match[3]);\n\n    return deps;\n  }\n\n  /*\n    AMD-compatible require\n    To copy RequireJS, set window.require = window.requirejs = loader.amdRequire\n  */\n  function require(names, callback, errback, referer) {\n    // 'this' is bound to the loader\n    var loader = this;\n\n    // in amd, first arg can be a config object... we just ignore\n    if (typeof names == 'object' && !(names instanceof Array))\n      return require.apply(null, Array.prototype.splice.call(arguments, 1, arguments.length - 1));\n\n    // amd require\n    if (names instanceof Array)\n      Promise.all(names.map(function(name) {\n        return loader['import'](name, referer);\n      })).then(function(modules) {\n        callback.apply(null, modules);\n      }, errback);\n\n    // commonjs require\n    else if (typeof names == 'string') {\n      var module = loader.get(names);\n      return module.__useDefault ? module['default'] : module;\n    }\n\n    else\n      throw new TypeError('Invalid require');\n  };\n  loader.amdRequire = require;\n\n  function makeRequire(parentName, staticRequire, loader) {\n    return function(names, callback, errback) {\n      if (typeof names == 'string')\n        return staticRequire(names);\n      return require.call(loader, names, callback, errback, { name: parentName });\n    }\n  }\n\n  // run once per loader\n  function generateDefine(loader) {\n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      if (anonDefine || defineBundle) {\n        load.metadata.format = 'defined';\n        load.metadata.registered = true;\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    function define(name, deps, factory) {\n      if (typeof name != 'string') {\n        factory = deps;\n        deps = name;\n        name = null;\n      }\n      if (!(deps instanceof Array)) {\n        factory = deps;\n        deps = ['require', 'exports', 'module'];\n      }\n\n      if (typeof factory != 'function')\n        factory = (function(factory) {\n          return function() { return factory; }\n        })(factory);\n\n      // in IE8, a trailing comma becomes a trailing undefined entry\n      if (deps[deps.length - 1] === undefined)\n        deps.pop();\n\n      // remove system dependencies\n      var requireIndex, exportsIndex, moduleIndex;\n      \n      if ((requireIndex = indexOf.call(deps, 'require')) != -1) {\n        \n        deps.splice(requireIndex, 1);\n\n        var factoryText = factory.toString();\n\n        deps = deps.concat(getCJSDeps(factoryText, requireIndex));\n      }\n        \n\n      if ((exportsIndex = indexOf.call(deps, 'exports')) != -1)\n        deps.splice(exportsIndex, 1);\n      \n      if ((moduleIndex = indexOf.call(deps, 'module')) != -1)\n        deps.splice(moduleIndex, 1);\n\n      var define = {\n        deps: deps,\n        execute: function(require, exports, module) {\n\n          var depValues = [];\n          for (var i = 0; i < deps.length; i++)\n            depValues.push(require(deps[i]));\n\n          module.uri = loader.baseURL + module.id;\n\n          module.config = function() {};\n\n          // add back in system dependencies\n          if (moduleIndex != -1)\n            depValues.splice(moduleIndex, 0, module);\n          \n          if (exportsIndex != -1)\n            depValues.splice(exportsIndex, 0, exports);\n          \n          if (requireIndex != -1)\n            depValues.splice(requireIndex, 0, makeRequire(module.id, require, loader));\n\n          var output = factory.apply(global, depValues);\n\n          if (typeof output == 'undefined' && module)\n            output = module.exports;\n\n          if (typeof output != 'undefined')\n            return output;\n        }\n      };\n\n      // anonymous define\n      if (!name) {\n        // already defined anonymously -> throw\n        if (anonDefine)\n          throw new TypeError('Multiple defines for anonymous module');\n        anonDefine = define;\n      }\n      // named define\n      else {\n        // if it has no dependencies and we don't have any other\n        // defines, then let this be an anonymous define\n        if (deps.length == 0 && !anonDefine && !defineBundle)\n          anonDefine = define;\n\n        // otherwise its a bundle only\n        else\n          anonDefine = null;\n\n        // the above is just to support single modules of the form:\n        // define('jquery')\n        // still loading anonymously\n        // because it is done widely enough to be useful\n\n        // note this is now a bundle\n        defineBundle = true;\n\n        // define the module through the register registry\n        loader.register(name, define.deps, false, define.execute);\n      }\n    };\n    define.amd = {};\n    loader.amdDefine = define;\n  }\n\n  var anonDefine;\n  // set to true if the current module turns out to be a named define bundle\n  var defineBundle;\n\n  var oldModule, oldExports, oldDefine;\n\n  // adds define as a global (potentially just temporarily)\n  function createDefine(loader) {\n    if (!loader.amdDefine)\n      generateDefine(loader);\n\n    anonDefine = null;\n    defineBundle = null;\n\n    // ensure no NodeJS environment detection\n    var global = loader.global;\n\n    oldModule = global.module;\n    oldExports = global.exports;\n    oldDefine = global.define;\n\n    global.module = undefined;\n    global.exports = undefined;\n\n    if (global.define && global.define === loader.amdDefine)\n      return;\n\n    global.define = loader.amdDefine;\n  }\n\n  function removeDefine(loader) {\n    var global = loader.global;\n    global.define = oldDefine;\n    global.module = oldModule;\n    global.exports = oldExports;\n  }\n\n  generateDefine(loader);\n\n  if (loader.scriptLoader) {\n    var loaderFetch = loader.fetch;\n    loader.fetch = function(load) {\n      createDefine(this);\n      return loaderFetch.call(this, load);\n    }\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    if (load.metadata.format == 'amd' || !load.metadata.format && load.source.match(amdRegEx)) {\n      load.metadata.format = 'amd';\n\n      if (loader.execute !== false) {\n        createDefine(loader);\n\n        loader.__exec(load);\n\n        removeDefine(loader);\n\n        if (!anonDefine && !defineBundle && !isNode)\n          throw new TypeError('AMD module ' + load.name + ' did not define');\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS map support\n  \n  Provides map configuration through\n    System.map['jquery'] = 'some/module/map'\n\n  As well as contextual map config through\n    System.map['bootstrap'] = {\n      jquery: 'some/module/map2'\n    }\n\n  Note that this applies for subpaths, just like RequireJS\n\n  jquery      -> 'some/module/map'\n  jquery/path -> 'some/module/map/path'\n  bootstrap   -> 'bootstrap'\n\n  Inside any module name of the form 'bootstrap' or 'bootstrap/*'\n    jquery    -> 'some/module/map2'\n    jquery/p  -> 'some/module/map2/p'\n\n  Maps are carefully applied from most specific contextual map, to least specific global map\n*/\nfunction map(loader) {\n  loader.map = loader.map || {};\n\n  // return if prefix parts (separated by '/') match the name\n  // eg prefixMatch('jquery/some/thing', 'jquery') -> true\n  //    prefixMatch('jqueryhere/', 'jquery') -> false\n  function prefixMatch(name, prefix) {\n    if (name.length < prefix.length)\n      return false;\n    if (name.substr(0, prefix.length) != prefix)\n      return false;\n    if (name[prefix.length] && name[prefix.length] != '/')\n      return false;\n    return true;\n  }\n\n  // get the depth of a given path\n  // eg pathLen('some/name') -> 2\n  function pathLen(name) {\n    var len = 1;\n    for (var i = 0, l = name.length; i < l; i++)\n      if (name[i] === '/')\n        len++;\n    return len;\n  }\n\n  function doMap(name, matchLen, map) {\n    return map + name.substr(matchLen);\n  }\n\n  // given a relative-resolved module name and normalized parent name,\n  // apply the map configuration\n  function applyMap(name, parentName, loader) {\n    var curMatch, curMatchLength = 0;\n    var curParent, curParentMatchLength = 0;\n    var tmpParentLength, tmpPrefixLength;\n    var subPath;\n    var nameParts;\n    \n    // first find most specific contextual match\n    if (parentName) {\n      for (var p in loader.map) {\n        var curMap = loader.map[p];\n        if (typeof curMap != 'object')\n          continue;\n\n        // most specific parent match wins first\n        if (!prefixMatch(parentName, p))\n          continue;\n\n        tmpParentLength = pathLen(p);\n        if (tmpParentLength <= curParentMatchLength)\n          continue;\n\n        for (var q in curMap) {\n          // most specific name match wins\n          if (!prefixMatch(name, q))\n            continue;\n          tmpPrefixLength = pathLen(q);\n          if (tmpPrefixLength <= curMatchLength)\n            continue;\n\n          curMatch = q;\n          curMatchLength = tmpPrefixLength;\n          curParent = p;\n          curParentMatchLength = tmpParentLength;\n        }\n      }\n    }\n\n    // if we found a contextual match, apply it now\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curParent][curMatch]);\n\n    // now do the global map\n    for (var p in loader.map) {\n      var curMap = loader.map[p];\n      if (typeof curMap != 'string')\n        continue;\n\n      if (!prefixMatch(name, p))\n        continue;\n\n      var tmpPrefixLength = pathLen(p);\n\n      if (tmpPrefixLength <= curMatchLength)\n        continue;\n\n      curMatch = p;\n      curMatchLength = tmpPrefixLength;\n    }\n\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curMatch]);\n\n    return name;\n  }\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    if (!loader.map)\n      loader.map = {};\n\n    var isPackage = false;\n    if (name.substr(name.length - 1, 1) == '/') {\n      isPackage = true;\n      name += '#';\n    }\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      name = applyMap(name, parentName, loader);\n\n      // Normalize \"module/\" into \"module/module\"\n      // Convenient for packages\n      if (isPackage) {\n        var nameParts = name.split('/');\n        nameParts.pop();\n        var pkgName = nameParts.pop();\n        nameParts.push(pkgName);\n        nameParts.push(pkgName);\n        name = nameParts.join('/');\n      }\n\n      return name;\n    });\n  }\n}\n/*\n  SystemJS Plugin Support\n\n  Supports plugin syntax with \"!\"\n\n  The plugin name is loaded as a module itself, and can override standard loader hooks\n  for the plugin resource. See the plugin section of the systemjs readme.\n*/\nfunction plugins(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    // if parent is a plugin, normalize against the parent plugin argument only\n    var parentPluginIndex;\n    if (parentName && (parentPluginIndex = parentName.indexOf('!')) != -1)\n      parentName = parentName.substr(0, parentPluginIndex);\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      // if this is a plugin, normalize the plugin name and the argument\n      var pluginIndex = name.lastIndexOf('!');\n      if (pluginIndex != -1) {\n        var argumentName = name.substr(0, pluginIndex);\n\n        // plugin name is part after \"!\" or the extension itself\n        var pluginName = name.substr(pluginIndex + 1) || argumentName.substr(argumentName.lastIndexOf('.') + 1);\n\n        // normalize the plugin name relative to the same parent\n        return new Promise(function(resolve) {\n          resolve(loader.normalize(pluginName, parentName, parentAddress)); \n        })\n        // normalize the plugin argument\n        .then(function(_pluginName) {\n          pluginName = _pluginName;\n          return loader.normalize(argumentName, parentName, parentAddress);\n        })\n        .then(function(argumentName) {\n          return argumentName + '!' + pluginName;\n        });\n      }\n\n      // standard normalization\n      return name;\n    });\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    var name = load.name;\n\n    // only fetch the plugin itself if this name isn't defined\n    if (this.defined && this.defined[name])\n      return loaderLocate.call(this, load);\n\n    // plugin\n    var pluginIndex = name.lastIndexOf('!');\n    if (pluginIndex != -1) {\n      var pluginName = name.substr(pluginIndex + 1);\n\n      // the name to locate is the plugin argument only\n      load.name = name.substr(0, pluginIndex);\n\n      var pluginLoader = loader.pluginLoader || loader;\n\n      // load the plugin module\n      // NB ideally should use pluginLoader.load for normalized,\n      //    but not currently working for some reason\n      return pluginLoader['import'](pluginName)\n      .then(function() {\n        var plugin = pluginLoader.get(pluginName);\n        plugin = plugin['default'] || plugin;\n\n        // allow plugins to opt-out of build\n        if (plugin.build === false && loader.pluginLoader)\n          load.metadata.build = false;\n\n        // store the plugin module itself on the metadata\n        load.metadata.plugin = plugin;\n        load.metadata.pluginName = pluginName;\n        load.metadata.pluginArgument = load.name;\n\n        // run plugin locate if given\n        if (plugin.locate)\n          return plugin.locate.call(loader, load);\n\n        // otherwise use standard locate without '.js' extension adding\n        else\n          return Promise.resolve(loader.locate(load))\n          .then(function(address) {\n            return address.substr(0, address.length - 3);\n          });\n      });\n    }\n\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (load.metadata.build === false)\n      return '';\n    else if (load.metadata.plugin && load.metadata.plugin.fetch && !load.metadata.pluginFetchCalled) {\n      load.metadata.pluginFetchCalled = true;\n      return load.metadata.plugin.fetch.call(loader, load, loaderFetch);\n    }\n    else\n      return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.translate)\n      return Promise.resolve(load.metadata.plugin.translate.call(loader, load)).then(function(result) {\n        if (result)\n          load.source = result;\n        return loaderTranslate.call(loader, load);\n      });\n    else\n      return loaderTranslate.call(loader, load);\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.instantiate)\n      return Promise.resolve(load.metadata.plugin.instantiate.call(loader, load)).then(function(result) {\n        load.metadata.format = 'defined';\n        load.metadata.execute = function() {\n          return result;\n        };\n        return loaderInstantiate.call(loader, load);\n      });\n    else if (load.metadata.plugin && load.metadata.plugin.build === false) {\n      load.metadata.format = 'defined';\n      load.metadata.deps.push(load.metadata.pluginName);\n      load.metadata.execute = function() {\n        return loader.newModule({});\n      };\n      return loaderInstantiate.call(loader, load);\n    }\n    else\n      return loaderInstantiate.call(loader, load);\n  }\n\n}/*\n  System bundles\n\n  Allows a bundle module to be specified which will be dynamically \n  loaded before trying to load a given module.\n\n  For example:\n  System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n\n  Will result in a load to \"mybundle\" whenever a load to \"jquery\"\n  or \"bootstrap/js/bootstrap\" is made.\n\n  In this way, the bundle becomes the request that provides the module\n*/\n\nfunction bundles(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  // bundles support (just like RequireJS)\n  // bundle name is module name of bundle itself\n  // bundle is array of modules defined by the bundle\n  // when a module in the bundle is requested, the bundle is loaded instead\n  // of the form System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n  loader.bundles = loader.bundles || {};\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (loader.trace)\n      return loaderFetch.call(this, load);\n    if (!loader.bundles)\n      loader.bundles = {};\n\n    // if this module is in a bundle, load the bundle first then\n    for (var b in loader.bundles) {\n      if (indexOf.call(loader.bundles[b], load.name) == -1)\n        continue;\n      // we do manual normalization in case the bundle is mapped\n      // this is so we can still know the normalized name is a bundle\n      return Promise.resolve(loader.normalize(b))\n      .then(function(normalized) {\n        loader.bundles[normalized] = loader.bundles[normalized] || loader.bundles[b];\n\n        // note this module is a bundle in the meta\n        loader.meta = loader.meta || {};\n        loader.meta[normalized] = loader.meta[normalized] || {};\n        loader.meta[normalized].bundle = true;\n\n        return loader.load(normalized);\n      })\n      .then(function() {\n        return '';\n      });\n    }\n    return loaderFetch.call(this, load);\n  }\n}/*\n  SystemJS Semver Version Addon\n  \n  1. Uses Semver convention for major and minor forms\n\n  Supports requesting a module from a package that contains a version suffix\n  with the following semver ranges:\n    module       - any version\n    module@1     - major version 1, any minor (not prerelease)\n    module@1.2   - minor version 1.2, any patch (not prerelease)\n    module@1.2.3 - exact version\n\n  It is assumed that these modules are provided by the server / file system.\n\n  First checks the already-requested packages to see if there are any packages \n  that would match the same package and version range.\n\n  This provides a greedy algorithm as a simple fix for sharing version-managed\n  dependencies as much as possible, which can later be optimized through version\n  hint configuration created out of deeper version tree analysis.\n  \n  2. Semver-compatibility syntax (caret operator - ^)\n\n  Compatible version request support is then also provided for:\n\n    module@^1.2.3        - module@1, >=1.2.3\n    module@^1.2          - module@1, >=1.2.0\n    module@^1            - module@1\n    module@^0.5.3        - module@0.5, >= 0.5.3\n    module@^0.0.1        - module@0.0.1\n\n  The ^ symbol is always normalized out to a normal version request.\n\n  This provides comprehensive semver compatibility.\n  \n  3. System.versions version hints and version report\n\n  Note this addon should be provided after all other normalize overrides.\n\n  The full list of versions can be found at System.versions providing an insight\n  into any possible version forks.\n\n  It is also possible to create version solution hints on the System global:\n\n  System.versions = {\n    jquery: ['1.9.2', '2.0.3'],\n    bootstrap: '3.0.1'\n  };\n\n  Versions can be an array or string for a single version.\n\n  When a matching semver request is made (jquery@1.9, jquery@1, bootstrap@3)\n  they will be converted to the latest version match contained here, if present.\n\n  Prereleases in this versions list are also allowed to satisfy ranges when present.\n*/\n\nfunction versions(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var semverRegEx = /^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:-([\\da-z-]+(?:\\.[\\da-z-]+)*)(?:\\+([\\da-z-]+(?:\\.[\\da-z-]+)*))?)?)?)?$/i;\n  var numRegEx = /^\\d+$/;\n\n  function toInt(num) {\n    return parseInt(num, 10);\n  }\n\n  function parseSemver(v) {\n    var semver = v.match(semverRegEx);\n    if (!semver)\n      return {\n        tag: v\n      };\n    else\n      return {\n        major: toInt(semver[1]),\n        minor: toInt(semver[2]),\n        patch: toInt(semver[3]),\n        pre: semver[4] && semver[4].split('.')\n      };\n  }\n\n  var parts = ['major', 'minor', 'patch'];\n  function semverCompareParsed(v1, v2) {\n    // not semvers - tags have equal precedence\n    if (v1.tag && v2.tag)\n      return 0;\n\n    // semver beats non-semver\n    if (v1.tag)\n      return -1;\n    if (v2.tag)\n      return 1;\n\n    // compare version numbers\n    for (var i = 0; i < parts.length; i++) {\n      var part = parts[i];\n      var part1 = v1[part];\n      var part2 = v2[part];\n      if (part1 == part2)\n        continue;\n      if (isNaN(part1))\n        return -1;\n      if (isNaN(part2))\n        return 1;\n      return part1 > part2 ? 1 : -1;\n    }\n\n    if (!v1.pre && !v2.pre)\n      return 0;\n\n    if (!v1.pre)\n      return 1;\n    if (!v2.pre)\n      return -1;\n\n    // prerelease comparison\n    for (var i = 0, l = Math.min(v1.pre.length, v2.pre.length); i < l; i++) {\n      if (v1.pre[i] == v2.pre[i])\n        continue;\n\n      var isNum1 = v1.pre[i].match(numRegEx);\n      var isNum2 = v2.pre[i].match(numRegEx);\n      \n      // numeric has lower precedence\n      if (isNum1 && !isNum2)\n        return -1;\n      if (isNum2 && !isNum1)\n        return 1;\n\n      // compare parts\n      if (isNum1 && isNum2)\n        return toInt(v1.pre[i]) > toInt(v2.pre[i]) ? 1 : -1;\n      else\n        return v1.pre[i] > v2.pre[i] ? 1 : -1;\n    }\n\n    if (v1.pre.length == v2.pre.length)\n      return 0;\n\n    // more pre-release fields win if equal\n    return v1.pre.length > v2.pre.length ? 1 : -1;\n  }\n\n  // match against a parsed range object\n  // saves operation repetition\n  // doesn't support tags\n  // if not semver or fuzzy, assume exact\n  function matchParsed(range, version) {\n    var rangeVersion = range.version;\n\n    if (rangeVersion.tag)\n      return rangeVersion.tag == version.tag;\n\n    // if the version is less than the range, it's not a match\n    if (semverCompareParsed(rangeVersion, version) == 1)\n      return false;\n\n    // now we just have to check that the version isn't too high for the range\n    if (isNaN(version.minor) || isNaN(version.patch))\n      return false;\n\n    // if the version has a prerelease, ensure the range version has a prerelease in it\n    // and that we match the range version up to the prerelease exactly\n    if (version.pre) {\n      if (!(rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch))\n        return false;\n      return range.semver || range.fuzzy || rangeVersion.pre.join('.') == version.pre.join('.');\n    }\n\n    // check semver range\n    if (range.semver) {\n      // ^0\n      if (rangeVersion.major == 0 && isNaN(rangeVersion.minor))\n        return version.major < 1;\n      // ^1..\n      else if (rangeVersion.major >= 1)\n        return rangeVersion.major == version.major;\n      // ^0.1, ^0.2\n      else if (rangeVersion.minor >= 1)\n        return rangeVersion.minor == version.minor;\n      // ^0.0.0\n      else\n        return (rangeVersion.patch || 0) == version.patch;\n    }\n\n    // check fuzzy range\n    if (range.fuzzy)\n      return version.major == rangeVersion.major && version.minor < (rangeVersion.minor || 0) + 1;\n\n    // exact match\n    // eg 001.002.003 matches 1.2.3\n    return !rangeVersion.pre && rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch;\n  }\n\n  /*\n   * semver       - is this a semver range\n   * fuzzy        - is this a fuzzy range\n   * version      - the parsed version object\n   */\n  function parseRange(range) {\n    var rangeObj = {};\n\n    ((rangeObj.semver = range.substr(0, 1) == '^') \n        || (rangeObj.fuzzy = range.substr(0, 1) == '~')\n    ) && (range = range.substr(1));\n\n    var rangeVersion = rangeObj.version = parseSemver(range);\n\n    if (rangeVersion.tag)\n      return rangeObj;\n\n    // 0, 0.1 behave like ~0, ~0.1\n    if (!rangeObj.fuzzy && !rangeObj.semver && (isNaN(rangeVersion.minor) || isNaN(rangeVersion.patch)))\n      rangeObj.fuzzy = true;\n\n    // ~1, ~0 behave like ^1, ^0\n    if (rangeObj.fuzzy && isNaN(rangeVersion.minor)) {\n      rangeObj.semver = true;\n      rangeObj.fuzzy = false;\n    }\n\n    // ^0.0 behaves like ~0.0\n    if (rangeObj.semver && !isNaN(rangeVersion.minor) && isNaN(rangeVersion.patch)) {\n      rangeObj.semver = false;\n      rangeObj.fuzzy = true;\n    }\n\n    return rangeObj;\n  }\n\n  function semverCompare(v1, v2) {\n    return semverCompareParsed(parseSemver(v1), parseSemver(v2));\n  }\n\n  loader.versions = loader.versions || {};\n\n  var loaderNormalize = loader.normalize;\n  // NOW use modified match algorithm if possible\n  loader.normalize = function(name, parentName, parentAddress) {\n    if (!loader.versions)\n      loader.versions = {};\n    var packageVersions = this.versions;\n\n    // strip the version before applying map config\n    var stripVersion, stripSubPathLength;\n    if (name.indexOf('@') > 0) {\n      var versionIndex = name.lastIndexOf('@');\n      var parts = name.substr(versionIndex + 1, name.length - versionIndex - 1).split('/');\n      stripVersion = parts[0];\n      stripSubPathLength = parts.length;\n      name = name.substr(0, versionIndex) + name.substr(versionIndex + stripVersion.length + 1, name.length - versionIndex - stripVersion.length - 1);\n    }\n\n    // run all other normalizers first\n    return Promise.resolve(loaderNormalize.call(this, name, parentName, parentAddress)).then(function(normalized) {\n      \n      var index = normalized.indexOf('@');\n\n      // if we stripped a version, and it still has no version, add it back\n      if (stripVersion && (index == -1 || index == 0)) {\n        var parts = normalized.split('/');\n        parts[parts.length - stripSubPathLength] += '@' + stripVersion;\n        normalized = parts.join('/');\n        index = normalized.indexOf('@');\n      }\n\n      // see if this module corresponds to a package already in our versioned packages list\n      \n      // no version specified - check against the list (given we don't know the package name)\n      var nextChar, versions;\n      if (index == -1 || index == 0) {\n        for (var p in packageVersions) {\n          versions = packageVersions[p];\n          if (normalized.substr(0, p.length) != p)\n            continue;\n\n          nextChar = normalized.substr(p.length, 1);\n\n          if (nextChar && nextChar != '/')\n            continue;\n\n          // match -> take latest version\n          return p + '@' + (typeof versions == 'string' ? versions : versions[versions.length - 1]) + normalized.substr(p.length);\n        }\n        return normalized;\n      }\n\n      // get the version info\n      var packageName = normalized.substr(0, index);\n      var range = normalized.substr(index + 1).split('/')[0];\n      var rangeLength = range.length;\n      var parsedRange = parseRange(normalized.substr(index + 1).split('/')[0]);\n      versions = packageVersions[normalized.substr(0, index)] || [];\n      if (typeof versions == 'string')\n        versions = [versions];\n\n      // find a match in our version list\n      for (var i = versions.length - 1; i >= 0; i--) {\n        if (matchParsed(parsedRange, parseSemver(versions[i])))\n          return packageName + '@' + versions[i] + normalized.substr(index + rangeLength + 1);\n      }\n\n      // no match found -> send a request to the server\n      var versionRequest;\n      if (parsedRange.semver) {\n        versionRequest = parsedRange.version.major == 0 && !isNaN(parsedRange.version.minor) ? '0.' + parsedRange.version.minor : parsedRange.version.major;\n      }\n      else if (parsedRange.fuzzy) {\n        versionRequest = parsedRange.version.major + '.' + parsedRange.version.minor;\n      }\n      else {\n        versionRequest = range;\n        versions.push(range);\n        versions.sort(semverCompare);\n        packageVersions[packageName] = versions.length == 1 ? versions[0] : versions;\n      }\n\n      return packageName + '@' + versionRequest + normalized.substr(index + rangeLength + 1);\n    });\n  }\n}\n/*\n * Dependency Tree Cache\n * \n * Allows a build to pre-populate a dependency trace tree on the loader of \n * the expected dependency tree, to be loaded upfront when requesting the\n * module, avoinding the n round trips latency of module loading, where \n * n is the dependency tree depth.\n *\n * eg:\n * System.depCache = {\n *  'app': ['normalized', 'deps'],\n *  'normalized': ['another'],\n *  'deps': ['tree']\n * };\n * \n * System.import('app') \n * // simultaneously starts loading all of:\n * // 'normalized', 'deps', 'another', 'tree'\n * // before \"app\" source is even loaded\n */\n\nfunction depCache(loader) {\n  loader.depCache = loader.depCache || {};\n\n  loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    if (!loader.depCache)\n      loader.depCache = {};\n\n    // load direct deps, in turn will pick up their trace trees\n    var deps = loader.depCache[load.name];\n    if (deps)\n      for (var i = 0; i < deps.length; i++)\n        loader.load(deps[i]);\n\n    return loaderLocate.call(loader, load);\n  }\n}\n  \nscriptLoader(System);\nmeta(System);\nregister(System);\ncore(System);\nglobal(System);\ncjs(System);\namd(System);\nmap(System);\nplugins(System);\nbundles(System);\nversions(System);\ndepCache(System);\n  if (!System.paths['@traceur'])\n    System.paths['@traceur'] = $__curScript && $__curScript.getAttribute('data-traceur-src')\n      || ($__curScript && $__curScript.src \n        ? $__curScript.src.substr(0, $__curScript.src.lastIndexOf('/') + 1) \n        : System.baseURL + (System.baseURL.lastIndexOf('/') == System.baseURL.length - 1 ? '' : '/')\n        ) + 'traceur.js';\n};\n\nvar $__curScript, __eval;\n\n(function() {\n\n  var doEval;\n\n  __eval = function(source, address, sourceMap) {\n    source += '\\n//# sourceURL=' + address + (sourceMap ? '\\n//# sourceMappingURL=' + sourceMap : '');\n\n    try {\n      doEval(source);\n    }\n    catch(e) {\n      var msg = 'Error evaluating ' + address + '\\n';\n      if (e instanceof Error)\n        e.message = msg + e.message;\n      else\n        e = msg + e;\n      throw e;\n    }\n  };\n\n  var isWorker = typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined';\n\n  if (isBrowser) {\n    var head;\n\n    var scripts = document.getElementsByTagName('script');\n    $__curScript = scripts[scripts.length - 1];\n\n    // globally scoped eval for the browser\n    doEval = function(source) {\n      if (!head)\n        head = document.head || document.body || document.documentElement;\n\n      var script = document.createElement('script');\n      script.text = source;\n      var onerror = window.onerror;\n      var e;\n      window.onerror = function(_e) {\n        e = _e;\n      }\n      head.appendChild(script);\n      head.removeChild(script);\n      window.onerror = onerror;\n      if (e)\n        throw e;\n    }\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      // determine the current script path as the base path\n      var curPath = $__curScript.src;\n      var basePath = curPath.substr(0, curPath.lastIndexOf('/') + 1);\n      document.write(\n        '<' + 'script type=\"text/javascript\" src=\"' + basePath + 'es6-module-loader.js\" data-init=\"upgradeSystemLoader\">' + '<' + '/script>'\n      );\n    }\n    else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else if(isWorker) {\n    doEval = function(source) {\n      try {\n        eval(source);\n      } catch(e) {\n        throw e;\n      }\n    };\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      var basePath = '';\n      try {\n        throw new TypeError('Unable to get Worker base path.');\n      } catch(err) {\n        var idx = err.stack.indexOf('at ') + 3;\n        var withSystem = err.stack.substr(idx, err.stack.substr(idx).indexOf('\\n'));\n        basePath = withSystem.substr(0, withSystem.lastIndexOf('/') + 1);\n      }\n      importScripts(basePath + 'es6-module-loader.js');\n    } else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else {\n    var es6ModuleLoader = require('es6-module-loader');\n    $__global.System = es6ModuleLoader.System;\n    $__global.Loader = es6ModuleLoader.Loader;\n    $__global.upgradeSystemLoader();\n    module.exports = $__global.System;\n\n    // global scoped eval for node\n    var vm = require('vm');\n    doEval = function(source, address, sourceMap) {\n      vm.runInThisContext(source);\n    }\n  }\n})();\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/system.js/dist/system.js",
    "content": "!function($__global){$__global.upgradeSystemLoader=function(){function e(e){var t=String(e).replace(/^\\s+|\\s+$/g,\"\").match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);return t?{href:t[0]||\"\",protocol:t[1]||\"\",authority:t[2]||\"\",host:t[3]||\"\",hostname:t[4]||\"\",port:t[5]||\"\",pathname:t[6]||\"\",search:t[7]||\"\",hash:t[8]||\"\"}:null}function t(t,a){function r(e){var t=[];return e.replace(/^(\\.\\.?(\\/|$))+/,\"\").replace(/\\/(\\.(\\/|$))+/g,\"/\").replace(/\\/\\.\\.$/,\"/../\").replace(/\\/?[^\\/]*/g,function(e){\"/..\"===e?t.pop():t.push(e)}),t.join(\"\").replace(/^\\//,\"/\"===e.charAt(0)?\"/\":\"\")}return a=e(a||\"\"),t=e(t||\"\"),a&&t?(a.protocol||t.protocol)+(a.protocol||a.authority?a.authority:t.authority)+r(a.protocol||a.authority||\"/\"===a.pathname.charAt(0)?a.pathname:a.pathname?(t.authority&&!t.pathname?\"/\":\"\")+t.pathname.slice(0,t.pathname.lastIndexOf(\"/\")+1)+a.pathname:t.pathname)+(a.protocol||a.authority||a.pathname?a.search:a.search||t.search)+a.hash:null}function a(e){function t(e,t){var a=e.meta&&e.meta[t.name];if(a)for(var r in a)t.metadata[r]=t.metadata[r]||a[r]}var a=/^(\\s*\\/\\*.*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/,r=/\\/\\*.*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;e.meta={};var n=e.locate;e.locate=function(e){return t(this,e),n.call(this,e)};var o=e.translate;e.translate=function(e){var n=e.source.match(a);if(n)for(var i=n[0].match(r),s=0;s<i.length;s++){var l=i[s].length,u=i[s].substr(0,1);if(\";\"==i[s].substr(l-1,1)&&l--,'\"'==u||\"'\"==u){var d=i[s].substr(1,i[s].length-3),c=d.substr(0,d.indexOf(\" \"));if(c){var f=d.substr(c.length+1,d.length-c.length-1);e.metadata[c]instanceof Array?e.metadata[c].push(f):e.metadata[c]||(e.metadata[c]=f)}}}return t(this,e),o.call(this,e)}}function r(e){function a(e){var a=this;\"@traceur\"==e.name&&(h=m);var r,n=e.source.lastIndexOf(\"\\n\");-1!=n&&\"//# sourceMappingURL=\"==e.source.substr(n+1,21)&&(r=e.source.substr(n+22,e.source.length-n-22),\"undefined\"!=typeof t&&(r=t(e.address,r))),__eval(e.source,e.address,r),\"@traceur\"==e.name&&(a.global.traceurSystem=a.global.System,a.global.System=h)}function r(e){for(var t=[],a=0,r=e.length;r>a;a++)-1==p.call(t,e[a])&&t.push(e[a]);return t}function n(t,a,r,n){\"string\"!=typeof t&&(n=r,r=a,a=t,t=null),v=!0;var o;if(o=\"boolean\"==typeof r?{declarative:!1,deps:a,execute:n,executingRequire:r}:{declarative:!0,deps:a,declare:r},t)o.name=t,e.defined[t]||(e.defined[t]=o);else if(o.declarative){if(g)throw new TypeError(\"Multiple anonymous System.register calls in the same module file.\");g=o}}function o(e){if(!e.register){e.register=n,e.defined||(e.defined={});var t=e.onScriptLoad;e.onScriptLoad=function(e){t(e),g&&(e.metadata.entry=g),v&&(e.metadata.format=e.metadata.format||\"register\",e.metadata.registered=!0)}}}function i(e,t,a){if(a[e.groupIndex]=a[e.groupIndex]||[],-1==p.call(a[e.groupIndex],e)){a[e.groupIndex].push(e);for(var r=0,n=e.normalizedDeps.length;n>r;r++){var o=e.normalizedDeps[r],s=t.defined[o];if(s&&!s.evaluated){var l=e.groupIndex+(s.declarative!=e.declarative);if(void 0===s.groupIndex||s.groupIndex<l){if(s.groupIndex&&(a[s.groupIndex].splice(p.call(a[s.groupIndex],s),1),0==a[s.groupIndex].length))throw new TypeError(\"Mixed dependency cycle detected\");s.groupIndex=l}i(s,t,a)}}}}function s(e,t){var a=t.defined[e];a.groupIndex=0;var r=[];i(a,t,r);for(var n=!!a.declarative==r.length%2,o=r.length-1;o>=0;o--){for(var s=r[o],l=0;l<s.length;l++){var d=s[l];n?u(d,t):c(d,t)}n=!n}}function l(e){return b[e]||(b[e]={name:e,dependencies:[],exports:{},importers:[]})}function u(e,t){if(!e.module){var a=e.module=l(e.name),r=e.module.exports,n=e.declare.call(t.global,function(e,t){a.locked=!0,r[e]=t;for(var n=0,o=a.importers.length;o>n;n++){var i=a.importers[n];if(!i.locked){var s=p.call(i.dependencies,a);i.setters[s](r)}}return a.locked=!1,t});if(a.setters=n.setters,a.execute=n.execute,!a.setters||!a.execute)throw new TypeError(\"Invalid System.register form for \"+e.name);for(var o=0,i=e.normalizedDeps.length;i>o;o++){var s,d=e.normalizedDeps[o],c=t.defined[d],f=b[d];f?s=f.exports:c&&!c.declarative?s={\"default\":c.module.exports,__useDefault:!0}:c?(u(c,t),f=c.module,s=f.exports):s=t.get(d),f&&f.importers?(f.importers.push(a),a.dependencies.push(f)):a.dependencies.push(null),a.setters[o]&&a.setters[o](s)}}}function d(e,t){var a,r=t.defined[e];if(r)r.declarative?f(e,[],t):r.evaluated||c(r,t),a=r.module.exports;else if(a=t.get(e),!a)throw new Error(\"Unable to load dependency \"+e+\".\");return(!r||r.declarative)&&a&&a.__useDefault?a[\"default\"]:a}function c(e,t){if(!e.module){var a={},r=e.module={exports:a,id:e.name};if(!e.executingRequire)for(var n=0,o=e.normalizedDeps.length;o>n;n++){var i=e.normalizedDeps[n],s=t.defined[i];s&&c(s,t)}e.evaluated=!0;var l=e.execute.call(t.global,function(a){for(var r=0,n=e.deps.length;n>r;r++)if(e.deps[r]==a)return d(e.normalizedDeps[r],t);throw new TypeError(\"Module \"+a+\" not declared as a dependency.\")},a,r);l&&(r.exports=l)}}function f(e,t,a){var r=a.defined[e];if(!r.evaluated&&r.declarative){t.push(e);for(var n=0,o=r.normalizedDeps.length;o>n;n++){var i=r.normalizedDeps[n];-1==p.call(t,i)&&(a.defined[i]?f(i,t,a):a.get(i))}r.evaluated||(r.evaluated=!0,r.module.execute.call(a.global))}}\"undefined\"==typeof p&&(p=Array.prototype.indexOf),\"undefined\"==typeof __eval&&(__eval=0||eval);var h;e.__exec=a;var g,v;o(e);var b={},y=/System\\.register/,x=e.fetch;e.fetch=function(e){var t=this;return o(t),t.defined[e.name]?(e.metadata.format=\"defined\",\"\"):(g=null,v=!1,x.call(t,e))};var _=e.translate;e.translate=function(e){return this.register=n,this.__exec=a,e.metadata.deps=e.metadata.deps||[],Promise.resolve(_.call(this,e)).then(function(t){return(e.metadata.init||e.metadata.exports)&&(e.metadata.format=e.metadata.format||\"global\"),(\"register\"==e.metadata.format||!e.metadata.format&&e.source.match(y))&&(e.metadata.format=\"register\"),t})};var w=e.instantiate;e.instantiate=function(e){var t,a=this;if(a.defined[e.name])t=a.defined[e.name],t.deps=t.deps.concat(e.metadata.deps);else if(e.metadata.entry)t=e.metadata.entry;else if(e.metadata.execute)t={declarative:!1,deps:e.metadata.deps||[],execute:e.metadata.execute,executingRequire:e.metadata.executingRequire};else if(\"register\"==e.metadata.format){g=null,v=!1;var o=a.global.System=a.global.System||a,i=o.register;if(o.register=n,a.__exec(e),o.register=i,g&&(t=g),!t&&o.defined[e.name]&&(t=o.defined[e.name]),!v&&!e.metadata.registered)throw new TypeError(e.name+\" detected as System.register but didn't execute.\")}if(!t&&\"es6\"!=e.metadata.format)return{deps:[],execute:function(){return a.newModule({})}};if(!t)return w.call(this,e);a.defined[e.name]=t,t.deps=r(t.deps),t.name=e.name;for(var l=[],u=0,d=t.deps.length;d>u;u++)l.push(Promise.resolve(a.normalize(t.deps[u],e.name)));return Promise.all(l).then(function(r){return t.normalizedDeps=r,{deps:t.deps,execute:function(){s(e.name,a),f(e.name,[],a),a.defined[e.name]=void 0;var r=a.newModule(t.declarative?t.module.exports:{\"default\":t.module.exports,__useDefault:!0});return r}}})}}function n(e){var a=e[\"import\"];e[\"import\"]=function(e,t){return a.call(this,e,t).then(function(e){return e.__useDefault?e[\"default\"]:e})},e.set(\"@empty\",e.newModule({})),\"undefined\"!=typeof require&&(e._nodeRequire=require),e.config=function(e){for(var t in e){var a=e[t];if(\"object\"!=typeof a||a instanceof Array)this[t]=a;else{this[t]=this[t]||{};for(var r in a)this[t][r]=a[r]}}};var r;if(\"undefined\"==typeof window&&\"undefined\"==typeof WorkerGlobalScope)r=\"file:\"+process.cwd()+\"/\";else if(\"undefined\"==typeof window)r=e.global.location.href;else if(r=document.baseURI,!r){var n=document.getElementsByTagName(\"base\");r=n[0]&&n[0].href||window.location.href}var o,i=e.locate;e.locate=function(e){return this.baseURL!=o&&(o=t(r,this.baseURL),\"/\"!=o.substr(o.length-1,1)&&(o+=\"/\"),this.baseURL=o),Promise.resolve(i.call(this,e))};var s=/(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let))/,l=e.translate;e.translate=function(e){var t=this;return\"@traceur\"==e.name?l.call(t,e):\"es6\"!=e.metadata.format&&(e.metadata.format||!e.source.match(s))||(e.metadata.format=\"es6\",t.global.traceur)?l.call(t,e):t[\"import\"](\"@traceur\").then(function(){return l.call(t,e)})};var u=e.instantiate;e.instantiate=function(e){var t=this;return\"@traceur\"==e.name?(t.__exec(e),{deps:[],execute:function(){return t.newModule({})}}):u.call(t,e)}}function o(e){function t(e,t){for(var a=e.split(\".\");a.length;)t=t[a.shift()];return t}function a(e){if(!e.has(\"@@global-helpers\")){var a,r,n=e.global.hasOwnProperty,o={};e.set(\"@@global-helpers\",e.newModule({prepareGlobal:function(t,i){for(var s=0;s<i.length;s++){var l=o[i[s]];if(l)for(var u in l)e.global[u]=l[u]}a={},r=[\"indexedDB\",\"sessionStorage\",\"localStorage\",\"clipboardData\",\"frames\",\"webkitStorageInfo\",\"toolbar\",\"statusbar\",\"scrollbars\",\"personalbar\",\"menubar\",\"locationbar\",\"webkitIndexedDB\"];for(var d in e.global)if(-1==p.call(r,d)&&(!n||e.global.hasOwnProperty(d)))try{a[d]=e.global[d]}catch(c){r.push(d)}},retrieveGlobal:function(i,s,l){var u,d,c={};if(l){for(var f=[],m=0;m<deps.length;m++)f.push(require(deps[m]));u=l.apply(e.global,f)}else if(s){var h=s.split(\".\")[0];u=t(s,e.global),c[h]=e.global[h]}else for(var g in e.global)-1==p.call(r,g)&&(n&&!e.global.hasOwnProperty(g)||g==e.global||a[g]==e.global[g]||(c[g]=e.global[g],u?u!==e.global[g]&&(d=!0):u!==!1&&(u=e.global[g])));return o[i]=c,d?c:u}}))}}a(e);var r=e.instantiate;e.instantiate=function(e){var t=this;a(t);var n=e.metadata.exports;return e.metadata.format||(e.metadata.format=\"global\"),\"global\"==e.metadata.format&&(e.metadata.execute=function(a,r,o){t.get(\"@@global-helpers\").prepareGlobal(o.id,e.metadata.deps),n&&(e.source+='\\nthis[\"'+n+'\"] = '+n+\";\");var i=t.global.define;return t.global.define=void 0,t.global.module=void 0,t.global.exports=void 0,t.__exec(e),t.global.define=i,t.get(\"@@global-helpers\").retrieveGlobal(o.id,n,e.metadata.init)}),r.call(t,e)}}function i(e){function t(e){r.lastIndex=0;var t=[];e.length/e.split(\"\\n\").length<200&&(e=e.replace(n,\"\"));for(var a;a=r.exec(e);)t.push(a[1].substr(1,a[1].length-2));return t}var a=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)(exports\\s*\\[['\"]|\\exports\\s*\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*\\=/,r=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g,n=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm,o=e.instantiate;e.instantiate=function(n){return n.metadata.format||(a.lastIndex=0,r.lastIndex=0,(r.exec(n.source)||a.exec(n.source))&&(n.metadata.format=\"cjs\")),\"cjs\"==n.metadata.format&&(n.metadata.deps=n.metadata.deps?n.metadata.deps.concat(t(n.source)):n.metadata.deps,n.metadata.executingRequire=!0,n.metadata.execute=function(t,a,r){var o=(n.address||\"\").split(\"/\");o.pop(),o=o.join(\"/\"),e.global._g={global:e.global,exports:a,module:r,require:t,__filename:n.address,__dirname:o};var i=\"(function(global, exports, module, require, __filename, __dirname) { \"+n.source+\"\\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);\",s=e.global.define;e.global.define=void 0,e.__exec({name:n.name,address:n.address,source:i}),e.global.define=s,e.global._g=void 0}),o.call(this,n)}}function s(e){function t(e,t){e=e.replace(d,\"\");var a=e.match(m),r=(a[1].split(\",\")[t]||\"require\").replace(h,\"\"),n=g[r]||(g[r]=new RegExp(c+r+f,\"g\"));n.lastIndex=0;for(var o,i=[];o=n.exec(e);)i.push(o[2]||o[3]);return i}function a(e,t,r,n){var o=this;if(\"object\"==typeof e&&!(e instanceof Array))return a.apply(null,Array.prototype.splice.call(arguments,1,arguments.length-1));if(!(e instanceof Array)){if(\"string\"==typeof e){var i=o.get(e);return i.__useDefault?i[\"default\"]:i}throw new TypeError(\"Invalid require\")}Promise.all(e.map(function(e){return o[\"import\"](e,n)})).then(function(e){t.apply(null,e)},r)}function r(e,t,r){return function(n,o,i){return\"string\"==typeof n?t(n):a.call(r,n,o,i,{name:e})}}function n(e){function a(a,n,i){\"string\"!=typeof a&&(i=n,n=a,a=null),n instanceof Array||(i=n,n=[\"require\",\"exports\",\"module\"]),\"function\"!=typeof i&&(i=function(e){return function(){return e}}(i)),void 0===n[n.length-1]&&n.pop();var s,l,u;if(-1!=(s=p.call(n,\"require\"))){n.splice(s,1);var d=i.toString();n=n.concat(t(d,s))}-1!=(l=p.call(n,\"exports\"))&&n.splice(l,1),-1!=(u=p.call(n,\"module\"))&&n.splice(u,1);var c={deps:n,execute:function(t,a,d){for(var c=[],f=0;f<n.length;f++)c.push(t(n[f]));d.uri=e.baseURL+d.id,d.config=function(){},-1!=u&&c.splice(u,0,d),-1!=l&&c.splice(l,0,a),-1!=s&&c.splice(s,0,r(d.id,t,e));var m=i.apply(o,c);return\"undefined\"==typeof m&&d&&(m=d.exports),\"undefined\"!=typeof m?m:void 0}};if(a)v=0!=n.length||v||b?null:c,b=!0,e.register(a,c.deps,!1,c.execute);else{if(v)throw new TypeError(\"Multiple defines for anonymous module\");v=c}}var n=e.onScriptLoad;e.onScriptLoad=function(e){n(e),(v||b)&&(e.metadata.format=\"defined\",e.metadata.registered=!0),v&&(e.metadata.deps=e.metadata.deps?e.metadata.deps.concat(v.deps):v.deps,e.metadata.execute=v.execute)},a.amd={},e.amdDefine=a}function i(e){e.amdDefine||n(e),v=null,b=null;var t=e.global;y=t.module,x=t.exports,_=t.define,t.module=void 0,t.exports=void 0,t.define&&t.define===e.amdDefine||(t.define=e.amdDefine)}function s(e){var t=e.global;t.define=_,t.module=y,t.exports=x}var l=\"undefined\"!=typeof module&&module.exports,u=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/,d=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm,c=\"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\",f=\"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\",m=/\\(([^\\)]*)\\)/,h=/^\\s+|\\s+$/g,g={};e.amdRequire=a;var v,b,y,x,_;if(n(e),e.scriptLoader){var w=e.fetch;e.fetch=function(e){return i(this),w.call(this,e)}}var S=e.instantiate;e.instantiate=function(e){var t=this;if(\"amd\"==e.metadata.format||!e.metadata.format&&e.source.match(u)){if(e.metadata.format=\"amd\",t.execute!==!1&&(i(t),t.__exec(e),s(t),!v&&!b&&!l))throw new TypeError(\"AMD module \"+e.name+\" did not define\");v&&(e.metadata.deps=e.metadata.deps?e.metadata.deps.concat(v.deps):v.deps,e.metadata.execute=v.execute)}return S.call(t,e)}}function l(e){function t(e,t){return e.length<t.length?!1:e.substr(0,t.length)!=t?!1:e[t.length]&&\"/\"!=e[t.length]?!1:!0}function a(e){for(var t=1,a=0,r=e.length;r>a;a++)\"/\"===e[a]&&t++;return t}function r(e,t,a){return a+e.substr(t)}function n(e,n,o){var i,s,l,u,d=0,c=0;if(n)for(var f in o.map){var m=o.map[f];if(\"object\"==typeof m&&t(n,f)&&(l=a(f),!(c>=l)))for(var p in m)t(e,p)&&(u=a(p),d>=u||(i=p,d=u,s=f,c=l))}if(i)return r(e,i.length,o.map[s][i]);for(var f in o.map){var m=o.map[f];if(\"string\"==typeof m&&t(e,f)){var u=a(f);d>=u||(i=f,d=u)}}return i?r(e,i.length,o.map[i]):e}e.map=e.map||{};var o=e.normalize;e.normalize=function(e,t,a){var r=this;r.map||(r.map={});var i=!1;return\"/\"==e.substr(e.length-1,1)&&(i=!0,e+=\"#\"),Promise.resolve(o.call(r,e,t,a)).then(function(e){if(e=n(e,t,r),i){var a=e.split(\"/\");a.pop();var o=a.pop();a.push(o),a.push(o),e=a.join(\"/\")}return e})}}function u(e){\"undefined\"==typeof p&&(p=Array.prototype.indexOf);var t=e.normalize;e.normalize=function(e,a,r){var n,o=this;return a&&-1!=(n=a.indexOf(\"!\"))&&(a=a.substr(0,n)),Promise.resolve(t.call(o,e,a,r)).then(function(e){var t=e.lastIndexOf(\"!\");if(-1!=t){var n=e.substr(0,t),i=e.substr(t+1)||n.substr(n.lastIndexOf(\".\")+1);return new Promise(function(e){e(o.normalize(i,a,r))}).then(function(e){return i=e,o.normalize(n,a,r)}).then(function(e){return e+\"!\"+i})}return e})};var a=e.locate;e.locate=function(e){var t=this,r=e.name;if(this.defined&&this.defined[r])return a.call(this,e);var n=r.lastIndexOf(\"!\");if(-1!=n){var o=r.substr(n+1);e.name=r.substr(0,n);var i=t.pluginLoader||t;return i[\"import\"](o).then(function(){var a=i.get(o);return a=a[\"default\"]||a,a.build===!1&&t.pluginLoader&&(e.metadata.build=!1),e.metadata.plugin=a,e.metadata.pluginName=o,e.metadata.pluginArgument=e.name,a.locate?a.locate.call(t,e):Promise.resolve(t.locate(e)).then(function(e){return e.substr(0,e.length-3)})})}return a.call(this,e)};var r=e.fetch;e.fetch=function(e){var t=this;return e.metadata.build===!1?\"\":e.metadata.plugin&&e.metadata.plugin.fetch&&!e.metadata.pluginFetchCalled?(e.metadata.pluginFetchCalled=!0,e.metadata.plugin.fetch.call(t,e,r)):r.call(t,e)};var n=e.translate;e.translate=function(e){var t=this;return e.metadata.plugin&&e.metadata.plugin.translate?Promise.resolve(e.metadata.plugin.translate.call(t,e)).then(function(a){return a&&(e.source=a),n.call(t,e)}):n.call(t,e)};var o=e.instantiate;e.instantiate=function(e){var t=this;return e.metadata.plugin&&e.metadata.plugin.instantiate?Promise.resolve(e.metadata.plugin.instantiate.call(t,e)).then(function(a){return e.metadata.format=\"defined\",e.metadata.execute=function(){return a},o.call(t,e)}):e.metadata.plugin&&e.metadata.plugin.build===!1?(e.metadata.format=\"defined\",e.metadata.deps.push(e.metadata.pluginName),e.metadata.execute=function(){return t.newModule({})},o.call(t,e)):o.call(t,e)}}function d(e){\"undefined\"==typeof p&&(p=Array.prototype.indexOf),e.bundles=e.bundles||{};var t=e.fetch;e.fetch=function(e){var a=this;if(a.trace)return t.call(this,e);a.bundles||(a.bundles={});for(var r in a.bundles)if(-1!=p.call(a.bundles[r],e.name))return Promise.resolve(a.normalize(r)).then(function(e){return a.bundles[e]=a.bundles[e]||a.bundles[r],a.meta=a.meta||{},a.meta[e]=a.meta[e]||{},a.meta[e].bundle=!0,a.load(e)}).then(function(){return\"\"});return t.call(this,e)}}function c(e){function t(e){return parseInt(e,10)}function a(e){var a=e.match(s);return a?{major:t(a[1]),minor:t(a[2]),patch:t(a[3]),pre:a[4]&&a[4].split(\".\")}:{tag:e}}function r(e,a){if(e.tag&&a.tag)return 0;if(e.tag)return-1;if(a.tag)return 1;for(var r=0;r<u.length;r++){var n=u[r],o=e[n],i=a[n];if(o!=i)return isNaN(o)?-1:isNaN(i)?1:o>i?1:-1}if(!e.pre&&!a.pre)return 0;if(!e.pre)return 1;if(!a.pre)return-1;for(var r=0,s=Math.min(e.pre.length,a.pre.length);s>r;r++)if(e.pre[r]!=a.pre[r]){var d=e.pre[r].match(l),c=a.pre[r].match(l);return d&&!c?-1:c&&!d?1:d&&c?t(e.pre[r])>t(a.pre[r])?1:-1:e.pre[r]>a.pre[r]?1:-1}return e.pre.length==a.pre.length?0:e.pre.length>a.pre.length?1:-1}function n(e,t){var a=e.version;return a.tag?a.tag==t.tag:1==r(a,t)?!1:isNaN(t.minor)||isNaN(t.patch)?!1:t.pre?a.major!=t.major||a.minor!=t.minor||a.patch!=t.patch?!1:e.semver||e.fuzzy||a.pre.join(\".\")==t.pre.join(\".\"):e.semver?0==a.major&&isNaN(a.minor)?t.major<1:a.major>=1?a.major==t.major:a.minor>=1?a.minor==t.minor:(a.patch||0)==t.patch:e.fuzzy?t.major==a.major&&t.minor<(a.minor||0)+1:!a.pre&&a.major==t.major&&a.minor==t.minor&&a.patch==t.patch}function o(e){var t={};((t.semver=\"^\"==e.substr(0,1))||(t.fuzzy=\"~\"==e.substr(0,1)))&&(e=e.substr(1));var r=t.version=a(e);return r.tag?t:(t.fuzzy||t.semver||!isNaN(r.minor)&&!isNaN(r.patch)||(t.fuzzy=!0),t.fuzzy&&isNaN(r.minor)&&(t.semver=!0,t.fuzzy=!1),t.semver&&!isNaN(r.minor)&&isNaN(r.patch)&&(t.semver=!1,t.fuzzy=!0),t)}function i(e,t){return r(a(e),a(t))}\"undefined\"==typeof p&&(p=Array.prototype.indexOf);var s=/^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:-([\\da-z-]+(?:\\.[\\da-z-]+)*)(?:\\+([\\da-z-]+(?:\\.[\\da-z-]+)*))?)?)?)?$/i,l=/^\\d+$/,u=[\"major\",\"minor\",\"patch\"];e.versions=e.versions||{};var d=e.normalize;e.normalize=function(t,r,s){e.versions||(e.versions={});var l,u,c=this.versions;if(t.indexOf(\"@\")>0){var f=t.lastIndexOf(\"@\"),m=t.substr(f+1,t.length-f-1).split(\"/\");l=m[0],u=m.length,t=t.substr(0,f)+t.substr(f+l.length+1,t.length-f-l.length-1)}return Promise.resolve(d.call(this,t,r,s)).then(function(e){var t=e.indexOf(\"@\");if(l&&(-1==t||0==t)){var r=e.split(\"/\");r[r.length-u]+=\"@\"+l,e=r.join(\"/\"),t=e.indexOf(\"@\")}var s,d;if(-1==t||0==t){for(var f in c)if(d=c[f],e.substr(0,f.length)==f&&(s=e.substr(f.length,1),!s||\"/\"==s))return f+\"@\"+(\"string\"==typeof d?d:d[d.length-1])+e.substr(f.length);return e}var m=e.substr(0,t),p=e.substr(t+1).split(\"/\")[0],h=p.length,g=o(e.substr(t+1).split(\"/\")[0]);d=c[e.substr(0,t)]||[],\"string\"==typeof d&&(d=[d]);for(var v=d.length-1;v>=0;v--)if(n(g,a(d[v])))return m+\"@\"+d[v]+e.substr(t+h+1);var b;return g.semver?b=0!=g.version.major||isNaN(g.version.minor)?g.version.major:\"0.\"+g.version.minor:g.fuzzy?b=g.version.major+\".\"+g.version.minor:(b=p,d.push(p),d.sort(i),c[m]=1==d.length?d[0]:d),m+\"@\"+b+e.substr(t+h+1)})}}function f(e){e.depCache=e.depCache||{},loaderLocate=e.locate,e.locate=function(e){var t=this;t.depCache||(t.depCache={});var a=t.depCache[e.name];if(a)for(var r=0;r<a.length;r++)t.load(a[r]);return loaderLocate.call(t,e)}}$__global.upgradeSystemLoader=void 0;var m,p=Array.prototype.indexOf||function(e){for(var t=0,a=this.length;a>t;t++)if(this[t]===e)return t;return-1};!function(){var e=$__global.System;m=$__global.System=new LoaderPolyfill(e),m.baseURL=e.baseURL,m.paths={\"*\":\"*.js\"},m.originalSystem=e}(),m.noConflict=function(){$__global.SystemJS=m,$__global.System=m.originalSystem},a(m),r(m),n(m),o(m),i(m),s(m),l(m),u(m),d(m),c(m),f(m),m.paths[\"@traceur\"]||(m.paths[\"@traceur\"]=$__curScript&&$__curScript.getAttribute(\"data-traceur-src\")||($__curScript&&$__curScript.src?$__curScript.src.substr(0,$__curScript.src.lastIndexOf(\"/\")+1):m.baseURL+(m.baseURL.lastIndexOf(\"/\")==m.baseURL.length-1?\"\":\"/\"))+\"traceur.js\")};var $__curScript,__eval;!function(){var doEval;__eval=function(e,t,a){e+=\"\\n//# sourceURL=\"+t+(a?\"\\n//# sourceMappingURL=\"+a:\"\");try{doEval(e)}catch(r){var n=\"Error evaluating \"+t+\"\\n\";throw r instanceof Error?r.message=n+r.message:r=n+r,r}};var isWorker=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,isBrowser=\"undefined\"!=typeof window;if(isBrowser){var head,scripts=document.getElementsByTagName(\"script\");if($__curScript=scripts[scripts.length-1],doEval=function(e){head||(head=document.head||document.body||document.documentElement);var t=document.createElement(\"script\");t.text=e;var a,r=window.onerror;if(window.onerror=function(e){a=e},head.appendChild(t),head.removeChild(t),window.onerror=r,a)throw a},$__global.System&&$__global.LoaderPolyfill)$__global.upgradeSystemLoader();else{var curPath=$__curScript.src,basePath=curPath.substr(0,curPath.lastIndexOf(\"/\")+1);document.write('<script type=\"text/javascript\" src=\"'+basePath+'es6-module-loader.js\" data-init=\"upgradeSystemLoader\">'+\"<\"+\"/script>\")}}else if(isWorker)if(doEval=function(source){try{eval(source)}catch(e){throw e}},$__global.System&&$__global.LoaderPolyfill)$__global.upgradeSystemLoader();else{var basePath=\"\";try{throw new TypeError(\"Unable to get Worker base path.\")}catch(err){var idx=err.stack.indexOf(\"at \")+3,withSystem=err.stack.substr(idx,err.stack.substr(idx).indexOf(\"\\n\"));basePath=withSystem.substr(0,withSystem.lastIndexOf(\"/\")+1)}importScripts(basePath+\"es6-module-loader.js\")}else{var es6ModuleLoader=require(\"es6-module-loader\");$__global.System=es6ModuleLoader.System,$__global.Loader=es6ModuleLoader.Loader,$__global.upgradeSystemLoader(),module.exports=$__global.System;var vm=require(\"vm\");doEval=function(e){vm.runInThisContext(e)}}}()}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope?self:global);\n//# sourceMappingURL=system.js.map"
  },
  {
    "path": "client/components/system.js/dist/system.src.js",
    "content": "/*\n * SystemJS v0.10.0\n */\n\n(function($__global) {\n\n$__global.upgradeSystemLoader = function() {\n  $__global.upgradeSystemLoader = undefined;\n\n  // indexOf polyfill for IE\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, l = this.length; i < l; i++)\n      if (this[i] === item)\n        return i;\n    return -1;\n  }\n\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n  function toAbsoluteURL(base, href) {\n    function removeDotSegments(input) {\n      var output = [];\n      input.replace(/^(\\.\\.?(\\/|$))+/, '')\n        .replace(/\\/(\\.(\\/|$))+/g, '/')\n        .replace(/\\/\\.\\.$/, '/../')\n        .replace(/\\/?[^\\/]*/g, function (p) {\n          if (p === '/..')\n            output.pop();\n          else\n            output.push(p);\n      });\n      return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n    }\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  // clone the original System loader\n  var System;\n  (function() {\n    var originalSystem = $__global.System;\n    System = $__global.System = new LoaderPolyfill(originalSystem);\n    System.baseURL = originalSystem.baseURL;\n    System.paths = { '*': '*.js' };\n    System.originalSystem = originalSystem;\n  })();\n\n  System.noConflict = function() {\n    $__global.SystemJS = System;\n    $__global.System = System.originalSystem;\n  }\n\n  \n/*\n * Meta Extension\n *\n * Sets default metadata on a load record (load.metadata) from\n * loader.meta[moduleName].\n * Also provides an inline meta syntax for module meta in source.\n *\n * Eg:\n *\n * loader.meta['my/module'] = { some: 'meta' };\n *\n * load.metadata.some = 'meta' will now be set on the load record.\n *\n * The same meta could be set with a my/module.js file containing:\n * \n * my/module.js\n *   \"some meta\"; \n *   \"another meta\";\n *   console.log('this is my/module');\n *\n * The benefit of inline meta is that coniguration doesn't need\n * to be known in advance, which is useful for modularising\n * configuration and avoiding the need for configuration injection.\n *\n *\n * Example\n * -------\n *\n * The simplest meta example is setting the module format:\n *\n * System.meta['my/module'] = { format: 'amd' };\n *\n * or inside 'my/module.js':\n *\n * \"format amd\";\n * define(...);\n * \n */\n\nfunction meta(loader) {\n  var metaRegEx = /^(\\s*\\/\\*.*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/;\n  var metaPartRegEx = /\\/\\*.*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;\n\n  loader.meta = {};\n\n  function setConfigMeta(loader, load) {\n    var meta = loader.meta && loader.meta[load.name];\n    if (meta) {\n      for (var p in meta)\n        load.metadata[p] = load.metadata[p] || meta[p];\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    setConfigMeta(this, load);\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    // detect any meta header syntax\n    var meta = load.source.match(metaRegEx);\n    if (meta) {\n      var metaParts = meta[0].match(metaPartRegEx);\n      for (var i = 0; i < metaParts.length; i++) {\n        var len = metaParts[i].length;\n\n        var firstChar = metaParts[i].substr(0, 1);\n        if (metaParts[i].substr(len - 1, 1) == ';')\n          len--;\n      \n        if (firstChar != '\"' && firstChar != \"'\")\n          continue;\n\n        var metaString = metaParts[i].substr(1, metaParts[i].length - 3);\n\n        var metaName = metaString.substr(0, metaString.indexOf(' '));\n        if (metaName) {\n          var metaValue = metaString.substr(metaName.length + 1, metaString.length - metaName.length - 1);\n\n          if (load.metadata[metaName] instanceof Array)\n            load.metadata[metaName].push(metaValue);\n          else if (!load.metadata[metaName])\n            load.metadata[metaName] = metaValue;\n        }\n      }\n    }\n    // config meta overrides\n    setConfigMeta(this, load);\n    \n    return loaderTranslate.call(this, load);\n  }\n}\n/*\n * Instantiate registry extension\n *\n * Supports Traceur System.register 'instantiate' output for loading ES6 as ES5.\n *\n * - Creates the loader.register function\n * - Also supports metadata.format = 'register' in instantiate for anonymous register modules\n * - Also supports metadata.deps, metadata.execute and metadata.executingRequire\n *     for handling dynamic modules alongside register-transformed ES6 modules\n *\n * Works as a standalone extension, but benefits from having a more \n * advanced __eval defined like in SystemJS polyfill-wrapper-end.js\n *\n * The code here replicates the ES6 linking groups algorithm to ensure that\n * circular ES6 compiled into System.register can work alongside circular AMD \n * and CommonJS, identically to the actual ES6 loader.\n *\n */\nfunction register(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n  if (typeof __eval == 'undefined')\n    __eval = 0 || eval; // uglify breaks without the 0 ||\n\n  // define exec for easy evaluation of a load record (load.name, load.source, load.address)\n  // main feature is source maps support handling\n  var curSystem;\n  function exec(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      curSystem = System;\n    }\n    // support sourceMappingURL (efficiently)\n    var sourceMappingURL;\n    var lastLineIndex = load.source.lastIndexOf('\\n');\n    if (lastLineIndex != -1) {\n      if (load.source.substr(lastLineIndex + 1, 21) == '//# sourceMappingURL=') {\n        sourceMappingURL = load.source.substr(lastLineIndex + 22, load.source.length - lastLineIndex - 22);\n        if (typeof toAbsoluteURL != 'undefined')\n          sourceMappingURL = toAbsoluteURL(load.address, sourceMappingURL);\n      }\n    }\n\n    __eval(load.source, load.address, sourceMappingURL);\n\n    // traceur overwrites System and Module - write them back\n    if (load.name == '@traceur') {\n      loader.global.traceurSystem = loader.global.System;\n      loader.global.System = curSystem;\n    }\n  }\n  loader.__exec = exec;\n\n  function dedupe(deps) {\n    var newDeps = [];\n    for (var i = 0, l = deps.length; i < l; i++)\n      if (indexOf.call(newDeps, deps[i]) == -1)\n        newDeps.push(deps[i])\n    return newDeps;\n  }\n\n  /*\n   * There are two variations of System.register:\n   * 1. System.register for ES6 conversion (2-3 params) - System.register([name, ]deps, declare)\n   *    see https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained\n   *\n   * 2. System.register for dynamic modules (3-4 params) - System.register([name, ]deps, executingRequire, execute)\n   * the true or false statement \n   *\n   * this extension implements the linking algorithm for the two variations identical to the spec\n   * allowing compiled ES6 circular references to work alongside AMD and CJS circular references.\n   *\n   */\n  // loader.register sets loader.defined for declarative modules\n  var anonRegister;\n  var calledRegister;\n  function register(name, deps, declare, execute) {\n    if (typeof name != 'string') {\n      execute = declare;\n      declare = deps;\n      deps = name;\n      name = null;\n    }\n\n    calledRegister = true;\n    \n    var register;\n\n    // dynamic\n    if (typeof declare == 'boolean') {\n      register = {\n        declarative: false,\n        deps: deps,\n        execute: execute,\n        executingRequire: declare\n      };\n    }\n    else {\n      // ES6 declarative\n      register = {\n        declarative: true,\n        deps: deps,\n        declare: declare\n      };\n    }\n    \n    // named register\n    if (name) {\n      register.name = name;\n      // we never overwrite an existing define\n      if (!loader.defined[name])\n        loader.defined[name] = register; \n    }\n    // anonymous register\n    else if (register.declarative) {\n      if (anonRegister)\n        throw new TypeError('Multiple anonymous System.register calls in the same module file.');\n      anonRegister = register;\n    }\n  }\n  /*\n   * Registry side table - loader.defined\n   * Registry Entry Contains:\n   *    - name\n   *    - deps \n   *    - declare for declarative modules\n   *    - execute for dynamic modules, different to declarative execute on module\n   *    - executingRequire indicates require drives execution for circularity of dynamic modules\n   *    - declarative optional boolean indicating which of the above\n   *\n   * Can preload modules directly on System.defined['my/module'] = { deps, execute, executingRequire }\n   *\n   * Then the entry gets populated with derived information during processing:\n   *    - normalizedDeps derived from deps, created in instantiate\n   *    - groupIndex used by group linking algorithm\n   *    - evaluated indicating whether evaluation has happend\n   *    - module the module record object, containing:\n   *      - exports actual module exports\n   *      \n   *    Then for declarative only we track dynamic bindings with the records:\n   *      - name\n   *      - setters declarative setter functions\n   *      - exports actual module values\n   *      - dependencies, module records of dependencies\n   *      - importers, module records of dependents\n   *\n   * After linked and evaluated, entries are removed, declarative module records remain in separate\n   * module binding table\n   *\n   */\n\n  function defineRegister(loader) {\n    if (loader.register)\n      return;\n\n    loader.register = register;\n\n    if (!loader.defined)\n      loader.defined = {};\n    \n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      // anonymous define\n      if (anonRegister)\n        load.metadata.entry = anonRegister;\n      \n      if (calledRegister) {\n        load.metadata.format = load.metadata.format || 'register';\n        load.metadata.registered = true;\n      }\n    }\n  }\n\n  defineRegister(loader);\n\n  function buildGroups(entry, loader, groups) {\n    groups[entry.groupIndex] = groups[entry.groupIndex] || [];\n\n    if (indexOf.call(groups[entry.groupIndex], entry) != -1)\n      return;\n\n    groups[entry.groupIndex].push(entry);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      \n      // not in the registry means already linked / ES6\n      if (!depEntry || depEntry.evaluated)\n        continue;\n      \n      // now we know the entry is in our unlinked linkage group\n      var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);\n\n      // the group index of an entry is always the maximum\n      if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {\n        \n        // if already in a group, remove from the old group\n        if (depEntry.groupIndex) {\n          groups[depEntry.groupIndex].splice(indexOf.call(groups[depEntry.groupIndex], depEntry), 1);\n\n          // if the old group is empty, then we have a mixed depndency cycle\n          if (groups[depEntry.groupIndex].length == 0)\n            throw new TypeError(\"Mixed dependency cycle detected\");\n        }\n\n        depEntry.groupIndex = depGroupIndex;\n      }\n\n      buildGroups(depEntry, loader, groups);\n    }\n  }\n\n  function link(name, loader) {\n    var startEntry = loader.defined[name];\n\n    startEntry.groupIndex = 0;\n\n    var groups = [];\n\n    buildGroups(startEntry, loader, groups);\n\n    var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var entry = group[j];\n\n        // link each group\n        if (curGroupDeclarative)\n          linkDeclarativeModule(entry, loader);\n        else\n          linkDynamicModule(entry, loader);\n      }\n      curGroupDeclarative = !curGroupDeclarative; \n    }\n  }\n\n  // module binding records\n  var moduleRecords = {};\n  function getOrCreateModuleRecord(name) {\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      exports: {}, // start from an empty module and extend\n      importers: []\n    })\n  }\n\n  function linkDeclarativeModule(entry, loader) {\n    // only link if already not already started linking (stops at circular)\n    if (entry.module)\n      return;\n\n    var module = entry.module = getOrCreateModuleRecord(entry.name);\n    var exports = entry.module.exports;\n\n    var declaration = entry.declare.call(loader.global, function(name, value) {\n      module.locked = true;\n      exports[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](exports);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n    \n    module.setters = declaration.setters;\n    module.execute = declaration.execute;\n\n    if (!module.setters || !module.execute) {\n      throw new TypeError('Invalid System.register form for ' + entry.name);\n    }\n\n    // now link all the module dependencies\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      var depModule = moduleRecords[depName];\n\n      // work out how to set depExports based on scenarios...\n      var depExports;\n\n      if (depModule) {\n        depExports = depModule.exports;\n      }\n      // dynamic, already linked in our registry\n      else if (depEntry && !depEntry.declarative) {\n        depExports = { 'default': depEntry.module.exports, '__useDefault': true };\n      }\n      // in the loader registry\n      else if (!depEntry) {\n        depExports = loader.get(depName);\n      }\n      // we have an entry -> link\n      else {\n        linkDeclarativeModule(depEntry, loader);\n        depModule = depEntry.module;\n        depExports = depModule.exports;\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule && depModule.importers) {\n        depModule.importers.push(module);\n        module.dependencies.push(depModule);\n      }\n      else {\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depExports);\n    }\n  }\n\n  // An analog to loader.get covering execution of all three layers (real declarative, simulated declarative, simulated dynamic)\n  function getModule(name, loader) {\n    var exports;\n    var entry = loader.defined[name];\n\n    if (!entry) {\n      exports = loader.get(name);\n      if (!exports)\n        throw new Error('Unable to load dependency ' + name + '.');\n    }\n\n    else {\n      if (entry.declarative)\n        ensureEvaluated(name, [], loader);\n    \n      else if (!entry.evaluated)\n        linkDynamicModule(entry, loader);\n\n      exports = entry.module.exports;\n    }\n\n    if ((!entry || entry.declarative) && exports && exports.__useDefault)\n      return exports['default'];\n    \n    return exports;\n  }\n\n  function linkDynamicModule(entry, loader) {\n    if (entry.module)\n      return;\n\n    var exports = {};\n\n    var module = entry.module = { exports: exports, id: entry.name };\n\n    // AMD requires execute the tree first\n    if (!entry.executingRequire) {\n      for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n        var depName = entry.normalizedDeps[i];\n        var depEntry = loader.defined[depName];\n        if (depEntry)\n          linkDynamicModule(depEntry, loader);\n      }\n    }\n\n    // now execute\n    entry.evaluated = true;\n    var output = entry.execute.call(loader.global, function(name) {\n      for (var i = 0, l = entry.deps.length; i < l; i++) {\n        if (entry.deps[i] != name)\n          continue;\n        return getModule(entry.normalizedDeps[i], loader);\n      }\n      throw new TypeError('Module ' + name + ' not declared as a dependency.');\n    }, exports, module);\n    \n    if (output)\n      module.exports = output;\n  }\n\n  /*\n   * Given a module, and the list of modules for this current branch,\n   *  ensure that each of the dependencies of this module is evaluated\n   *  (unless one is a circular dependency already in the list of seen\n   *  modules, in which case we execute it)\n   *\n   * Then we evaluate the module itself depth-first left to right \n   * execution to match ES6 modules\n   */\n  function ensureEvaluated(moduleName, seen, loader) {\n    var entry = loader.defined[moduleName];\n\n    // if already seen, that means it's an already-evaluated non circular dependency\n    if (entry.evaluated || !entry.declarative)\n      return;\n\n    // this only applies to declarative modules which late-execute\n\n    seen.push(moduleName);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      if (indexOf.call(seen, depName) == -1) {\n        if (!loader.defined[depName])\n          loader.get(depName);\n        else\n          ensureEvaluated(depName, seen, loader);\n      }\n    }\n\n    if (entry.evaluated)\n      return;\n\n    entry.evaluated = true;\n    entry.module.execute.call(loader.global);\n  }\n\n  var registerRegEx = /System\\.register/;\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    defineRegister(loader);\n    if (loader.defined[load.name]) {\n      load.metadata.format = 'defined';\n      return '';\n    }\n    anonRegister = null;\n    calledRegister = false;\n    // the above get picked up by onScriptLoad\n    return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    this.register = register;\n\n    this.__exec = exec;\n\n    load.metadata.deps = load.metadata.deps || [];\n\n    // we run the meta detection here (register is after meta)\n    return Promise.resolve(loaderTranslate.call(this, load)).then(function(source) {\n      \n      // dont run format detection for globals shimmed\n      // ideally this should be in the global extension, but there is\n      // currently no neat way to separate it\n      if (load.metadata.init || load.metadata.exports)\n        load.metadata.format = load.metadata.format || 'global';\n\n      // run detection for register format\n      if (load.metadata.format == 'register' || !load.metadata.format && load.source.match(registerRegEx))\n        load.metadata.format = 'register';\n      return source;\n    });\n  }\n\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    var entry;\n\n    // first we check if this module has already been defined in the registry\n    if (loader.defined[load.name]) {\n      entry = loader.defined[load.name];\n      entry.deps = entry.deps.concat(load.metadata.deps);\n    }\n\n    // picked up already by a script injection\n    else if (load.metadata.entry)\n      entry = load.metadata.entry;\n\n    // otherwise check if it is dynamic\n    else if (load.metadata.execute) {\n      entry = {\n        declarative: false,\n        deps: load.metadata.deps || [],\n        execute: load.metadata.execute,\n        executingRequire: load.metadata.executingRequire // NodeJS-style requires or not\n      };\n    }\n\n    // Contains System.register calls\n    else if (load.metadata.format == 'register') {\n      anonRegister = null;\n      calledRegister = false;\n\n      var System = loader.global.System = loader.global.System || loader;\n\n      var curRegister = System.register;\n      System.register = register;\n\n      loader.__exec(load);\n\n      System.register = curRegister;\n\n      if (anonRegister)\n        entry = anonRegister;\n\n      if (!entry && System.defined[load.name])\n        entry = System.defined[load.name];\n\n      if (!calledRegister && !load.metadata.registered)\n        throw new TypeError(load.name + ' detected as System.register but didn\\'t execute.');\n    }\n\n    // named bundles are just an empty module\n    if (!entry && load.metadata.format != 'es6')\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n\n    // place this module onto defined for circular references\n    if (entry)\n      loader.defined[load.name] = entry;\n\n    // no entry -> treat as ES6\n    else\n      return loaderInstantiate.call(this, load);\n\n    entry.deps = dedupe(entry.deps);\n    entry.name = load.name;\n\n    // first, normalize all dependencies\n    var normalizePromises = [];\n    for (var i = 0, l = entry.deps.length; i < l; i++)\n      normalizePromises.push(Promise.resolve(loader.normalize(entry.deps[i], load.name)));\n\n    return Promise.all(normalizePromises).then(function(normalizedDeps) {\n\n      entry.normalizedDeps = normalizedDeps;\n\n      return {\n        deps: entry.deps,\n        execute: function() {\n          // recursively ensure that the module and all its \n          // dependencies are linked (with dependency group handling)\n          link(load.name, loader);\n\n          // now handle dependency execution in correct order\n          ensureEvaluated(load.name, [], loader);\n\n          // remove from the registry\n          loader.defined[load.name] = undefined;\n\n          var module = loader.newModule(entry.declarative ? entry.module.exports : { 'default': entry.module.exports, '__useDefault': true });\n\n          // return the defined module object\n          return module;\n        }\n      };\n    });\n  }\n}\n/*\n * SystemJS Core\n * Code should be vaguely readable\n * \n */\nfunction core(loader) {\n\n  /*\n    __useDefault\n    \n    When a module object looks like:\n    newModule({\n      __useDefault: true,\n      default: 'some-module'\n    })\n\n    Then importing that module provides the 'some-module'\n    result directly instead of the full module.\n\n    Useful for eg module.exports = function() {}\n  */\n  var loaderImport = loader['import'];\n  loader['import'] = function(name, options) {\n    return loaderImport.call(this, name, options).then(function(module) {\n      return module.__useDefault ? module['default'] : module;\n    });\n  }\n\n  // support the empty module, as a concept\n  loader.set('@empty', loader.newModule({}));\n\n  // include the node require since we're overriding it\n  if (typeof require != 'undefined')\n    loader._nodeRequire = require;\n\n  /*\n    Config\n    Extends config merging one deep only\n\n    loader.config({\n      some: 'random',\n      config: 'here',\n      deep: {\n        config: { too: 'too' }\n      }\n    });\n\n    <=>\n\n    loader.some = 'random';\n    loader.config = 'here'\n    loader.deep = loader.deep || {};\n    loader.deep.config = { too: 'too' };\n  */\n  loader.config = function(cfg) {\n    for (var c in cfg) {\n      var v = cfg[c];\n      if (typeof v == 'object' && !(v instanceof Array)) {\n        this[c] = this[c] || {};\n        for (var p in v)\n          this[c][p] = v[p];\n      }\n      else\n        this[c] = v;\n    }\n  }\n\n  // override locate to allow baseURL to be document-relative\n  var baseURI;\n  if (typeof window == 'undefined' &&\n      typeof WorkerGlobalScope == 'undefined') {\n    baseURI = 'file:' + process.cwd() + '/';\n  }\n  // Inside of a Web Worker\n  else if(typeof window == 'undefined') {\n    baseURI = loader.global.location.href;\n  }\n  else {\n    baseURI = document.baseURI;\n    if (!baseURI) {\n      var bases = document.getElementsByTagName('base');\n      baseURI = bases[0] && bases[0].href || window.location.href;\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  var normalizedBaseURL;\n  loader.locate = function(load) {\n    if (this.baseURL != normalizedBaseURL) {\n      normalizedBaseURL = toAbsoluteURL(baseURI, this.baseURL);\n\n      if (normalizedBaseURL.substr(normalizedBaseURL.length - 1, 1) != '/')\n        normalizedBaseURL += '/';\n      this.baseURL = normalizedBaseURL;\n    }\n\n    return Promise.resolve(loaderLocate.call(this, load));\n  }\n\n  // Traceur conveniences\n  // good enough ES6 detection regex - format detections not designed to be accurate, but to handle the 99% use case\n  var es6RegEx = /(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let))/;\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n\n    if (load.name == '@traceur')\n      return loaderTranslate.call(loader, load);\n\n    // detect ES6\n    else if (load.metadata.format == 'es6' || !load.metadata.format && load.source.match(es6RegEx)) {\n      load.metadata.format = 'es6';\n\n      // dynamically load Traceur for ES6 if necessary\n      if (!loader.global.traceur) {\n        return loader['import']('@traceur').then(function() {\n          return loaderTranslate.call(loader, load);\n        });\n      }\n    }\n\n    return loaderTranslate.call(loader, load);\n  }\n\n  // always load Traceur as a global\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      loader.__exec(load);\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS Global Format\n\n  Supports\n    metadata.deps\n    metadata.init\n    metadata.exports\n\n  Also detects writes to the global object avoiding global collisions.\n  See the SystemJS readme global support section for further information.\n*/\nfunction global(loader) {\n\n  function readGlobalProperty(p, value) {\n    var pParts = p.split('.');\n    while (pParts.length)\n      value = value[pParts.shift()];\n    return value;\n  }\n\n  function createHelpers(loader) {\n    if (loader.has('@@global-helpers'))\n      return;\n\n    var hasOwnProperty = loader.global.hasOwnProperty;\n    var moduleGlobals = {};\n\n    var curGlobalObj;\n    var ignoredGlobalProps;\n\n    loader.set('@@global-helpers', loader.newModule({\n      prepareGlobal: function(moduleName, deps) {\n        // first, we add all the dependency modules to the global\n        for (var i = 0; i < deps.length; i++) {\n          var moduleGlobal = moduleGlobals[deps[i]];\n          if (moduleGlobal)\n            for (var m in moduleGlobal)\n              loader.global[m] = moduleGlobal[m];\n        }\n\n        // now store a complete copy of the global object\n        // in order to detect changes\n        curGlobalObj = {};\n        ignoredGlobalProps = ['indexedDB', 'sessionStorage', 'localStorage',\n          'clipboardData', 'frames', 'webkitStorageInfo', 'toolbar', 'statusbar',\n          'scrollbars', 'personalbar', 'menubar', 'locationbar', 'webkitIndexedDB'\n        ];\n        for (var g in loader.global) {\n          if (indexOf.call(ignoredGlobalProps, g) != -1) { continue; }\n          if (!hasOwnProperty || loader.global.hasOwnProperty(g)) {\n            try {\n              curGlobalObj[g] = loader.global[g];\n            } catch (e) {\n              ignoredGlobalProps.push(g);\n            }\n          }\n        }\n      },\n      retrieveGlobal: function(moduleName, exportName, init) {\n        var singleGlobal;\n        var multipleExports;\n        var exports = {};\n\n        // run init\n        if (init) {\n          var depModules = [];\n          for (var i = 0; i < deps.length; i++)\n            depModules.push(require(deps[i]));\n          singleGlobal = init.apply(loader.global, depModules);\n        }\n\n        // check for global changes, creating the globalObject for the module\n        // if many globals, then a module object for those is created\n        // if one global, then that is the module directly\n        else if (exportName) {\n          var firstPart = exportName.split('.')[0];\n          singleGlobal = readGlobalProperty(exportName, loader.global);\n          exports[firstPart] = loader.global[firstPart];\n        }\n\n        else {\n          for (var g in loader.global) {\n            if (indexOf.call(ignoredGlobalProps, g) != -1)\n              continue;\n            if ((!hasOwnProperty || loader.global.hasOwnProperty(g)) && g != loader.global && curGlobalObj[g] != loader.global[g]) {\n              exports[g] = loader.global[g];\n              if (singleGlobal) {\n                if (singleGlobal !== loader.global[g])\n                  multipleExports = true;\n              }\n              else if (singleGlobal !== false) {\n                singleGlobal = loader.global[g];\n              }\n            }\n          }\n        }\n\n        moduleGlobals[moduleName] = exports;\n\n        return multipleExports ? exports : singleGlobal;\n      }\n    }));\n  }\n\n  createHelpers(loader);\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    createHelpers(loader);\n\n    var exportName = load.metadata.exports;\n\n    if (!load.metadata.format)\n      load.metadata.format = 'global';\n\n    // global is a fallback module format\n    if (load.metadata.format == 'global') {\n      load.metadata.execute = function(require, exports, module) {\n\n        loader.get('@@global-helpers').prepareGlobal(module.id, load.metadata.deps);\n\n        if (exportName)\n          load.source += '\\nthis[\"' + exportName + '\"] = ' + exportName + ';';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        // ensure no NodeJS environment detection\n        loader.global.module = undefined;\n        loader.global.exports = undefined;\n\n        loader.__exec(load);\n\n        loader.global.define = define;\n\n        return loader.get('@@global-helpers').retrieveGlobal(module.id, exportName, load.metadata.init);\n      }\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS CommonJS Format\n*/\nfunction cjs(loader) {\n\n  // CJS Module Format\n  // require('...') || exports[''] = ... || exports.asd = ... || module.exports = ...\n  var cjsExportsRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)(exports\\s*\\[['\"]|\\exports\\s*\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*\\=/;\n  // RegEx adjusted from https://github.com/jbrantly/yabble/blob/master/lib/yabble.js#L339\n  var cjsRequireRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  function getCJSDeps(source) {\n    cjsRequireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    // remove comments from the source first, if not minified\n    if (source.length / source.split('\\n').length < 200)\n      source = source.replace(commentRegEx, '');\n\n    var match;\n\n    while (match = cjsRequireRegEx.exec(source))\n      deps.push(match[1].substr(1, match[1].length - 2));\n\n    return deps;\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n\n    if (!load.metadata.format) {\n      cjsExportsRegEx.lastIndex = 0;\n      cjsRequireRegEx.lastIndex = 0;\n      if (cjsRequireRegEx.exec(load.source) || cjsExportsRegEx.exec(load.source))\n        load.metadata.format = 'cjs';\n    }\n\n    if (load.metadata.format == 'cjs') {\n      load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(getCJSDeps(load.source)) : load.metadata.deps;\n\n      load.metadata.executingRequire = true;\n\n      load.metadata.execute = function(require, exports, module) {\n        var dirname = (load.address || '').split('/');\n        dirname.pop();\n        dirname = dirname.join('/');\n\n        var globals = loader.global._g = {\n          global: loader.global,\n          exports: exports,\n          module: module,\n          require: require,\n          __filename: load.address,\n          __dirname: dirname\n        };\n\n        var source = '(function(global, exports, module, require, __filename, __dirname) { ' + load.source \n          + '\\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        loader.__exec({\n          name: load.name,\n          address: load.address,\n          source: source\n        });\n\n        loader.global.define = define;\n\n        loader.global._g = undefined;\n      }\n    }\n\n    return loaderInstantiate.call(this, load);\n  };\n}\n/*\n  SystemJS AMD Format\n  Provides the AMD module format definition at System.format.amd\n  as well as a RequireJS-style require on System.require\n*/\nfunction amd(loader) {\n  // by default we only enforce AMD noConflict mode in Node\n  var isNode = typeof module != 'undefined' && module.exports;\n\n  // AMD Module Format Detection RegEx\n  // define([.., .., ..], ...)\n  // define(varName); || define(function(require, exports) {}); || define({})\n  var amdRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  var cjsRequirePre = \"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\";\n  var cjsRequirePost = \"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\";\n\n  var fnBracketRegEx = /\\(([^\\)]*)\\)/;\n\n  var wsRegEx = /^\\s+|\\s+$/g;\n\n  var requireRegExs = {};\n\n  function getCJSDeps(source, requireIndex) {\n\n    // remove comments\n    source = source.replace(commentRegEx, '');\n\n    // determine the require alias\n    var params = source.match(fnBracketRegEx);\n    var requireAlias = (params[1].split(',')[requireIndex] || 'require').replace(wsRegEx, '');\n\n    // find or generate the regex for this requireAlias\n    var requireRegEx = requireRegExs[requireAlias] || (requireRegExs[requireAlias] = new RegExp(cjsRequirePre + requireAlias + cjsRequirePost, 'g'));\n\n    requireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    var match;\n    while (match = requireRegEx.exec(source))\n      deps.push(match[2] || match[3]);\n\n    return deps;\n  }\n\n  /*\n    AMD-compatible require\n    To copy RequireJS, set window.require = window.requirejs = loader.amdRequire\n  */\n  function require(names, callback, errback, referer) {\n    // 'this' is bound to the loader\n    var loader = this;\n\n    // in amd, first arg can be a config object... we just ignore\n    if (typeof names == 'object' && !(names instanceof Array))\n      return require.apply(null, Array.prototype.splice.call(arguments, 1, arguments.length - 1));\n\n    // amd require\n    if (names instanceof Array)\n      Promise.all(names.map(function(name) {\n        return loader['import'](name, referer);\n      })).then(function(modules) {\n        callback.apply(null, modules);\n      }, errback);\n\n    // commonjs require\n    else if (typeof names == 'string') {\n      var module = loader.get(names);\n      return module.__useDefault ? module['default'] : module;\n    }\n\n    else\n      throw new TypeError('Invalid require');\n  };\n  loader.amdRequire = require;\n\n  function makeRequire(parentName, staticRequire, loader) {\n    return function(names, callback, errback) {\n      if (typeof names == 'string')\n        return staticRequire(names);\n      return require.call(loader, names, callback, errback, { name: parentName });\n    }\n  }\n\n  // run once per loader\n  function generateDefine(loader) {\n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      if (anonDefine || defineBundle) {\n        load.metadata.format = 'defined';\n        load.metadata.registered = true;\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    function define(name, deps, factory) {\n      if (typeof name != 'string') {\n        factory = deps;\n        deps = name;\n        name = null;\n      }\n      if (!(deps instanceof Array)) {\n        factory = deps;\n        deps = ['require', 'exports', 'module'];\n      }\n\n      if (typeof factory != 'function')\n        factory = (function(factory) {\n          return function() { return factory; }\n        })(factory);\n\n      // in IE8, a trailing comma becomes a trailing undefined entry\n      if (deps[deps.length - 1] === undefined)\n        deps.pop();\n\n      // remove system dependencies\n      var requireIndex, exportsIndex, moduleIndex;\n      \n      if ((requireIndex = indexOf.call(deps, 'require')) != -1) {\n        \n        deps.splice(requireIndex, 1);\n\n        var factoryText = factory.toString();\n\n        deps = deps.concat(getCJSDeps(factoryText, requireIndex));\n      }\n        \n\n      if ((exportsIndex = indexOf.call(deps, 'exports')) != -1)\n        deps.splice(exportsIndex, 1);\n      \n      if ((moduleIndex = indexOf.call(deps, 'module')) != -1)\n        deps.splice(moduleIndex, 1);\n\n      var define = {\n        deps: deps,\n        execute: function(require, exports, module) {\n\n          var depValues = [];\n          for (var i = 0; i < deps.length; i++)\n            depValues.push(require(deps[i]));\n\n          module.uri = loader.baseURL + module.id;\n\n          module.config = function() {};\n\n          // add back in system dependencies\n          if (moduleIndex != -1)\n            depValues.splice(moduleIndex, 0, module);\n          \n          if (exportsIndex != -1)\n            depValues.splice(exportsIndex, 0, exports);\n          \n          if (requireIndex != -1)\n            depValues.splice(requireIndex, 0, makeRequire(module.id, require, loader));\n\n          var output = factory.apply(global, depValues);\n\n          if (typeof output == 'undefined' && module)\n            output = module.exports;\n\n          if (typeof output != 'undefined')\n            return output;\n        }\n      };\n\n      // anonymous define\n      if (!name) {\n        // already defined anonymously -> throw\n        if (anonDefine)\n          throw new TypeError('Multiple defines for anonymous module');\n        anonDefine = define;\n      }\n      // named define\n      else {\n        // if it has no dependencies and we don't have any other\n        // defines, then let this be an anonymous define\n        if (deps.length == 0 && !anonDefine && !defineBundle)\n          anonDefine = define;\n\n        // otherwise its a bundle only\n        else\n          anonDefine = null;\n\n        // the above is just to support single modules of the form:\n        // define('jquery')\n        // still loading anonymously\n        // because it is done widely enough to be useful\n\n        // note this is now a bundle\n        defineBundle = true;\n\n        // define the module through the register registry\n        loader.register(name, define.deps, false, define.execute);\n      }\n    };\n    define.amd = {};\n    loader.amdDefine = define;\n  }\n\n  var anonDefine;\n  // set to true if the current module turns out to be a named define bundle\n  var defineBundle;\n\n  var oldModule, oldExports, oldDefine;\n\n  // adds define as a global (potentially just temporarily)\n  function createDefine(loader) {\n    if (!loader.amdDefine)\n      generateDefine(loader);\n\n    anonDefine = null;\n    defineBundle = null;\n\n    // ensure no NodeJS environment detection\n    var global = loader.global;\n\n    oldModule = global.module;\n    oldExports = global.exports;\n    oldDefine = global.define;\n\n    global.module = undefined;\n    global.exports = undefined;\n\n    if (global.define && global.define === loader.amdDefine)\n      return;\n\n    global.define = loader.amdDefine;\n  }\n\n  function removeDefine(loader) {\n    var global = loader.global;\n    global.define = oldDefine;\n    global.module = oldModule;\n    global.exports = oldExports;\n  }\n\n  generateDefine(loader);\n\n  if (loader.scriptLoader) {\n    var loaderFetch = loader.fetch;\n    loader.fetch = function(load) {\n      createDefine(this);\n      return loaderFetch.call(this, load);\n    }\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    if (load.metadata.format == 'amd' || !load.metadata.format && load.source.match(amdRegEx)) {\n      load.metadata.format = 'amd';\n\n      if (loader.execute !== false) {\n        createDefine(loader);\n\n        loader.__exec(load);\n\n        removeDefine(loader);\n\n        if (!anonDefine && !defineBundle && !isNode)\n          throw new TypeError('AMD module ' + load.name + ' did not define');\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    return loaderInstantiate.call(loader, load);\n  }\n}\n/*\n  SystemJS map support\n  \n  Provides map configuration through\n    System.map['jquery'] = 'some/module/map'\n\n  As well as contextual map config through\n    System.map['bootstrap'] = {\n      jquery: 'some/module/map2'\n    }\n\n  Note that this applies for subpaths, just like RequireJS\n\n  jquery      -> 'some/module/map'\n  jquery/path -> 'some/module/map/path'\n  bootstrap   -> 'bootstrap'\n\n  Inside any module name of the form 'bootstrap' or 'bootstrap/*'\n    jquery    -> 'some/module/map2'\n    jquery/p  -> 'some/module/map2/p'\n\n  Maps are carefully applied from most specific contextual map, to least specific global map\n*/\nfunction map(loader) {\n  loader.map = loader.map || {};\n\n  // return if prefix parts (separated by '/') match the name\n  // eg prefixMatch('jquery/some/thing', 'jquery') -> true\n  //    prefixMatch('jqueryhere/', 'jquery') -> false\n  function prefixMatch(name, prefix) {\n    if (name.length < prefix.length)\n      return false;\n    if (name.substr(0, prefix.length) != prefix)\n      return false;\n    if (name[prefix.length] && name[prefix.length] != '/')\n      return false;\n    return true;\n  }\n\n  // get the depth of a given path\n  // eg pathLen('some/name') -> 2\n  function pathLen(name) {\n    var len = 1;\n    for (var i = 0, l = name.length; i < l; i++)\n      if (name[i] === '/')\n        len++;\n    return len;\n  }\n\n  function doMap(name, matchLen, map) {\n    return map + name.substr(matchLen);\n  }\n\n  // given a relative-resolved module name and normalized parent name,\n  // apply the map configuration\n  function applyMap(name, parentName, loader) {\n    var curMatch, curMatchLength = 0;\n    var curParent, curParentMatchLength = 0;\n    var tmpParentLength, tmpPrefixLength;\n    var subPath;\n    var nameParts;\n    \n    // first find most specific contextual match\n    if (parentName) {\n      for (var p in loader.map) {\n        var curMap = loader.map[p];\n        if (typeof curMap != 'object')\n          continue;\n\n        // most specific parent match wins first\n        if (!prefixMatch(parentName, p))\n          continue;\n\n        tmpParentLength = pathLen(p);\n        if (tmpParentLength <= curParentMatchLength)\n          continue;\n\n        for (var q in curMap) {\n          // most specific name match wins\n          if (!prefixMatch(name, q))\n            continue;\n          tmpPrefixLength = pathLen(q);\n          if (tmpPrefixLength <= curMatchLength)\n            continue;\n\n          curMatch = q;\n          curMatchLength = tmpPrefixLength;\n          curParent = p;\n          curParentMatchLength = tmpParentLength;\n        }\n      }\n    }\n\n    // if we found a contextual match, apply it now\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curParent][curMatch]);\n\n    // now do the global map\n    for (var p in loader.map) {\n      var curMap = loader.map[p];\n      if (typeof curMap != 'string')\n        continue;\n\n      if (!prefixMatch(name, p))\n        continue;\n\n      var tmpPrefixLength = pathLen(p);\n\n      if (tmpPrefixLength <= curMatchLength)\n        continue;\n\n      curMatch = p;\n      curMatchLength = tmpPrefixLength;\n    }\n\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curMatch]);\n\n    return name;\n  }\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    if (!loader.map)\n      loader.map = {};\n\n    var isPackage = false;\n    if (name.substr(name.length - 1, 1) == '/') {\n      isPackage = true;\n      name += '#';\n    }\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      name = applyMap(name, parentName, loader);\n\n      // Normalize \"module/\" into \"module/module\"\n      // Convenient for packages\n      if (isPackage) {\n        var nameParts = name.split('/');\n        nameParts.pop();\n        var pkgName = nameParts.pop();\n        nameParts.push(pkgName);\n        nameParts.push(pkgName);\n        name = nameParts.join('/');\n      }\n\n      return name;\n    });\n  }\n}\n/*\n  SystemJS Plugin Support\n\n  Supports plugin syntax with \"!\"\n\n  The plugin name is loaded as a module itself, and can override standard loader hooks\n  for the plugin resource. See the plugin section of the systemjs readme.\n*/\nfunction plugins(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    // if parent is a plugin, normalize against the parent plugin argument only\n    var parentPluginIndex;\n    if (parentName && (parentPluginIndex = parentName.indexOf('!')) != -1)\n      parentName = parentName.substr(0, parentPluginIndex);\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      // if this is a plugin, normalize the plugin name and the argument\n      var pluginIndex = name.lastIndexOf('!');\n      if (pluginIndex != -1) {\n        var argumentName = name.substr(0, pluginIndex);\n\n        // plugin name is part after \"!\" or the extension itself\n        var pluginName = name.substr(pluginIndex + 1) || argumentName.substr(argumentName.lastIndexOf('.') + 1);\n\n        // normalize the plugin name relative to the same parent\n        return new Promise(function(resolve) {\n          resolve(loader.normalize(pluginName, parentName, parentAddress)); \n        })\n        // normalize the plugin argument\n        .then(function(_pluginName) {\n          pluginName = _pluginName;\n          return loader.normalize(argumentName, parentName, parentAddress);\n        })\n        .then(function(argumentName) {\n          return argumentName + '!' + pluginName;\n        });\n      }\n\n      // standard normalization\n      return name;\n    });\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    var name = load.name;\n\n    // only fetch the plugin itself if this name isn't defined\n    if (this.defined && this.defined[name])\n      return loaderLocate.call(this, load);\n\n    // plugin\n    var pluginIndex = name.lastIndexOf('!');\n    if (pluginIndex != -1) {\n      var pluginName = name.substr(pluginIndex + 1);\n\n      // the name to locate is the plugin argument only\n      load.name = name.substr(0, pluginIndex);\n\n      var pluginLoader = loader.pluginLoader || loader;\n\n      // load the plugin module\n      // NB ideally should use pluginLoader.load for normalized,\n      //    but not currently working for some reason\n      return pluginLoader['import'](pluginName)\n      .then(function() {\n        var plugin = pluginLoader.get(pluginName);\n        plugin = plugin['default'] || plugin;\n\n        // allow plugins to opt-out of build\n        if (plugin.build === false && loader.pluginLoader)\n          load.metadata.build = false;\n\n        // store the plugin module itself on the metadata\n        load.metadata.plugin = plugin;\n        load.metadata.pluginName = pluginName;\n        load.metadata.pluginArgument = load.name;\n\n        // run plugin locate if given\n        if (plugin.locate)\n          return plugin.locate.call(loader, load);\n\n        // otherwise use standard locate without '.js' extension adding\n        else\n          return Promise.resolve(loader.locate(load))\n          .then(function(address) {\n            return address.substr(0, address.length - 3);\n          });\n      });\n    }\n\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (load.metadata.build === false)\n      return '';\n    else if (load.metadata.plugin && load.metadata.plugin.fetch && !load.metadata.pluginFetchCalled) {\n      load.metadata.pluginFetchCalled = true;\n      return load.metadata.plugin.fetch.call(loader, load, loaderFetch);\n    }\n    else\n      return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.translate)\n      return Promise.resolve(load.metadata.plugin.translate.call(loader, load)).then(function(result) {\n        if (result)\n          load.source = result;\n        return loaderTranslate.call(loader, load);\n      });\n    else\n      return loaderTranslate.call(loader, load);\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.instantiate)\n      return Promise.resolve(load.metadata.plugin.instantiate.call(loader, load)).then(function(result) {\n        load.metadata.format = 'defined';\n        load.metadata.execute = function() {\n          return result;\n        };\n        return loaderInstantiate.call(loader, load);\n      });\n    else if (load.metadata.plugin && load.metadata.plugin.build === false) {\n      load.metadata.format = 'defined';\n      load.metadata.deps.push(load.metadata.pluginName);\n      load.metadata.execute = function() {\n        return loader.newModule({});\n      };\n      return loaderInstantiate.call(loader, load);\n    }\n    else\n      return loaderInstantiate.call(loader, load);\n  }\n\n}/*\n  System bundles\n\n  Allows a bundle module to be specified which will be dynamically \n  loaded before trying to load a given module.\n\n  For example:\n  System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n\n  Will result in a load to \"mybundle\" whenever a load to \"jquery\"\n  or \"bootstrap/js/bootstrap\" is made.\n\n  In this way, the bundle becomes the request that provides the module\n*/\n\nfunction bundles(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  // bundles support (just like RequireJS)\n  // bundle name is module name of bundle itself\n  // bundle is array of modules defined by the bundle\n  // when a module in the bundle is requested, the bundle is loaded instead\n  // of the form System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n  loader.bundles = loader.bundles || {};\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (loader.trace)\n      return loaderFetch.call(this, load);\n    if (!loader.bundles)\n      loader.bundles = {};\n\n    // if this module is in a bundle, load the bundle first then\n    for (var b in loader.bundles) {\n      if (indexOf.call(loader.bundles[b], load.name) == -1)\n        continue;\n      // we do manual normalization in case the bundle is mapped\n      // this is so we can still know the normalized name is a bundle\n      return Promise.resolve(loader.normalize(b))\n      .then(function(normalized) {\n        loader.bundles[normalized] = loader.bundles[normalized] || loader.bundles[b];\n\n        // note this module is a bundle in the meta\n        loader.meta = loader.meta || {};\n        loader.meta[normalized] = loader.meta[normalized] || {};\n        loader.meta[normalized].bundle = true;\n\n        return loader.load(normalized);\n      })\n      .then(function() {\n        return '';\n      });\n    }\n    return loaderFetch.call(this, load);\n  }\n}/*\n  SystemJS Semver Version Addon\n  \n  1. Uses Semver convention for major and minor forms\n\n  Supports requesting a module from a package that contains a version suffix\n  with the following semver ranges:\n    module       - any version\n    module@1     - major version 1, any minor (not prerelease)\n    module@1.2   - minor version 1.2, any patch (not prerelease)\n    module@1.2.3 - exact version\n\n  It is assumed that these modules are provided by the server / file system.\n\n  First checks the already-requested packages to see if there are any packages \n  that would match the same package and version range.\n\n  This provides a greedy algorithm as a simple fix for sharing version-managed\n  dependencies as much as possible, which can later be optimized through version\n  hint configuration created out of deeper version tree analysis.\n  \n  2. Semver-compatibility syntax (caret operator - ^)\n\n  Compatible version request support is then also provided for:\n\n    module@^1.2.3        - module@1, >=1.2.3\n    module@^1.2          - module@1, >=1.2.0\n    module@^1            - module@1\n    module@^0.5.3        - module@0.5, >= 0.5.3\n    module@^0.0.1        - module@0.0.1\n\n  The ^ symbol is always normalized out to a normal version request.\n\n  This provides comprehensive semver compatibility.\n  \n  3. System.versions version hints and version report\n\n  Note this addon should be provided after all other normalize overrides.\n\n  The full list of versions can be found at System.versions providing an insight\n  into any possible version forks.\n\n  It is also possible to create version solution hints on the System global:\n\n  System.versions = {\n    jquery: ['1.9.2', '2.0.3'],\n    bootstrap: '3.0.1'\n  };\n\n  Versions can be an array or string for a single version.\n\n  When a matching semver request is made (jquery@1.9, jquery@1, bootstrap@3)\n  they will be converted to the latest version match contained here, if present.\n\n  Prereleases in this versions list are also allowed to satisfy ranges when present.\n*/\n\nfunction versions(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var semverRegEx = /^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:-([\\da-z-]+(?:\\.[\\da-z-]+)*)(?:\\+([\\da-z-]+(?:\\.[\\da-z-]+)*))?)?)?)?$/i;\n  var numRegEx = /^\\d+$/;\n\n  function toInt(num) {\n    return parseInt(num, 10);\n  }\n\n  function parseSemver(v) {\n    var semver = v.match(semverRegEx);\n    if (!semver)\n      return {\n        tag: v\n      };\n    else\n      return {\n        major: toInt(semver[1]),\n        minor: toInt(semver[2]),\n        patch: toInt(semver[3]),\n        pre: semver[4] && semver[4].split('.')\n      };\n  }\n\n  var parts = ['major', 'minor', 'patch'];\n  function semverCompareParsed(v1, v2) {\n    // not semvers - tags have equal precedence\n    if (v1.tag && v2.tag)\n      return 0;\n\n    // semver beats non-semver\n    if (v1.tag)\n      return -1;\n    if (v2.tag)\n      return 1;\n\n    // compare version numbers\n    for (var i = 0; i < parts.length; i++) {\n      var part = parts[i];\n      var part1 = v1[part];\n      var part2 = v2[part];\n      if (part1 == part2)\n        continue;\n      if (isNaN(part1))\n        return -1;\n      if (isNaN(part2))\n        return 1;\n      return part1 > part2 ? 1 : -1;\n    }\n\n    if (!v1.pre && !v2.pre)\n      return 0;\n\n    if (!v1.pre)\n      return 1;\n    if (!v2.pre)\n      return -1;\n\n    // prerelease comparison\n    for (var i = 0, l = Math.min(v1.pre.length, v2.pre.length); i < l; i++) {\n      if (v1.pre[i] == v2.pre[i])\n        continue;\n\n      var isNum1 = v1.pre[i].match(numRegEx);\n      var isNum2 = v2.pre[i].match(numRegEx);\n      \n      // numeric has lower precedence\n      if (isNum1 && !isNum2)\n        return -1;\n      if (isNum2 && !isNum1)\n        return 1;\n\n      // compare parts\n      if (isNum1 && isNum2)\n        return toInt(v1.pre[i]) > toInt(v2.pre[i]) ? 1 : -1;\n      else\n        return v1.pre[i] > v2.pre[i] ? 1 : -1;\n    }\n\n    if (v1.pre.length == v2.pre.length)\n      return 0;\n\n    // more pre-release fields win if equal\n    return v1.pre.length > v2.pre.length ? 1 : -1;\n  }\n\n  // match against a parsed range object\n  // saves operation repetition\n  // doesn't support tags\n  // if not semver or fuzzy, assume exact\n  function matchParsed(range, version) {\n    var rangeVersion = range.version;\n\n    if (rangeVersion.tag)\n      return rangeVersion.tag == version.tag;\n\n    // if the version is less than the range, it's not a match\n    if (semverCompareParsed(rangeVersion, version) == 1)\n      return false;\n\n    // now we just have to check that the version isn't too high for the range\n    if (isNaN(version.minor) || isNaN(version.patch))\n      return false;\n\n    // if the version has a prerelease, ensure the range version has a prerelease in it\n    // and that we match the range version up to the prerelease exactly\n    if (version.pre) {\n      if (!(rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch))\n        return false;\n      return range.semver || range.fuzzy || rangeVersion.pre.join('.') == version.pre.join('.');\n    }\n\n    // check semver range\n    if (range.semver) {\n      // ^0\n      if (rangeVersion.major == 0 && isNaN(rangeVersion.minor))\n        return version.major < 1;\n      // ^1..\n      else if (rangeVersion.major >= 1)\n        return rangeVersion.major == version.major;\n      // ^0.1, ^0.2\n      else if (rangeVersion.minor >= 1)\n        return rangeVersion.minor == version.minor;\n      // ^0.0.0\n      else\n        return (rangeVersion.patch || 0) == version.patch;\n    }\n\n    // check fuzzy range\n    if (range.fuzzy)\n      return version.major == rangeVersion.major && version.minor < (rangeVersion.minor || 0) + 1;\n\n    // exact match\n    // eg 001.002.003 matches 1.2.3\n    return !rangeVersion.pre && rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch;\n  }\n\n  /*\n   * semver       - is this a semver range\n   * fuzzy        - is this a fuzzy range\n   * version      - the parsed version object\n   */\n  function parseRange(range) {\n    var rangeObj = {};\n\n    ((rangeObj.semver = range.substr(0, 1) == '^') \n        || (rangeObj.fuzzy = range.substr(0, 1) == '~')\n    ) && (range = range.substr(1));\n\n    var rangeVersion = rangeObj.version = parseSemver(range);\n\n    if (rangeVersion.tag)\n      return rangeObj;\n\n    // 0, 0.1 behave like ~0, ~0.1\n    if (!rangeObj.fuzzy && !rangeObj.semver && (isNaN(rangeVersion.minor) || isNaN(rangeVersion.patch)))\n      rangeObj.fuzzy = true;\n\n    // ~1, ~0 behave like ^1, ^0\n    if (rangeObj.fuzzy && isNaN(rangeVersion.minor)) {\n      rangeObj.semver = true;\n      rangeObj.fuzzy = false;\n    }\n\n    // ^0.0 behaves like ~0.0\n    if (rangeObj.semver && !isNaN(rangeVersion.minor) && isNaN(rangeVersion.patch)) {\n      rangeObj.semver = false;\n      rangeObj.fuzzy = true;\n    }\n\n    return rangeObj;\n  }\n\n  function semverCompare(v1, v2) {\n    return semverCompareParsed(parseSemver(v1), parseSemver(v2));\n  }\n\n  loader.versions = loader.versions || {};\n\n  var loaderNormalize = loader.normalize;\n  // NOW use modified match algorithm if possible\n  loader.normalize = function(name, parentName, parentAddress) {\n    if (!loader.versions)\n      loader.versions = {};\n    var packageVersions = this.versions;\n\n    // strip the version before applying map config\n    var stripVersion, stripSubPathLength;\n    if (name.indexOf('@') > 0) {\n      var versionIndex = name.lastIndexOf('@');\n      var parts = name.substr(versionIndex + 1, name.length - versionIndex - 1).split('/');\n      stripVersion = parts[0];\n      stripSubPathLength = parts.length;\n      name = name.substr(0, versionIndex) + name.substr(versionIndex + stripVersion.length + 1, name.length - versionIndex - stripVersion.length - 1);\n    }\n\n    // run all other normalizers first\n    return Promise.resolve(loaderNormalize.call(this, name, parentName, parentAddress)).then(function(normalized) {\n      \n      var index = normalized.indexOf('@');\n\n      // if we stripped a version, and it still has no version, add it back\n      if (stripVersion && (index == -1 || index == 0)) {\n        var parts = normalized.split('/');\n        parts[parts.length - stripSubPathLength] += '@' + stripVersion;\n        normalized = parts.join('/');\n        index = normalized.indexOf('@');\n      }\n\n      // see if this module corresponds to a package already in our versioned packages list\n      \n      // no version specified - check against the list (given we don't know the package name)\n      var nextChar, versions;\n      if (index == -1 || index == 0) {\n        for (var p in packageVersions) {\n          versions = packageVersions[p];\n          if (normalized.substr(0, p.length) != p)\n            continue;\n\n          nextChar = normalized.substr(p.length, 1);\n\n          if (nextChar && nextChar != '/')\n            continue;\n\n          // match -> take latest version\n          return p + '@' + (typeof versions == 'string' ? versions : versions[versions.length - 1]) + normalized.substr(p.length);\n        }\n        return normalized;\n      }\n\n      // get the version info\n      var packageName = normalized.substr(0, index);\n      var range = normalized.substr(index + 1).split('/')[0];\n      var rangeLength = range.length;\n      var parsedRange = parseRange(normalized.substr(index + 1).split('/')[0]);\n      versions = packageVersions[normalized.substr(0, index)] || [];\n      if (typeof versions == 'string')\n        versions = [versions];\n\n      // find a match in our version list\n      for (var i = versions.length - 1; i >= 0; i--) {\n        if (matchParsed(parsedRange, parseSemver(versions[i])))\n          return packageName + '@' + versions[i] + normalized.substr(index + rangeLength + 1);\n      }\n\n      // no match found -> send a request to the server\n      var versionRequest;\n      if (parsedRange.semver) {\n        versionRequest = parsedRange.version.major == 0 && !isNaN(parsedRange.version.minor) ? '0.' + parsedRange.version.minor : parsedRange.version.major;\n      }\n      else if (parsedRange.fuzzy) {\n        versionRequest = parsedRange.version.major + '.' + parsedRange.version.minor;\n      }\n      else {\n        versionRequest = range;\n        versions.push(range);\n        versions.sort(semverCompare);\n        packageVersions[packageName] = versions.length == 1 ? versions[0] : versions;\n      }\n\n      return packageName + '@' + versionRequest + normalized.substr(index + rangeLength + 1);\n    });\n  }\n}\n/*\n * Dependency Tree Cache\n * \n * Allows a build to pre-populate a dependency trace tree on the loader of \n * the expected dependency tree, to be loaded upfront when requesting the\n * module, avoinding the n round trips latency of module loading, where \n * n is the dependency tree depth.\n *\n * eg:\n * System.depCache = {\n *  'app': ['normalized', 'deps'],\n *  'normalized': ['another'],\n *  'deps': ['tree']\n * };\n * \n * System.import('app') \n * // simultaneously starts loading all of:\n * // 'normalized', 'deps', 'another', 'tree'\n * // before \"app\" source is even loaded\n */\n\nfunction depCache(loader) {\n  loader.depCache = loader.depCache || {};\n\n  loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    if (!loader.depCache)\n      loader.depCache = {};\n\n    // load direct deps, in turn will pick up their trace trees\n    var deps = loader.depCache[load.name];\n    if (deps)\n      for (var i = 0; i < deps.length; i++)\n        loader.load(deps[i]);\n\n    return loaderLocate.call(loader, load);\n  }\n}\n  \nmeta(System);\nregister(System);\ncore(System);\nglobal(System);\ncjs(System);\namd(System);\nmap(System);\nplugins(System);\nbundles(System);\nversions(System);\ndepCache(System);\n  if (!System.paths['@traceur'])\n    System.paths['@traceur'] = $__curScript && $__curScript.getAttribute('data-traceur-src')\n      || ($__curScript && $__curScript.src \n        ? $__curScript.src.substr(0, $__curScript.src.lastIndexOf('/') + 1) \n        : System.baseURL + (System.baseURL.lastIndexOf('/') == System.baseURL.length - 1 ? '' : '/')\n        ) + 'traceur.js';\n};\n\nvar $__curScript, __eval;\n\n(function() {\n\n  var doEval;\n\n  __eval = function(source, address, sourceMap) {\n    source += '\\n//# sourceURL=' + address + (sourceMap ? '\\n//# sourceMappingURL=' + sourceMap : '');\n\n    try {\n      doEval(source);\n    }\n    catch(e) {\n      var msg = 'Error evaluating ' + address + '\\n';\n      if (e instanceof Error)\n        e.message = msg + e.message;\n      else\n        e = msg + e;\n      throw e;\n    }\n  };\n\n  var isWorker = typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined';\n\n  if (isBrowser) {\n    var head;\n\n    var scripts = document.getElementsByTagName('script');\n    $__curScript = scripts[scripts.length - 1];\n\n    // globally scoped eval for the browser\n    doEval = function(source) {\n      if (!head)\n        head = document.head || document.body || document.documentElement;\n\n      var script = document.createElement('script');\n      script.text = source;\n      var onerror = window.onerror;\n      var e;\n      window.onerror = function(_e) {\n        e = _e;\n      }\n      head.appendChild(script);\n      head.removeChild(script);\n      window.onerror = onerror;\n      if (e)\n        throw e;\n    }\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      // determine the current script path as the base path\n      var curPath = $__curScript.src;\n      var basePath = curPath.substr(0, curPath.lastIndexOf('/') + 1);\n      document.write(\n        '<' + 'script type=\"text/javascript\" src=\"' + basePath + 'es6-module-loader.js\" data-init=\"upgradeSystemLoader\">' + '<' + '/script>'\n      );\n    }\n    else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else if(isWorker) {\n    doEval = function(source) {\n      try {\n        eval(source);\n      } catch(e) {\n        throw e;\n      }\n    };\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      var basePath = '';\n      try {\n        throw new TypeError('Unable to get Worker base path.');\n      } catch(err) {\n        var idx = err.stack.indexOf('at ') + 3;\n        var withSystem = err.stack.substr(idx, err.stack.substr(idx).indexOf('\\n'));\n        basePath = withSystem.substr(0, withSystem.lastIndexOf('/') + 1);\n      }\n      importScripts(basePath + 'es6-module-loader.js');\n    } else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else {\n    var es6ModuleLoader = require('es6-module-loader');\n    $__global.System = es6ModuleLoader.System;\n    $__global.Loader = es6ModuleLoader.Loader;\n    $__global.upgradeSystemLoader();\n    module.exports = $__global.System;\n\n    // global scoped eval for node\n    var vm = require('vm');\n    doEval = function(source, address, sourceMap) {\n      vm.runInThisContext(source);\n    }\n  }\n})();\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/system.js/lib/banner.js",
    "content": "/*\n * SystemJS v0.10.0\n */\n\n"
  },
  {
    "path": "client/components/system.js/lib/extension-amd.js",
    "content": "/*\n  SystemJS AMD Format\n  Provides the AMD module format definition at System.format.amd\n  as well as a RequireJS-style require on System.require\n*/\nfunction amd(loader) {\n  // by default we only enforce AMD noConflict mode in Node\n  var isNode = typeof module != 'undefined' && module.exports;\n\n  // AMD Module Format Detection RegEx\n  // define([.., .., ..], ...)\n  // define(varName); || define(function(require, exports) {}); || define({})\n  var amdRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  var cjsRequirePre = \"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\";\n  var cjsRequirePost = \"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\";\n\n  var fnBracketRegEx = /\\(([^\\)]*)\\)/;\n\n  var wsRegEx = /^\\s+|\\s+$/g;\n\n  var requireRegExs = {};\n\n  function getCJSDeps(source, requireIndex) {\n\n    // remove comments\n    source = source.replace(commentRegEx, '');\n\n    // determine the require alias\n    var params = source.match(fnBracketRegEx);\n    var requireAlias = (params[1].split(',')[requireIndex] || 'require').replace(wsRegEx, '');\n\n    // find or generate the regex for this requireAlias\n    var requireRegEx = requireRegExs[requireAlias] || (requireRegExs[requireAlias] = new RegExp(cjsRequirePre + requireAlias + cjsRequirePost, 'g'));\n\n    requireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    var match;\n    while (match = requireRegEx.exec(source))\n      deps.push(match[2] || match[3]);\n\n    return deps;\n  }\n\n  /*\n    AMD-compatible require\n    To copy RequireJS, set window.require = window.requirejs = loader.amdRequire\n  */\n  function require(names, callback, errback, referer) {\n    // 'this' is bound to the loader\n    var loader = this;\n\n    // in amd, first arg can be a config object... we just ignore\n    if (typeof names == 'object' && !(names instanceof Array))\n      return require.apply(null, Array.prototype.splice.call(arguments, 1, arguments.length - 1));\n\n    // amd require\n    if (names instanceof Array)\n      Promise.all(names.map(function(name) {\n        return loader['import'](name, referer);\n      })).then(function(modules) {\n        callback.apply(null, modules);\n      }, errback);\n\n    // commonjs require\n    else if (typeof names == 'string') {\n      var module = loader.get(names);\n      return module.__useDefault ? module['default'] : module;\n    }\n\n    else\n      throw new TypeError('Invalid require');\n  };\n  loader.amdRequire = require;\n\n  function makeRequire(parentName, staticRequire, loader) {\n    return function(names, callback, errback) {\n      if (typeof names == 'string')\n        return staticRequire(names);\n      return require.call(loader, names, callback, errback, { name: parentName });\n    }\n  }\n\n  // run once per loader\n  function generateDefine(loader) {\n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      if (anonDefine || defineBundle) {\n        load.metadata.format = 'defined';\n        load.metadata.registered = true;\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    function define(name, deps, factory) {\n      if (typeof name != 'string') {\n        factory = deps;\n        deps = name;\n        name = null;\n      }\n      if (!(deps instanceof Array)) {\n        factory = deps;\n        deps = ['require', 'exports', 'module'];\n      }\n\n      if (typeof factory != 'function')\n        factory = (function(factory) {\n          return function() { return factory; }\n        })(factory);\n\n      // in IE8, a trailing comma becomes a trailing undefined entry\n      if (deps[deps.length - 1] === undefined)\n        deps.pop();\n\n      // remove system dependencies\n      var requireIndex, exportsIndex, moduleIndex;\n      \n      if ((requireIndex = indexOf.call(deps, 'require')) != -1) {\n        \n        deps.splice(requireIndex, 1);\n\n        var factoryText = factory.toString();\n\n        deps = deps.concat(getCJSDeps(factoryText, requireIndex));\n      }\n        \n\n      if ((exportsIndex = indexOf.call(deps, 'exports')) != -1)\n        deps.splice(exportsIndex, 1);\n      \n      if ((moduleIndex = indexOf.call(deps, 'module')) != -1)\n        deps.splice(moduleIndex, 1);\n\n      var define = {\n        deps: deps,\n        execute: function(require, exports, module) {\n\n          var depValues = [];\n          for (var i = 0; i < deps.length; i++)\n            depValues.push(require(deps[i]));\n\n          module.uri = loader.baseURL + module.id;\n\n          module.config = function() {};\n\n          // add back in system dependencies\n          if (moduleIndex != -1)\n            depValues.splice(moduleIndex, 0, module);\n          \n          if (exportsIndex != -1)\n            depValues.splice(exportsIndex, 0, exports);\n          \n          if (requireIndex != -1)\n            depValues.splice(requireIndex, 0, makeRequire(module.id, require, loader));\n\n          var output = factory.apply(global, depValues);\n\n          if (typeof output == 'undefined' && module)\n            output = module.exports;\n\n          if (typeof output != 'undefined')\n            return output;\n        }\n      };\n\n      // anonymous define\n      if (!name) {\n        // already defined anonymously -> throw\n        if (anonDefine)\n          throw new TypeError('Multiple defines for anonymous module');\n        anonDefine = define;\n      }\n      // named define\n      else {\n        // if it has no dependencies and we don't have any other\n        // defines, then let this be an anonymous define\n        if (deps.length == 0 && !anonDefine && !defineBundle)\n          anonDefine = define;\n\n        // otherwise its a bundle only\n        else\n          anonDefine = null;\n\n        // the above is just to support single modules of the form:\n        // define('jquery')\n        // still loading anonymously\n        // because it is done widely enough to be useful\n\n        // note this is now a bundle\n        defineBundle = true;\n\n        // define the module through the register registry\n        loader.register(name, define.deps, false, define.execute);\n      }\n    };\n    define.amd = {};\n    loader.amdDefine = define;\n  }\n\n  var anonDefine;\n  // set to true if the current module turns out to be a named define bundle\n  var defineBundle;\n\n  var oldModule, oldExports, oldDefine;\n\n  // adds define as a global (potentially just temporarily)\n  function createDefine(loader) {\n    if (!loader.amdDefine)\n      generateDefine(loader);\n\n    anonDefine = null;\n    defineBundle = null;\n\n    // ensure no NodeJS environment detection\n    var global = loader.global;\n\n    oldModule = global.module;\n    oldExports = global.exports;\n    oldDefine = global.define;\n\n    global.module = undefined;\n    global.exports = undefined;\n\n    if (global.define && global.define === loader.amdDefine)\n      return;\n\n    global.define = loader.amdDefine;\n  }\n\n  function removeDefine(loader) {\n    var global = loader.global;\n    global.define = oldDefine;\n    global.module = oldModule;\n    global.exports = oldExports;\n  }\n\n  generateDefine(loader);\n\n  if (loader.scriptLoader) {\n    var loaderFetch = loader.fetch;\n    loader.fetch = function(load) {\n      createDefine(this);\n      return loaderFetch.call(this, load);\n    }\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    if (load.metadata.format == 'amd' || !load.metadata.format && load.source.match(amdRegEx)) {\n      load.metadata.format = 'amd';\n\n      if (loader.execute !== false) {\n        createDefine(loader);\n\n        loader.__exec(load);\n\n        removeDefine(loader);\n\n        if (!anonDefine && !defineBundle && !isNode)\n          throw new TypeError('AMD module ' + load.name + ' did not define');\n      }\n\n      if (anonDefine) {\n        load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps;\n        load.metadata.execute = anonDefine.execute;\n      }\n    }\n\n    return loaderInstantiate.call(loader, load);\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-bundles.js",
    "content": "/*\n  System bundles\n\n  Allows a bundle module to be specified which will be dynamically \n  loaded before trying to load a given module.\n\n  For example:\n  System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n\n  Will result in a load to \"mybundle\" whenever a load to \"jquery\"\n  or \"bootstrap/js/bootstrap\" is made.\n\n  In this way, the bundle becomes the request that provides the module\n*/\n\nfunction bundles(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  // bundles support (just like RequireJS)\n  // bundle name is module name of bundle itself\n  // bundle is array of modules defined by the bundle\n  // when a module in the bundle is requested, the bundle is loaded instead\n  // of the form System.bundles['mybundle'] = ['jquery', 'bootstrap/js/bootstrap']\n  loader.bundles = loader.bundles || {};\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (loader.trace)\n      return loaderFetch.call(this, load);\n    if (!loader.bundles)\n      loader.bundles = {};\n\n    // if this module is in a bundle, load the bundle first then\n    for (var b in loader.bundles) {\n      if (indexOf.call(loader.bundles[b], load.name) == -1)\n        continue;\n      // we do manual normalization in case the bundle is mapped\n      // this is so we can still know the normalized name is a bundle\n      return Promise.resolve(loader.normalize(b))\n      .then(function(normalized) {\n        loader.bundles[normalized] = loader.bundles[normalized] || loader.bundles[b];\n\n        // note this module is a bundle in the meta\n        loader.meta = loader.meta || {};\n        loader.meta[normalized] = loader.meta[normalized] || {};\n        loader.meta[normalized].bundle = true;\n\n        return loader.load(normalized);\n      })\n      .then(function() {\n        return '';\n      });\n    }\n    return loaderFetch.call(this, load);\n  }\n}"
  },
  {
    "path": "client/components/system.js/lib/extension-cjs.js",
    "content": "/*\n  SystemJS CommonJS Format\n*/\nfunction cjs(loader) {\n\n  // CJS Module Format\n  // require('...') || exports[''] = ... || exports.asd = ... || module.exports = ...\n  var cjsExportsRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)(exports\\s*\\[['\"]|\\exports\\s*\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*\\=/;\n  // RegEx adjusted from https://github.com/jbrantly/yabble/blob/master/lib/yabble.js#L339\n  var cjsRequireRegEx = /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g;\n  var commentRegEx = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\n\n  function getCJSDeps(source) {\n    cjsRequireRegEx.lastIndex = 0;\n\n    var deps = [];\n\n    // remove comments from the source first, if not minified\n    if (source.length / source.split('\\n').length < 200)\n      source = source.replace(commentRegEx, '');\n\n    var match;\n\n    while (match = cjsRequireRegEx.exec(source))\n      deps.push(match[1].substr(1, match[1].length - 2));\n\n    return deps;\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n\n    if (!load.metadata.format) {\n      cjsExportsRegEx.lastIndex = 0;\n      cjsRequireRegEx.lastIndex = 0;\n      if (cjsRequireRegEx.exec(load.source) || cjsExportsRegEx.exec(load.source))\n        load.metadata.format = 'cjs';\n    }\n\n    if (load.metadata.format == 'cjs') {\n      load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(getCJSDeps(load.source)) : load.metadata.deps;\n\n      load.metadata.executingRequire = true;\n\n      load.metadata.execute = function(require, exports, module) {\n        var dirname = (load.address || '').split('/');\n        dirname.pop();\n        dirname = dirname.join('/');\n\n        var globals = loader.global._g = {\n          global: loader.global,\n          exports: exports,\n          module: module,\n          require: require,\n          __filename: load.address,\n          __dirname: dirname\n        };\n\n        var source = '(function(global, exports, module, require, __filename, __dirname) { ' + load.source \n          + '\\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        loader.__exec({\n          name: load.name,\n          address: load.address,\n          source: source\n        });\n\n        loader.global.define = define;\n\n        loader.global._g = undefined;\n      }\n    }\n\n    return loaderInstantiate.call(this, load);\n  };\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-core.js",
    "content": "/*\n * SystemJS Core\n * Code should be vaguely readable\n * \n */\nfunction core(loader) {\n\n  /*\n    __useDefault\n    \n    When a module object looks like:\n    newModule({\n      __useDefault: true,\n      default: 'some-module'\n    })\n\n    Then importing that module provides the 'some-module'\n    result directly instead of the full module.\n\n    Useful for eg module.exports = function() {}\n  */\n  var loaderImport = loader['import'];\n  loader['import'] = function(name, options) {\n    return loaderImport.call(this, name, options).then(function(module) {\n      return module.__useDefault ? module['default'] : module;\n    });\n  }\n\n  // support the empty module, as a concept\n  loader.set('@empty', loader.newModule({}));\n\n  // include the node require since we're overriding it\n  if (typeof require != 'undefined')\n    loader._nodeRequire = require;\n\n  /*\n    Config\n    Extends config merging one deep only\n\n    loader.config({\n      some: 'random',\n      config: 'here',\n      deep: {\n        config: { too: 'too' }\n      }\n    });\n\n    <=>\n\n    loader.some = 'random';\n    loader.config = 'here'\n    loader.deep = loader.deep || {};\n    loader.deep.config = { too: 'too' };\n  */\n  loader.config = function(cfg) {\n    for (var c in cfg) {\n      var v = cfg[c];\n      if (typeof v == 'object' && !(v instanceof Array)) {\n        this[c] = this[c] || {};\n        for (var p in v)\n          this[c][p] = v[p];\n      }\n      else\n        this[c] = v;\n    }\n  }\n\n  // override locate to allow baseURL to be document-relative\n  var baseURI;\n  if (typeof window == 'undefined' &&\n      typeof WorkerGlobalScope == 'undefined') {\n    baseURI = 'file:' + process.cwd() + '/';\n  }\n  // Inside of a Web Worker\n  else if(typeof window == 'undefined') {\n    baseURI = loader.global.location.href;\n  }\n  else {\n    baseURI = document.baseURI;\n    if (!baseURI) {\n      var bases = document.getElementsByTagName('base');\n      baseURI = bases[0] && bases[0].href || window.location.href;\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  var normalizedBaseURL;\n  loader.locate = function(load) {\n    if (this.baseURL != normalizedBaseURL) {\n      normalizedBaseURL = toAbsoluteURL(baseURI, this.baseURL);\n\n      if (normalizedBaseURL.substr(normalizedBaseURL.length - 1, 1) != '/')\n        normalizedBaseURL += '/';\n      this.baseURL = normalizedBaseURL;\n    }\n\n    return Promise.resolve(loaderLocate.call(this, load));\n  }\n\n  // Traceur conveniences\n  // good enough ES6 detection regex - format detections not designed to be accurate, but to handle the 99% use case\n  var es6RegEx = /(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let))/;\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n\n    if (load.name == '@traceur')\n      return loaderTranslate.call(loader, load);\n\n    // detect ES6\n    else if (load.metadata.format == 'es6' || !load.metadata.format && load.source.match(es6RegEx)) {\n      load.metadata.format = 'es6';\n\n      // dynamically load Traceur for ES6 if necessary\n      if (!loader.global.traceur) {\n        return loader['import']('@traceur').then(function() {\n          return loaderTranslate.call(loader, load);\n        });\n      }\n    }\n\n    return loaderTranslate.call(loader, load);\n  }\n\n  // always load Traceur as a global\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      loader.__exec(load);\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-depCache.js",
    "content": "/*\n * Dependency Tree Cache\n * \n * Allows a build to pre-populate a dependency trace tree on the loader of \n * the expected dependency tree, to be loaded upfront when requesting the\n * module, avoinding the n round trips latency of module loading, where \n * n is the dependency tree depth.\n *\n * eg:\n * System.depCache = {\n *  'app': ['normalized', 'deps'],\n *  'normalized': ['another'],\n *  'deps': ['tree']\n * };\n * \n * System.import('app') \n * // simultaneously starts loading all of:\n * // 'normalized', 'deps', 'another', 'tree'\n * // before \"app\" source is even loaded\n */\n\nfunction depCache(loader) {\n  loader.depCache = loader.depCache || {};\n\n  loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    if (!loader.depCache)\n      loader.depCache = {};\n\n    // load direct deps, in turn will pick up their trace trees\n    var deps = loader.depCache[load.name];\n    if (deps)\n      for (var i = 0; i < deps.length; i++)\n        loader.load(deps[i]);\n\n    return loaderLocate.call(loader, load);\n  }\n}\n  \n"
  },
  {
    "path": "client/components/system.js/lib/extension-global.js",
    "content": "/*\n  SystemJS Global Format\n\n  Supports\n    metadata.deps\n    metadata.init\n    metadata.exports\n\n  Also detects writes to the global object avoiding global collisions.\n  See the SystemJS readme global support section for further information.\n*/\nfunction global(loader) {\n\n  function readGlobalProperty(p, value) {\n    var pParts = p.split('.');\n    while (pParts.length)\n      value = value[pParts.shift()];\n    return value;\n  }\n\n  function createHelpers(loader) {\n    if (loader.has('@@global-helpers'))\n      return;\n\n    var hasOwnProperty = loader.global.hasOwnProperty;\n    var moduleGlobals = {};\n\n    var curGlobalObj;\n    var ignoredGlobalProps;\n\n    loader.set('@@global-helpers', loader.newModule({\n      prepareGlobal: function(moduleName, deps) {\n        // first, we add all the dependency modules to the global\n        for (var i = 0; i < deps.length; i++) {\n          var moduleGlobal = moduleGlobals[deps[i]];\n          if (moduleGlobal)\n            for (var m in moduleGlobal)\n              loader.global[m] = moduleGlobal[m];\n        }\n\n        // now store a complete copy of the global object\n        // in order to detect changes\n        curGlobalObj = {};\n        ignoredGlobalProps = ['indexedDB', 'sessionStorage', 'localStorage',\n          'clipboardData', 'frames', 'webkitStorageInfo', 'toolbar', 'statusbar',\n          'scrollbars', 'personalbar', 'menubar', 'locationbar', 'webkitIndexedDB'\n        ];\n        for (var g in loader.global) {\n          if (indexOf.call(ignoredGlobalProps, g) != -1) { continue; }\n          if (!hasOwnProperty || loader.global.hasOwnProperty(g)) {\n            try {\n              curGlobalObj[g] = loader.global[g];\n            } catch (e) {\n              ignoredGlobalProps.push(g);\n            }\n          }\n        }\n      },\n      retrieveGlobal: function(moduleName, exportName, init) {\n        var singleGlobal;\n        var multipleExports;\n        var exports = {};\n\n        // run init\n        if (init) {\n          var depModules = [];\n          for (var i = 0; i < deps.length; i++)\n            depModules.push(require(deps[i]));\n          singleGlobal = init.apply(loader.global, depModules);\n        }\n\n        // check for global changes, creating the globalObject for the module\n        // if many globals, then a module object for those is created\n        // if one global, then that is the module directly\n        else if (exportName) {\n          var firstPart = exportName.split('.')[0];\n          singleGlobal = readGlobalProperty(exportName, loader.global);\n          exports[firstPart] = loader.global[firstPart];\n        }\n\n        else {\n          for (var g in loader.global) {\n            if (indexOf.call(ignoredGlobalProps, g) != -1)\n              continue;\n            if ((!hasOwnProperty || loader.global.hasOwnProperty(g)) && g != loader.global && curGlobalObj[g] != loader.global[g]) {\n              exports[g] = loader.global[g];\n              if (singleGlobal) {\n                if (singleGlobal !== loader.global[g])\n                  multipleExports = true;\n              }\n              else if (singleGlobal !== false) {\n                singleGlobal = loader.global[g];\n              }\n            }\n          }\n        }\n\n        moduleGlobals[moduleName] = exports;\n\n        return multipleExports ? exports : singleGlobal;\n      }\n    }));\n  }\n\n  createHelpers(loader);\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    createHelpers(loader);\n\n    var exportName = load.metadata.exports;\n\n    if (!load.metadata.format)\n      load.metadata.format = 'global';\n\n    // global is a fallback module format\n    if (load.metadata.format == 'global') {\n      load.metadata.execute = function(require, exports, module) {\n\n        loader.get('@@global-helpers').prepareGlobal(module.id, load.metadata.deps);\n\n        if (exportName)\n          load.source += '\\nthis[\"' + exportName + '\"] = ' + exportName + ';';\n\n        // disable AMD detection\n        var define = loader.global.define;\n        loader.global.define = undefined;\n\n        // ensure no NodeJS environment detection\n        loader.global.module = undefined;\n        loader.global.exports = undefined;\n\n        loader.__exec(load);\n\n        loader.global.define = define;\n\n        return loader.get('@@global-helpers').retrieveGlobal(module.id, exportName, load.metadata.init);\n      }\n    }\n    return loaderInstantiate.call(loader, load);\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-map.js",
    "content": "/*\n  SystemJS map support\n  \n  Provides map configuration through\n    System.map['jquery'] = 'some/module/map'\n\n  As well as contextual map config through\n    System.map['bootstrap'] = {\n      jquery: 'some/module/map2'\n    }\n\n  Note that this applies for subpaths, just like RequireJS\n\n  jquery      -> 'some/module/map'\n  jquery/path -> 'some/module/map/path'\n  bootstrap   -> 'bootstrap'\n\n  Inside any module name of the form 'bootstrap' or 'bootstrap/*'\n    jquery    -> 'some/module/map2'\n    jquery/p  -> 'some/module/map2/p'\n\n  Maps are carefully applied from most specific contextual map, to least specific global map\n*/\nfunction map(loader) {\n  loader.map = loader.map || {};\n\n  // return if prefix parts (separated by '/') match the name\n  // eg prefixMatch('jquery/some/thing', 'jquery') -> true\n  //    prefixMatch('jqueryhere/', 'jquery') -> false\n  function prefixMatch(name, prefix) {\n    if (name.length < prefix.length)\n      return false;\n    if (name.substr(0, prefix.length) != prefix)\n      return false;\n    if (name[prefix.length] && name[prefix.length] != '/')\n      return false;\n    return true;\n  }\n\n  // get the depth of a given path\n  // eg pathLen('some/name') -> 2\n  function pathLen(name) {\n    var len = 1;\n    for (var i = 0, l = name.length; i < l; i++)\n      if (name[i] === '/')\n        len++;\n    return len;\n  }\n\n  function doMap(name, matchLen, map) {\n    return map + name.substr(matchLen);\n  }\n\n  // given a relative-resolved module name and normalized parent name,\n  // apply the map configuration\n  function applyMap(name, parentName, loader) {\n    var curMatch, curMatchLength = 0;\n    var curParent, curParentMatchLength = 0;\n    var tmpParentLength, tmpPrefixLength;\n    var subPath;\n    var nameParts;\n    \n    // first find most specific contextual match\n    if (parentName) {\n      for (var p in loader.map) {\n        var curMap = loader.map[p];\n        if (typeof curMap != 'object')\n          continue;\n\n        // most specific parent match wins first\n        if (!prefixMatch(parentName, p))\n          continue;\n\n        tmpParentLength = pathLen(p);\n        if (tmpParentLength <= curParentMatchLength)\n          continue;\n\n        for (var q in curMap) {\n          // most specific name match wins\n          if (!prefixMatch(name, q))\n            continue;\n          tmpPrefixLength = pathLen(q);\n          if (tmpPrefixLength <= curMatchLength)\n            continue;\n\n          curMatch = q;\n          curMatchLength = tmpPrefixLength;\n          curParent = p;\n          curParentMatchLength = tmpParentLength;\n        }\n      }\n    }\n\n    // if we found a contextual match, apply it now\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curParent][curMatch]);\n\n    // now do the global map\n    for (var p in loader.map) {\n      var curMap = loader.map[p];\n      if (typeof curMap != 'string')\n        continue;\n\n      if (!prefixMatch(name, p))\n        continue;\n\n      var tmpPrefixLength = pathLen(p);\n\n      if (tmpPrefixLength <= curMatchLength)\n        continue;\n\n      curMatch = p;\n      curMatchLength = tmpPrefixLength;\n    }\n\n    if (curMatch)\n      return doMap(name, curMatch.length, loader.map[curMatch]);\n\n    return name;\n  }\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    if (!loader.map)\n      loader.map = {};\n\n    var isPackage = false;\n    if (name.substr(name.length - 1, 1) == '/') {\n      isPackage = true;\n      name += '#';\n    }\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      name = applyMap(name, parentName, loader);\n\n      // Normalize \"module/\" into \"module/module\"\n      // Convenient for packages\n      if (isPackage) {\n        var nameParts = name.split('/');\n        nameParts.pop();\n        var pkgName = nameParts.pop();\n        nameParts.push(pkgName);\n        nameParts.push(pkgName);\n        name = nameParts.join('/');\n      }\n\n      return name;\n    });\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-meta.js",
    "content": "/*\n * Meta Extension\n *\n * Sets default metadata on a load record (load.metadata) from\n * loader.meta[moduleName].\n * Also provides an inline meta syntax for module meta in source.\n *\n * Eg:\n *\n * loader.meta['my/module'] = { some: 'meta' };\n *\n * load.metadata.some = 'meta' will now be set on the load record.\n *\n * The same meta could be set with a my/module.js file containing:\n * \n * my/module.js\n *   \"some meta\"; \n *   \"another meta\";\n *   console.log('this is my/module');\n *\n * The benefit of inline meta is that coniguration doesn't need\n * to be known in advance, which is useful for modularising\n * configuration and avoiding the need for configuration injection.\n *\n *\n * Example\n * -------\n *\n * The simplest meta example is setting the module format:\n *\n * System.meta['my/module'] = { format: 'amd' };\n *\n * or inside 'my/module.js':\n *\n * \"format amd\";\n * define(...);\n * \n */\n\nfunction meta(loader) {\n  var metaRegEx = /^(\\s*\\/\\*.*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/;\n  var metaPartRegEx = /\\/\\*.*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;\n\n  loader.meta = {};\n\n  function setConfigMeta(loader, load) {\n    var meta = loader.meta && loader.meta[load.name];\n    if (meta) {\n      for (var p in meta)\n        load.metadata[p] = load.metadata[p] || meta[p];\n    }\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    setConfigMeta(this, load);\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    // detect any meta header syntax\n    var meta = load.source.match(metaRegEx);\n    if (meta) {\n      var metaParts = meta[0].match(metaPartRegEx);\n      for (var i = 0; i < metaParts.length; i++) {\n        var len = metaParts[i].length;\n\n        var firstChar = metaParts[i].substr(0, 1);\n        if (metaParts[i].substr(len - 1, 1) == ';')\n          len--;\n      \n        if (firstChar != '\"' && firstChar != \"'\")\n          continue;\n\n        var metaString = metaParts[i].substr(1, metaParts[i].length - 3);\n\n        var metaName = metaString.substr(0, metaString.indexOf(' '));\n        if (metaName) {\n          var metaValue = metaString.substr(metaName.length + 1, metaString.length - metaName.length - 1);\n\n          if (load.metadata[metaName] instanceof Array)\n            load.metadata[metaName].push(metaValue);\n          else if (!load.metadata[metaName])\n            load.metadata[metaName] = metaValue;\n        }\n      }\n    }\n    // config meta overrides\n    setConfigMeta(this, load);\n    \n    return loaderTranslate.call(this, load);\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-plugins.js",
    "content": "/*\n  SystemJS Plugin Support\n\n  Supports plugin syntax with \"!\"\n\n  The plugin name is loaded as a module itself, and can override standard loader hooks\n  for the plugin resource. See the plugin section of the systemjs readme.\n*/\nfunction plugins(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var loaderNormalize = loader.normalize;\n  loader.normalize = function(name, parentName, parentAddress) {\n    var loader = this;\n    // if parent is a plugin, normalize against the parent plugin argument only\n    var parentPluginIndex;\n    if (parentName && (parentPluginIndex = parentName.indexOf('!')) != -1)\n      parentName = parentName.substr(0, parentPluginIndex);\n\n    return Promise.resolve(loaderNormalize.call(loader, name, parentName, parentAddress))\n    .then(function(name) {\n      // if this is a plugin, normalize the plugin name and the argument\n      var pluginIndex = name.lastIndexOf('!');\n      if (pluginIndex != -1) {\n        var argumentName = name.substr(0, pluginIndex);\n\n        // plugin name is part after \"!\" or the extension itself\n        var pluginName = name.substr(pluginIndex + 1) || argumentName.substr(argumentName.lastIndexOf('.') + 1);\n\n        // normalize the plugin name relative to the same parent\n        return new Promise(function(resolve) {\n          resolve(loader.normalize(pluginName, parentName, parentAddress)); \n        })\n        // normalize the plugin argument\n        .then(function(_pluginName) {\n          pluginName = _pluginName;\n          return loader.normalize(argumentName, parentName, parentAddress);\n        })\n        .then(function(argumentName) {\n          return argumentName + '!' + pluginName;\n        });\n      }\n\n      // standard normalization\n      return name;\n    });\n  }\n\n  var loaderLocate = loader.locate;\n  loader.locate = function(load) {\n    var loader = this;\n\n    var name = load.name;\n\n    // only fetch the plugin itself if this name isn't defined\n    if (this.defined && this.defined[name])\n      return loaderLocate.call(this, load);\n\n    // plugin\n    var pluginIndex = name.lastIndexOf('!');\n    if (pluginIndex != -1) {\n      var pluginName = name.substr(pluginIndex + 1);\n\n      // the name to locate is the plugin argument only\n      load.name = name.substr(0, pluginIndex);\n\n      var pluginLoader = loader.pluginLoader || loader;\n\n      // load the plugin module\n      // NB ideally should use pluginLoader.load for normalized,\n      //    but not currently working for some reason\n      return pluginLoader['import'](pluginName)\n      .then(function() {\n        var plugin = pluginLoader.get(pluginName);\n        plugin = plugin['default'] || plugin;\n\n        // allow plugins to opt-out of build\n        if (plugin.build === false && loader.pluginLoader)\n          load.metadata.build = false;\n\n        // store the plugin module itself on the metadata\n        load.metadata.plugin = plugin;\n        load.metadata.pluginName = pluginName;\n        load.metadata.pluginArgument = load.name;\n\n        // run plugin locate if given\n        if (plugin.locate)\n          return plugin.locate.call(loader, load);\n\n        // otherwise use standard locate without '.js' extension adding\n        else\n          return Promise.resolve(loader.locate(load))\n          .then(function(address) {\n            return address.substr(0, address.length - 3);\n          });\n      });\n    }\n\n    return loaderLocate.call(this, load);\n  }\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    if (load.metadata.build === false)\n      return '';\n    else if (load.metadata.plugin && load.metadata.plugin.fetch && !load.metadata.pluginFetchCalled) {\n      load.metadata.pluginFetchCalled = true;\n      return load.metadata.plugin.fetch.call(loader, load, loaderFetch);\n    }\n    else\n      return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.translate)\n      return Promise.resolve(load.metadata.plugin.translate.call(loader, load)).then(function(result) {\n        if (result)\n          load.source = result;\n        return loaderTranslate.call(loader, load);\n      });\n    else\n      return loaderTranslate.call(loader, load);\n  }\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n    if (load.metadata.plugin && load.metadata.plugin.instantiate)\n      return Promise.resolve(load.metadata.plugin.instantiate.call(loader, load)).then(function(result) {\n        load.metadata.format = 'defined';\n        load.metadata.execute = function() {\n          return result;\n        };\n        return loaderInstantiate.call(loader, load);\n      });\n    else if (load.metadata.plugin && load.metadata.plugin.build === false) {\n      load.metadata.format = 'defined';\n      load.metadata.deps.push(load.metadata.pluginName);\n      load.metadata.execute = function() {\n        return loader.newModule({});\n      };\n      return loaderInstantiate.call(loader, load);\n    }\n    else\n      return loaderInstantiate.call(loader, load);\n  }\n\n}"
  },
  {
    "path": "client/components/system.js/lib/extension-register.js",
    "content": "/*\n * Instantiate registry extension\n *\n * Supports Traceur System.register 'instantiate' output for loading ES6 as ES5.\n *\n * - Creates the loader.register function\n * - Also supports metadata.format = 'register' in instantiate for anonymous register modules\n * - Also supports metadata.deps, metadata.execute and metadata.executingRequire\n *     for handling dynamic modules alongside register-transformed ES6 modules\n *\n * Works as a standalone extension, but benefits from having a more \n * advanced __eval defined like in SystemJS polyfill-wrapper-end.js\n *\n * The code here replicates the ES6 linking groups algorithm to ensure that\n * circular ES6 compiled into System.register can work alongside circular AMD \n * and CommonJS, identically to the actual ES6 loader.\n *\n */\nfunction register(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n  if (typeof __eval == 'undefined')\n    __eval = 0 || eval; // uglify breaks without the 0 ||\n\n  // define exec for easy evaluation of a load record (load.name, load.source, load.address)\n  // main feature is source maps support handling\n  var curSystem;\n  function exec(load) {\n    var loader = this;\n    if (load.name == '@traceur') {\n      curSystem = System;\n    }\n    // support sourceMappingURL (efficiently)\n    var sourceMappingURL;\n    var lastLineIndex = load.source.lastIndexOf('\\n');\n    if (lastLineIndex != -1) {\n      if (load.source.substr(lastLineIndex + 1, 21) == '//# sourceMappingURL=') {\n        sourceMappingURL = load.source.substr(lastLineIndex + 22, load.source.length - lastLineIndex - 22);\n        if (typeof toAbsoluteURL != 'undefined')\n          sourceMappingURL = toAbsoluteURL(load.address, sourceMappingURL);\n      }\n    }\n\n    __eval(load.source, load.address, sourceMappingURL);\n\n    // traceur overwrites System and Module - write them back\n    if (load.name == '@traceur') {\n      loader.global.traceurSystem = loader.global.System;\n      loader.global.System = curSystem;\n    }\n  }\n  loader.__exec = exec;\n\n  function dedupe(deps) {\n    var newDeps = [];\n    for (var i = 0, l = deps.length; i < l; i++)\n      if (indexOf.call(newDeps, deps[i]) == -1)\n        newDeps.push(deps[i])\n    return newDeps;\n  }\n\n  /*\n   * There are two variations of System.register:\n   * 1. System.register for ES6 conversion (2-3 params) - System.register([name, ]deps, declare)\n   *    see https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained\n   *\n   * 2. System.register for dynamic modules (3-4 params) - System.register([name, ]deps, executingRequire, execute)\n   * the true or false statement \n   *\n   * this extension implements the linking algorithm for the two variations identical to the spec\n   * allowing compiled ES6 circular references to work alongside AMD and CJS circular references.\n   *\n   */\n  // loader.register sets loader.defined for declarative modules\n  var anonRegister;\n  var calledRegister;\n  function register(name, deps, declare, execute) {\n    if (typeof name != 'string') {\n      execute = declare;\n      declare = deps;\n      deps = name;\n      name = null;\n    }\n\n    calledRegister = true;\n    \n    var register;\n\n    // dynamic\n    if (typeof declare == 'boolean') {\n      register = {\n        declarative: false,\n        deps: deps,\n        execute: execute,\n        executingRequire: declare\n      };\n    }\n    else {\n      // ES6 declarative\n      register = {\n        declarative: true,\n        deps: deps,\n        declare: declare\n      };\n    }\n    \n    // named register\n    if (name) {\n      register.name = name;\n      // we never overwrite an existing define\n      if (!loader.defined[name])\n        loader.defined[name] = register; \n    }\n    // anonymous register\n    else if (register.declarative) {\n      if (anonRegister)\n        throw new TypeError('Multiple anonymous System.register calls in the same module file.');\n      anonRegister = register;\n    }\n  }\n  /*\n   * Registry side table - loader.defined\n   * Registry Entry Contains:\n   *    - name\n   *    - deps \n   *    - declare for declarative modules\n   *    - execute for dynamic modules, different to declarative execute on module\n   *    - executingRequire indicates require drives execution for circularity of dynamic modules\n   *    - declarative optional boolean indicating which of the above\n   *\n   * Can preload modules directly on System.defined['my/module'] = { deps, execute, executingRequire }\n   *\n   * Then the entry gets populated with derived information during processing:\n   *    - normalizedDeps derived from deps, created in instantiate\n   *    - groupIndex used by group linking algorithm\n   *    - evaluated indicating whether evaluation has happend\n   *    - module the module record object, containing:\n   *      - exports actual module exports\n   *      \n   *    Then for declarative only we track dynamic bindings with the records:\n   *      - name\n   *      - setters declarative setter functions\n   *      - exports actual module values\n   *      - dependencies, module records of dependencies\n   *      - importers, module records of dependents\n   *\n   * After linked and evaluated, entries are removed, declarative module records remain in separate\n   * module binding table\n   *\n   */\n\n  function defineRegister(loader) {\n    if (loader.register)\n      return;\n\n    loader.register = register;\n\n    if (!loader.defined)\n      loader.defined = {};\n    \n    // script injection mode calls this function synchronously on load\n    var onScriptLoad = loader.onScriptLoad;\n    loader.onScriptLoad = function(load) {\n      onScriptLoad(load);\n      // anonymous define\n      if (anonRegister)\n        load.metadata.entry = anonRegister;\n      \n      if (calledRegister) {\n        load.metadata.format = load.metadata.format || 'register';\n        load.metadata.registered = true;\n      }\n    }\n  }\n\n  defineRegister(loader);\n\n  function buildGroups(entry, loader, groups) {\n    groups[entry.groupIndex] = groups[entry.groupIndex] || [];\n\n    if (indexOf.call(groups[entry.groupIndex], entry) != -1)\n      return;\n\n    groups[entry.groupIndex].push(entry);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      \n      // not in the registry means already linked / ES6\n      if (!depEntry || depEntry.evaluated)\n        continue;\n      \n      // now we know the entry is in our unlinked linkage group\n      var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);\n\n      // the group index of an entry is always the maximum\n      if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {\n        \n        // if already in a group, remove from the old group\n        if (depEntry.groupIndex) {\n          groups[depEntry.groupIndex].splice(indexOf.call(groups[depEntry.groupIndex], depEntry), 1);\n\n          // if the old group is empty, then we have a mixed depndency cycle\n          if (groups[depEntry.groupIndex].length == 0)\n            throw new TypeError(\"Mixed dependency cycle detected\");\n        }\n\n        depEntry.groupIndex = depGroupIndex;\n      }\n\n      buildGroups(depEntry, loader, groups);\n    }\n  }\n\n  function link(name, loader) {\n    var startEntry = loader.defined[name];\n\n    startEntry.groupIndex = 0;\n\n    var groups = [];\n\n    buildGroups(startEntry, loader, groups);\n\n    var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;\n    for (var i = groups.length - 1; i >= 0; i--) {\n      var group = groups[i];\n      for (var j = 0; j < group.length; j++) {\n        var entry = group[j];\n\n        // link each group\n        if (curGroupDeclarative)\n          linkDeclarativeModule(entry, loader);\n        else\n          linkDynamicModule(entry, loader);\n      }\n      curGroupDeclarative = !curGroupDeclarative; \n    }\n  }\n\n  // module binding records\n  var moduleRecords = {};\n  function getOrCreateModuleRecord(name) {\n    return moduleRecords[name] || (moduleRecords[name] = {\n      name: name,\n      dependencies: [],\n      exports: {}, // start from an empty module and extend\n      importers: []\n    })\n  }\n\n  function linkDeclarativeModule(entry, loader) {\n    // only link if already not already started linking (stops at circular)\n    if (entry.module)\n      return;\n\n    var module = entry.module = getOrCreateModuleRecord(entry.name);\n    var exports = entry.module.exports;\n\n    var declaration = entry.declare.call(loader.global, function(name, value) {\n      module.locked = true;\n      exports[name] = value;\n\n      for (var i = 0, l = module.importers.length; i < l; i++) {\n        var importerModule = module.importers[i];\n        if (!importerModule.locked) {\n          var importerIndex = indexOf.call(importerModule.dependencies, module);\n          importerModule.setters[importerIndex](exports);\n        }\n      }\n\n      module.locked = false;\n      return value;\n    });\n    \n    module.setters = declaration.setters;\n    module.execute = declaration.execute;\n\n    if (!module.setters || !module.execute) {\n      throw new TypeError('Invalid System.register form for ' + entry.name);\n    }\n\n    // now link all the module dependencies\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      var depEntry = loader.defined[depName];\n      var depModule = moduleRecords[depName];\n\n      // work out how to set depExports based on scenarios...\n      var depExports;\n\n      if (depModule) {\n        depExports = depModule.exports;\n      }\n      // dynamic, already linked in our registry\n      else if (depEntry && !depEntry.declarative) {\n        depExports = { 'default': depEntry.module.exports, '__useDefault': true };\n      }\n      // in the loader registry\n      else if (!depEntry) {\n        depExports = loader.get(depName);\n      }\n      // we have an entry -> link\n      else {\n        linkDeclarativeModule(depEntry, loader);\n        depModule = depEntry.module;\n        depExports = depModule.exports;\n      }\n\n      // only declarative modules have dynamic bindings\n      if (depModule && depModule.importers) {\n        depModule.importers.push(module);\n        module.dependencies.push(depModule);\n      }\n      else {\n        module.dependencies.push(null);\n      }\n\n      // run the setter for this dependency\n      if (module.setters[i])\n        module.setters[i](depExports);\n    }\n  }\n\n  // An analog to loader.get covering execution of all three layers (real declarative, simulated declarative, simulated dynamic)\n  function getModule(name, loader) {\n    var exports;\n    var entry = loader.defined[name];\n\n    if (!entry) {\n      exports = loader.get(name);\n      if (!exports)\n        throw new Error('Unable to load dependency ' + name + '.');\n    }\n\n    else {\n      if (entry.declarative)\n        ensureEvaluated(name, [], loader);\n    \n      else if (!entry.evaluated)\n        linkDynamicModule(entry, loader);\n\n      exports = entry.module.exports;\n    }\n\n    if ((!entry || entry.declarative) && exports && exports.__useDefault)\n      return exports['default'];\n    \n    return exports;\n  }\n\n  function linkDynamicModule(entry, loader) {\n    if (entry.module)\n      return;\n\n    var exports = {};\n\n    var module = entry.module = { exports: exports, id: entry.name };\n\n    // AMD requires execute the tree first\n    if (!entry.executingRequire) {\n      for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n        var depName = entry.normalizedDeps[i];\n        var depEntry = loader.defined[depName];\n        if (depEntry)\n          linkDynamicModule(depEntry, loader);\n      }\n    }\n\n    // now execute\n    entry.evaluated = true;\n    var output = entry.execute.call(loader.global, function(name) {\n      for (var i = 0, l = entry.deps.length; i < l; i++) {\n        if (entry.deps[i] != name)\n          continue;\n        return getModule(entry.normalizedDeps[i], loader);\n      }\n      throw new TypeError('Module ' + name + ' not declared as a dependency.');\n    }, exports, module);\n    \n    if (output)\n      module.exports = output;\n  }\n\n  /*\n   * Given a module, and the list of modules for this current branch,\n   *  ensure that each of the dependencies of this module is evaluated\n   *  (unless one is a circular dependency already in the list of seen\n   *  modules, in which case we execute it)\n   *\n   * Then we evaluate the module itself depth-first left to right \n   * execution to match ES6 modules\n   */\n  function ensureEvaluated(moduleName, seen, loader) {\n    var entry = loader.defined[moduleName];\n\n    // if already seen, that means it's an already-evaluated non circular dependency\n    if (entry.evaluated || !entry.declarative)\n      return;\n\n    // this only applies to declarative modules which late-execute\n\n    seen.push(moduleName);\n\n    for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) {\n      var depName = entry.normalizedDeps[i];\n      if (indexOf.call(seen, depName) == -1) {\n        if (!loader.defined[depName])\n          loader.get(depName);\n        else\n          ensureEvaluated(depName, seen, loader);\n      }\n    }\n\n    if (entry.evaluated)\n      return;\n\n    entry.evaluated = true;\n    entry.module.execute.call(loader.global);\n  }\n\n  var registerRegEx = /System\\.register/;\n\n  var loaderFetch = loader.fetch;\n  loader.fetch = function(load) {\n    var loader = this;\n    defineRegister(loader);\n    if (loader.defined[load.name]) {\n      load.metadata.format = 'defined';\n      return '';\n    }\n    anonRegister = null;\n    calledRegister = false;\n    // the above get picked up by onScriptLoad\n    return loaderFetch.call(loader, load);\n  }\n\n  var loaderTranslate = loader.translate;\n  loader.translate = function(load) {\n    this.register = register;\n\n    this.__exec = exec;\n\n    load.metadata.deps = load.metadata.deps || [];\n\n    // we run the meta detection here (register is after meta)\n    return Promise.resolve(loaderTranslate.call(this, load)).then(function(source) {\n      \n      // dont run format detection for globals shimmed\n      // ideally this should be in the global extension, but there is\n      // currently no neat way to separate it\n      if (load.metadata.init || load.metadata.exports)\n        load.metadata.format = load.metadata.format || 'global';\n\n      // run detection for register format\n      if (load.metadata.format == 'register' || !load.metadata.format && load.source.match(registerRegEx))\n        load.metadata.format = 'register';\n      return source;\n    });\n  }\n\n\n  var loaderInstantiate = loader.instantiate;\n  loader.instantiate = function(load) {\n    var loader = this;\n\n    var entry;\n\n    // first we check if this module has already been defined in the registry\n    if (loader.defined[load.name]) {\n      entry = loader.defined[load.name];\n      entry.deps = entry.deps.concat(load.metadata.deps);\n    }\n\n    // picked up already by a script injection\n    else if (load.metadata.entry)\n      entry = load.metadata.entry;\n\n    // otherwise check if it is dynamic\n    else if (load.metadata.execute) {\n      entry = {\n        declarative: false,\n        deps: load.metadata.deps || [],\n        execute: load.metadata.execute,\n        executingRequire: load.metadata.executingRequire // NodeJS-style requires or not\n      };\n    }\n\n    // Contains System.register calls\n    else if (load.metadata.format == 'register') {\n      anonRegister = null;\n      calledRegister = false;\n\n      var System = loader.global.System = loader.global.System || loader;\n\n      var curRegister = System.register;\n      System.register = register;\n\n      loader.__exec(load);\n\n      System.register = curRegister;\n\n      if (anonRegister)\n        entry = anonRegister;\n\n      if (!entry && System.defined[load.name])\n        entry = System.defined[load.name];\n\n      if (!calledRegister && !load.metadata.registered)\n        throw new TypeError(load.name + ' detected as System.register but didn\\'t execute.');\n    }\n\n    // named bundles are just an empty module\n    if (!entry && load.metadata.format != 'es6')\n      return {\n        deps: [],\n        execute: function() {\n          return loader.newModule({});\n        }\n      };\n\n    // place this module onto defined for circular references\n    if (entry)\n      loader.defined[load.name] = entry;\n\n    // no entry -> treat as ES6\n    else\n      return loaderInstantiate.call(this, load);\n\n    entry.deps = dedupe(entry.deps);\n    entry.name = load.name;\n\n    // first, normalize all dependencies\n    var normalizePromises = [];\n    for (var i = 0, l = entry.deps.length; i < l; i++)\n      normalizePromises.push(Promise.resolve(loader.normalize(entry.deps[i], load.name)));\n\n    return Promise.all(normalizePromises).then(function(normalizedDeps) {\n\n      entry.normalizedDeps = normalizedDeps;\n\n      return {\n        deps: entry.deps,\n        execute: function() {\n          // recursively ensure that the module and all its \n          // dependencies are linked (with dependency group handling)\n          link(load.name, loader);\n\n          // now handle dependency execution in correct order\n          ensureEvaluated(load.name, [], loader);\n\n          // remove from the registry\n          loader.defined[load.name] = undefined;\n\n          var module = loader.newModule(entry.declarative ? entry.module.exports : { 'default': entry.module.exports, '__useDefault': true });\n\n          // return the defined module object\n          return module;\n        }\n      };\n    });\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-scriptLoader.js",
    "content": "/*\n * Script tag fetch\n */\n\nfunction scriptLoader(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var head = document.getElementsByTagName('head')[0];\n\n  // call this functione everytime a wrapper executes\n  loader.onScriptLoad = function() {};\n\n  // override fetch to use script injection\n  loader.fetch = function(load) {\n    return new Promise(function(resolve, reject) {\n      var s = document.createElement('script');\n      s.async = true;\n\n      function complete(evt) {\n        if (s.readyState && s.readyState != 'loaded' && s.readyState != 'complete')\n          return;\n        cleanup();\n\n        // this runs synchronously after execution\n        // we now need to tell the wrapper handlers that\n        // this load record has just executed\n        loader.onScriptLoad(load);\n\n        // if nothing registered, then something went wrong\n        if (!load.metadata.registered)\n          reject(load.address + ' did not call System.register or AMD define');\n\n        resolve('');\n      }\n\n      function error(evt) {\n        cleanup();\n        reject(evt);\n      }\n\n      if (s.attachEvent) {\n        s.attachEvent('onreadystatechange', complete);\n      }\n      else {\n        s.addEventListener('load', complete, false);\n        s.addEventListener('error', error, false);\n      }\n\n      s.src = load.address;\n      head.appendChild(s);\n\n      function cleanup() {\n        if (s.detachEvent)\n          s.detachEvent('onreadystatechange', complete);\n        else {\n          s.removeEventListener('load', complete, false);\n          s.removeEventListener('error', error, false);\n        }\n        head.removeChild(s);\n      }\n    });\n  }\n\n  loader.scriptLoader = true;\n}\n"
  },
  {
    "path": "client/components/system.js/lib/extension-versions.js",
    "content": "/*\n  SystemJS Semver Version Addon\n  \n  1. Uses Semver convention for major and minor forms\n\n  Supports requesting a module from a package that contains a version suffix\n  with the following semver ranges:\n    module       - any version\n    module@1     - major version 1, any minor (not prerelease)\n    module@1.2   - minor version 1.2, any patch (not prerelease)\n    module@1.2.3 - exact version\n\n  It is assumed that these modules are provided by the server / file system.\n\n  First checks the already-requested packages to see if there are any packages \n  that would match the same package and version range.\n\n  This provides a greedy algorithm as a simple fix for sharing version-managed\n  dependencies as much as possible, which can later be optimized through version\n  hint configuration created out of deeper version tree analysis.\n  \n  2. Semver-compatibility syntax (caret operator - ^)\n\n  Compatible version request support is then also provided for:\n\n    module@^1.2.3        - module@1, >=1.2.3\n    module@^1.2          - module@1, >=1.2.0\n    module@^1            - module@1\n    module@^0.5.3        - module@0.5, >= 0.5.3\n    module@^0.0.1        - module@0.0.1\n\n  The ^ symbol is always normalized out to a normal version request.\n\n  This provides comprehensive semver compatibility.\n  \n  3. System.versions version hints and version report\n\n  Note this addon should be provided after all other normalize overrides.\n\n  The full list of versions can be found at System.versions providing an insight\n  into any possible version forks.\n\n  It is also possible to create version solution hints on the System global:\n\n  System.versions = {\n    jquery: ['1.9.2', '2.0.3'],\n    bootstrap: '3.0.1'\n  };\n\n  Versions can be an array or string for a single version.\n\n  When a matching semver request is made (jquery@1.9, jquery@1, bootstrap@3)\n  they will be converted to the latest version match contained here, if present.\n\n  Prereleases in this versions list are also allowed to satisfy ranges when present.\n*/\n\nfunction versions(loader) {\n  if (typeof indexOf == 'undefined')\n    indexOf = Array.prototype.indexOf;\n\n  var semverRegEx = /^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:-([\\da-z-]+(?:\\.[\\da-z-]+)*)(?:\\+([\\da-z-]+(?:\\.[\\da-z-]+)*))?)?)?)?$/i;\n  var numRegEx = /^\\d+$/;\n\n  function toInt(num) {\n    return parseInt(num, 10);\n  }\n\n  function parseSemver(v) {\n    var semver = v.match(semverRegEx);\n    if (!semver)\n      return {\n        tag: v\n      };\n    else\n      return {\n        major: toInt(semver[1]),\n        minor: toInt(semver[2]),\n        patch: toInt(semver[3]),\n        pre: semver[4] && semver[4].split('.')\n      };\n  }\n\n  var parts = ['major', 'minor', 'patch'];\n  function semverCompareParsed(v1, v2) {\n    // not semvers - tags have equal precedence\n    if (v1.tag && v2.tag)\n      return 0;\n\n    // semver beats non-semver\n    if (v1.tag)\n      return -1;\n    if (v2.tag)\n      return 1;\n\n    // compare version numbers\n    for (var i = 0; i < parts.length; i++) {\n      var part = parts[i];\n      var part1 = v1[part];\n      var part2 = v2[part];\n      if (part1 == part2)\n        continue;\n      if (isNaN(part1))\n        return -1;\n      if (isNaN(part2))\n        return 1;\n      return part1 > part2 ? 1 : -1;\n    }\n\n    if (!v1.pre && !v2.pre)\n      return 0;\n\n    if (!v1.pre)\n      return 1;\n    if (!v2.pre)\n      return -1;\n\n    // prerelease comparison\n    for (var i = 0, l = Math.min(v1.pre.length, v2.pre.length); i < l; i++) {\n      if (v1.pre[i] == v2.pre[i])\n        continue;\n\n      var isNum1 = v1.pre[i].match(numRegEx);\n      var isNum2 = v2.pre[i].match(numRegEx);\n      \n      // numeric has lower precedence\n      if (isNum1 && !isNum2)\n        return -1;\n      if (isNum2 && !isNum1)\n        return 1;\n\n      // compare parts\n      if (isNum1 && isNum2)\n        return toInt(v1.pre[i]) > toInt(v2.pre[i]) ? 1 : -1;\n      else\n        return v1.pre[i] > v2.pre[i] ? 1 : -1;\n    }\n\n    if (v1.pre.length == v2.pre.length)\n      return 0;\n\n    // more pre-release fields win if equal\n    return v1.pre.length > v2.pre.length ? 1 : -1;\n  }\n\n  // match against a parsed range object\n  // saves operation repetition\n  // doesn't support tags\n  // if not semver or fuzzy, assume exact\n  function matchParsed(range, version) {\n    var rangeVersion = range.version;\n\n    if (rangeVersion.tag)\n      return rangeVersion.tag == version.tag;\n\n    // if the version is less than the range, it's not a match\n    if (semverCompareParsed(rangeVersion, version) == 1)\n      return false;\n\n    // now we just have to check that the version isn't too high for the range\n    if (isNaN(version.minor) || isNaN(version.patch))\n      return false;\n\n    // if the version has a prerelease, ensure the range version has a prerelease in it\n    // and that we match the range version up to the prerelease exactly\n    if (version.pre) {\n      if (!(rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch))\n        return false;\n      return range.semver || range.fuzzy || rangeVersion.pre.join('.') == version.pre.join('.');\n    }\n\n    // check semver range\n    if (range.semver) {\n      // ^0\n      if (rangeVersion.major == 0 && isNaN(rangeVersion.minor))\n        return version.major < 1;\n      // ^1..\n      else if (rangeVersion.major >= 1)\n        return rangeVersion.major == version.major;\n      // ^0.1, ^0.2\n      else if (rangeVersion.minor >= 1)\n        return rangeVersion.minor == version.minor;\n      // ^0.0.0\n      else\n        return (rangeVersion.patch || 0) == version.patch;\n    }\n\n    // check fuzzy range\n    if (range.fuzzy)\n      return version.major == rangeVersion.major && version.minor < (rangeVersion.minor || 0) + 1;\n\n    // exact match\n    // eg 001.002.003 matches 1.2.3\n    return !rangeVersion.pre && rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch;\n  }\n\n  /*\n   * semver       - is this a semver range\n   * fuzzy        - is this a fuzzy range\n   * version      - the parsed version object\n   */\n  function parseRange(range) {\n    var rangeObj = {};\n\n    ((rangeObj.semver = range.substr(0, 1) == '^') \n        || (rangeObj.fuzzy = range.substr(0, 1) == '~')\n    ) && (range = range.substr(1));\n\n    var rangeVersion = rangeObj.version = parseSemver(range);\n\n    if (rangeVersion.tag)\n      return rangeObj;\n\n    // 0, 0.1 behave like ~0, ~0.1\n    if (!rangeObj.fuzzy && !rangeObj.semver && (isNaN(rangeVersion.minor) || isNaN(rangeVersion.patch)))\n      rangeObj.fuzzy = true;\n\n    // ~1, ~0 behave like ^1, ^0\n    if (rangeObj.fuzzy && isNaN(rangeVersion.minor)) {\n      rangeObj.semver = true;\n      rangeObj.fuzzy = false;\n    }\n\n    // ^0.0 behaves like ~0.0\n    if (rangeObj.semver && !isNaN(rangeVersion.minor) && isNaN(rangeVersion.patch)) {\n      rangeObj.semver = false;\n      rangeObj.fuzzy = true;\n    }\n\n    return rangeObj;\n  }\n\n  function semverCompare(v1, v2) {\n    return semverCompareParsed(parseSemver(v1), parseSemver(v2));\n  }\n\n  loader.versions = loader.versions || {};\n\n  var loaderNormalize = loader.normalize;\n  // NOW use modified match algorithm if possible\n  loader.normalize = function(name, parentName, parentAddress) {\n    if (!loader.versions)\n      loader.versions = {};\n    var packageVersions = this.versions;\n\n    // strip the version before applying map config\n    var stripVersion, stripSubPathLength;\n    if (name.indexOf('@') > 0) {\n      var versionIndex = name.lastIndexOf('@');\n      var parts = name.substr(versionIndex + 1, name.length - versionIndex - 1).split('/');\n      stripVersion = parts[0];\n      stripSubPathLength = parts.length;\n      name = name.substr(0, versionIndex) + name.substr(versionIndex + stripVersion.length + 1, name.length - versionIndex - stripVersion.length - 1);\n    }\n\n    // run all other normalizers first\n    return Promise.resolve(loaderNormalize.call(this, name, parentName, parentAddress)).then(function(normalized) {\n      \n      var index = normalized.indexOf('@');\n\n      // if we stripped a version, and it still has no version, add it back\n      if (stripVersion && (index == -1 || index == 0)) {\n        var parts = normalized.split('/');\n        parts[parts.length - stripSubPathLength] += '@' + stripVersion;\n        normalized = parts.join('/');\n        index = normalized.indexOf('@');\n      }\n\n      // see if this module corresponds to a package already in our versioned packages list\n      \n      // no version specified - check against the list (given we don't know the package name)\n      var nextChar, versions;\n      if (index == -1 || index == 0) {\n        for (var p in packageVersions) {\n          versions = packageVersions[p];\n          if (normalized.substr(0, p.length) != p)\n            continue;\n\n          nextChar = normalized.substr(p.length, 1);\n\n          if (nextChar && nextChar != '/')\n            continue;\n\n          // match -> take latest version\n          return p + '@' + (typeof versions == 'string' ? versions : versions[versions.length - 1]) + normalized.substr(p.length);\n        }\n        return normalized;\n      }\n\n      // get the version info\n      var packageName = normalized.substr(0, index);\n      var range = normalized.substr(index + 1).split('/')[0];\n      var rangeLength = range.length;\n      var parsedRange = parseRange(normalized.substr(index + 1).split('/')[0]);\n      versions = packageVersions[normalized.substr(0, index)] || [];\n      if (typeof versions == 'string')\n        versions = [versions];\n\n      // find a match in our version list\n      for (var i = versions.length - 1; i >= 0; i--) {\n        if (matchParsed(parsedRange, parseSemver(versions[i])))\n          return packageName + '@' + versions[i] + normalized.substr(index + rangeLength + 1);\n      }\n\n      // no match found -> send a request to the server\n      var versionRequest;\n      if (parsedRange.semver) {\n        versionRequest = parsedRange.version.major == 0 && !isNaN(parsedRange.version.minor) ? '0.' + parsedRange.version.minor : parsedRange.version.major;\n      }\n      else if (parsedRange.fuzzy) {\n        versionRequest = parsedRange.version.major + '.' + parsedRange.version.minor;\n      }\n      else {\n        versionRequest = range;\n        versions.push(range);\n        versions.sort(semverCompare);\n        packageVersions[packageName] = versions.length == 1 ? versions[0] : versions;\n      }\n\n      return packageName + '@' + versionRequest + normalized.substr(index + rangeLength + 1);\n    });\n  }\n}\n"
  },
  {
    "path": "client/components/system.js/lib/polyfill-wrapper-end.js",
    "content": "  if (!System.paths['@traceur'])\n    System.paths['@traceur'] = $__curScript && $__curScript.getAttribute('data-traceur-src')\n      || ($__curScript && $__curScript.src \n        ? $__curScript.src.substr(0, $__curScript.src.lastIndexOf('/') + 1) \n        : System.baseURL + (System.baseURL.lastIndexOf('/') == System.baseURL.length - 1 ? '' : '/')\n        ) + 'traceur.js';\n};\n\nvar $__curScript, __eval;\n\n(function() {\n\n  var doEval;\n\n  __eval = function(source, address, sourceMap) {\n    source += '\\n//# sourceURL=' + address + (sourceMap ? '\\n//# sourceMappingURL=' + sourceMap : '');\n\n    try {\n      doEval(source);\n    }\n    catch(e) {\n      var msg = 'Error evaluating ' + address + '\\n';\n      if (e instanceof Error)\n        e.message = msg + e.message;\n      else\n        e = msg + e;\n      throw e;\n    }\n  };\n\n  var isWorker = typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope;\n  var isBrowser = typeof window != 'undefined';\n\n  if (isBrowser) {\n    var head;\n\n    var scripts = document.getElementsByTagName('script');\n    $__curScript = scripts[scripts.length - 1];\n\n    // globally scoped eval for the browser\n    doEval = function(source) {\n      if (!head)\n        head = document.head || document.body || document.documentElement;\n\n      var script = document.createElement('script');\n      script.text = source;\n      var onerror = window.onerror;\n      var e;\n      window.onerror = function(_e) {\n        e = _e;\n      }\n      head.appendChild(script);\n      head.removeChild(script);\n      window.onerror = onerror;\n      if (e)\n        throw e;\n    }\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      // determine the current script path as the base path\n      var curPath = $__curScript.src;\n      var basePath = curPath.substr(0, curPath.lastIndexOf('/') + 1);\n      document.write(\n        '<' + 'script type=\"text/javascript\" src=\"' + basePath + 'es6-module-loader.js\" data-init=\"upgradeSystemLoader\">' + '<' + '/script>'\n      );\n    }\n    else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else if(isWorker) {\n    doEval = function(source) {\n      try {\n        eval(source);\n      } catch(e) {\n        throw e;\n      }\n    };\n\n    if (!$__global.System || !$__global.LoaderPolyfill) {\n      var basePath = '';\n      try {\n        throw new TypeError('Unable to get Worker base path.');\n      } catch(err) {\n        var idx = err.stack.indexOf('at ') + 3;\n        var withSystem = err.stack.substr(idx, err.stack.substr(idx).indexOf('\\n'));\n        basePath = withSystem.substr(0, withSystem.lastIndexOf('/') + 1);\n      }\n      importScripts(basePath + 'es6-module-loader.js');\n    } else {\n      $__global.upgradeSystemLoader();\n    }\n  }\n  else {\n    var es6ModuleLoader = require('es6-module-loader');\n    $__global.System = es6ModuleLoader.System;\n    $__global.Loader = es6ModuleLoader.Loader;\n    $__global.upgradeSystemLoader();\n    module.exports = $__global.System;\n\n    // global scoped eval for node\n    var vm = require('vm');\n    doEval = function(source, address, sourceMap) {\n      vm.runInThisContext(source);\n    }\n  }\n})();\n\n})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ?\n                                           self : global));\n"
  },
  {
    "path": "client/components/system.js/lib/polyfill-wrapper-start.js",
    "content": "(function($__global) {\n\n$__global.upgradeSystemLoader = function() {\n  $__global.upgradeSystemLoader = undefined;\n\n  // indexOf polyfill for IE\n  var indexOf = Array.prototype.indexOf || function(item) {\n    for (var i = 0, l = this.length; i < l; i++)\n      if (this[i] === item)\n        return i;\n    return -1;\n  }\n\n  // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850\n  function parseURI(url) {\n    var m = String(url).replace(/^\\s+|\\s+$/g, '').match(/^([^:\\/?#]+:)?(\\/\\/(?:[^:@\\/?#]*(?::[^:@\\/?#]*)?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    // authority = '//' + user + ':' + pass '@' + hostname + ':' port\n    return (m ? {\n      href     : m[0] || '',\n      protocol : m[1] || '',\n      authority: m[2] || '',\n      host     : m[3] || '',\n      hostname : m[4] || '',\n      port     : m[5] || '',\n      pathname : m[6] || '',\n      search   : m[7] || '',\n      hash     : m[8] || ''\n    } : null);\n  }\n  function toAbsoluteURL(base, href) {\n    function removeDotSegments(input) {\n      var output = [];\n      input.replace(/^(\\.\\.?(\\/|$))+/, '')\n        .replace(/\\/(\\.(\\/|$))+/g, '/')\n        .replace(/\\/\\.\\.$/, '/../')\n        .replace(/\\/?[^\\/]*/g, function (p) {\n          if (p === '/..')\n            output.pop();\n          else\n            output.push(p);\n      });\n      return output.join('').replace(/^\\//, input.charAt(0) === '/' ? '/' : '');\n    }\n\n    href = parseURI(href || '');\n    base = parseURI(base || '');\n\n    return !href || !base ? null : (href.protocol || base.protocol) +\n      (href.protocol || href.authority ? href.authority : base.authority) +\n      removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +\n      (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n      href.hash;\n  }\n\n  // clone the original System loader\n  var System;\n  (function() {\n    var originalSystem = $__global.System;\n    System = $__global.System = new LoaderPolyfill(originalSystem);\n    System.baseURL = originalSystem.baseURL;\n    System.paths = { '*': '*.js' };\n    System.originalSystem = originalSystem;\n  })();\n\n  System.noConflict = function() {\n    $__global.SystemJS = System;\n    $__global.System = System.originalSystem;\n  }\n\n  \n"
  },
  {
    "path": "client/components/traceur/.bower.json",
    "content": "{\n  \"name\": \"traceur\",\n  \"version\": \"0.0.74\",\n  \"main\": \"./traceur.js\",\n  \"ignore\": [\n    \"node_modules\",\n    \"Gruntfile.js\",\n    \"*.json\",\n    \".*\"\n  ],\n  \"homepage\": \"https://github.com/jmcriffey/bower-traceur\",\n  \"_release\": \"0.0.74\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.0.74\",\n    \"commit\": \"7d65a389772e712cee729251511b12e49d2c673d\"\n  },\n  \"_source\": \"git://github.com/jmcriffey/bower-traceur.git\",\n  \"_target\": \"0.0.74\",\n  \"_originalSource\": \"traceur\"\n}"
  },
  {
    "path": "client/components/traceur/README.md",
    "content": "# bower-traceur\n\nThis repo is for distribution on `bower`. The source for this module is in the\n[main traceur repo](https://github.com/google/traceur-compiler/).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nInstall with `bower`:\n\n```shell\nbower install traceur\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/traceur/traceur.js\"></script>\n```\n\n## License\n\nCopyright 2012 Traceur Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "client/components/traceur/bower.json",
    "content": "{\n    \"name\": \"traceur\",\n    \"version\": \"0.0.74\",\n    \"main\": \"./traceur.js\",\n    \"ignore\": [\n        \"node_modules\",\n        \"Gruntfile.js\",\n        \"*.json\",\n        \".*\"\n    ]\n}\n"
  },
  {
    "path": "client/components/traceur/traceur.js",
    "content": "(function(global) {\n  'use strict';\n  if (global.$traceurRuntime) {\n    return;\n  }\n  var $Object = Object;\n  var $TypeError = TypeError;\n  var $create = $Object.create;\n  var $defineProperties = $Object.defineProperties;\n  var $defineProperty = $Object.defineProperty;\n  var $freeze = $Object.freeze;\n  var $getOwnPropertyDescriptor = $Object.getOwnPropertyDescriptor;\n  var $getOwnPropertyNames = $Object.getOwnPropertyNames;\n  var $keys = $Object.keys;\n  var $hasOwnProperty = $Object.prototype.hasOwnProperty;\n  var $toString = $Object.prototype.toString;\n  var $preventExtensions = Object.preventExtensions;\n  var $seal = Object.seal;\n  var $isExtensible = Object.isExtensible;\n  function nonEnum(value) {\n    return {\n      configurable: true,\n      enumerable: false,\n      value: value,\n      writable: true\n    };\n  }\n  var method = nonEnum;\n  var counter = 0;\n  function newUniqueString() {\n    return '__$' + Math.floor(Math.random() * 1e9) + '$' + ++counter + '$__';\n  }\n  var symbolInternalProperty = newUniqueString();\n  var symbolDescriptionProperty = newUniqueString();\n  var symbolDataProperty = newUniqueString();\n  var symbolValues = $create(null);\n  var privateNames = $create(null);\n  function isPrivateName(s) {\n    return privateNames[s];\n  }\n  function createPrivateName() {\n    var s = newUniqueString();\n    privateNames[s] = true;\n    return s;\n  }\n  function isShimSymbol(symbol) {\n    return typeof symbol === 'object' && symbol instanceof SymbolValue;\n  }\n  function typeOf(v) {\n    if (isShimSymbol(v))\n      return 'symbol';\n    return typeof v;\n  }\n  function Symbol(description) {\n    var value = new SymbolValue(description);\n    if (!(this instanceof Symbol))\n      return value;\n    throw new TypeError('Symbol cannot be new\\'ed');\n  }\n  $defineProperty(Symbol.prototype, 'constructor', nonEnum(Symbol));\n  $defineProperty(Symbol.prototype, 'toString', method(function() {\n    var symbolValue = this[symbolDataProperty];\n    if (!getOption('symbols'))\n      return symbolValue[symbolInternalProperty];\n    if (!symbolValue)\n      throw TypeError('Conversion from symbol to string');\n    var desc = symbolValue[symbolDescriptionProperty];\n    if (desc === undefined)\n      desc = '';\n    return 'Symbol(' + desc + ')';\n  }));\n  $defineProperty(Symbol.prototype, 'valueOf', method(function() {\n    var symbolValue = this[symbolDataProperty];\n    if (!symbolValue)\n      throw TypeError('Conversion from symbol to string');\n    if (!getOption('symbols'))\n      return symbolValue[symbolInternalProperty];\n    return symbolValue;\n  }));\n  function SymbolValue(description) {\n    var key = newUniqueString();\n    $defineProperty(this, symbolDataProperty, {value: this});\n    $defineProperty(this, symbolInternalProperty, {value: key});\n    $defineProperty(this, symbolDescriptionProperty, {value: description});\n    freeze(this);\n    symbolValues[key] = this;\n  }\n  $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(Symbol));\n  $defineProperty(SymbolValue.prototype, 'toString', {\n    value: Symbol.prototype.toString,\n    enumerable: false\n  });\n  $defineProperty(SymbolValue.prototype, 'valueOf', {\n    value: Symbol.prototype.valueOf,\n    enumerable: false\n  });\n  var hashProperty = createPrivateName();\n  var hashPropertyDescriptor = {value: undefined};\n  var hashObjectProperties = {\n    hash: {value: undefined},\n    self: {value: undefined}\n  };\n  var hashCounter = 0;\n  function getOwnHashObject(object) {\n    var hashObject = object[hashProperty];\n    if (hashObject && hashObject.self === object)\n      return hashObject;\n    if ($isExtensible(object)) {\n      hashObjectProperties.hash.value = hashCounter++;\n      hashObjectProperties.self.value = object;\n      hashPropertyDescriptor.value = $create(null, hashObjectProperties);\n      $defineProperty(object, hashProperty, hashPropertyDescriptor);\n      return hashPropertyDescriptor.value;\n    }\n    return undefined;\n  }\n  function freeze(object) {\n    getOwnHashObject(object);\n    return $freeze.apply(this, arguments);\n  }\n  function preventExtensions(object) {\n    getOwnHashObject(object);\n    return $preventExtensions.apply(this, arguments);\n  }\n  function seal(object) {\n    getOwnHashObject(object);\n    return $seal.apply(this, arguments);\n  }\n  freeze(SymbolValue.prototype);\n  function isSymbolString(s) {\n    return symbolValues[s] || privateNames[s];\n  }\n  function toProperty(name) {\n    if (isShimSymbol(name))\n      return name[symbolInternalProperty];\n    return name;\n  }\n  function removeSymbolKeys(array) {\n    var rv = [];\n    for (var i = 0; i < array.length; i++) {\n      if (!isSymbolString(array[i])) {\n        rv.push(array[i]);\n      }\n    }\n    return rv;\n  }\n  function getOwnPropertyNames(object) {\n    return removeSymbolKeys($getOwnPropertyNames(object));\n  }\n  function keys(object) {\n    return removeSymbolKeys($keys(object));\n  }\n  function getOwnPropertySymbols(object) {\n    var rv = [];\n    var names = $getOwnPropertyNames(object);\n    for (var i = 0; i < names.length; i++) {\n      var symbol = symbolValues[names[i]];\n      if (symbol) {\n        rv.push(symbol);\n      }\n    }\n    return rv;\n  }\n  function getOwnPropertyDescriptor(object, name) {\n    return $getOwnPropertyDescriptor(object, toProperty(name));\n  }\n  function hasOwnProperty(name) {\n    return $hasOwnProperty.call(this, toProperty(name));\n  }\n  function getOption(name) {\n    return global.traceur && global.traceur.options[name];\n  }\n  function defineProperty(object, name, descriptor) {\n    if (isShimSymbol(name)) {\n      name = name[symbolInternalProperty];\n    }\n    $defineProperty(object, name, descriptor);\n    return object;\n  }\n  function polyfillObject(Object) {\n    $defineProperty(Object, 'defineProperty', {value: defineProperty});\n    $defineProperty(Object, 'getOwnPropertyNames', {value: getOwnPropertyNames});\n    $defineProperty(Object, 'getOwnPropertyDescriptor', {value: getOwnPropertyDescriptor});\n    $defineProperty(Object.prototype, 'hasOwnProperty', {value: hasOwnProperty});\n    $defineProperty(Object, 'freeze', {value: freeze});\n    $defineProperty(Object, 'preventExtensions', {value: preventExtensions});\n    $defineProperty(Object, 'seal', {value: seal});\n    $defineProperty(Object, 'keys', {value: keys});\n  }\n  function exportStar(object) {\n    for (var i = 1; i < arguments.length; i++) {\n      var names = $getOwnPropertyNames(arguments[i]);\n      for (var j = 0; j < names.length; j++) {\n        var name = names[j];\n        if (isSymbolString(name))\n          continue;\n        (function(mod, name) {\n          $defineProperty(object, name, {\n            get: function() {\n              return mod[name];\n            },\n            enumerable: true\n          });\n        })(arguments[i], names[j]);\n      }\n    }\n    return object;\n  }\n  function isObject(x) {\n    return x != null && (typeof x === 'object' || typeof x === 'function');\n  }\n  function toObject(x) {\n    if (x == null)\n      throw $TypeError();\n    return $Object(x);\n  }\n  function checkObjectCoercible(argument) {\n    if (argument == null) {\n      throw new TypeError('Value cannot be converted to an Object');\n    }\n    return argument;\n  }\n  var path = typeof require !== 'undefined' && require('path');\n  function relativeRequire(callerPath, requiredPath) {\n    function isDirectory(path) {\n      return (path.slice(-1) === '/');\n    }\n    function isAbsolute(path) {\n      return (path.charAt(0) === '/');\n    }\n    function isRelative(path) {\n      return (path.charAt(0) === '.');\n    }\n    if (isDirectory(requiredPath) || isAbsolute(requiredPath))\n      return;\n    return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath);\n  }\n  function polyfillSymbol(global, Symbol) {\n    if (!global.Symbol) {\n      global.Symbol = Symbol;\n      Object.getOwnPropertySymbols = getOwnPropertySymbols;\n    }\n    if (!global.Symbol.iterator) {\n      global.Symbol.iterator = Symbol('Symbol.iterator');\n    }\n  }\n  function setupGlobals(global) {\n    polyfillSymbol(global, Symbol);\n    global.Reflect = global.Reflect || {};\n    global.Reflect.global = global.Reflect.global || global;\n    polyfillObject(global.Object);\n  }\n  setupGlobals(global);\n  global.$traceurRuntime = {\n    checkObjectCoercible: checkObjectCoercible,\n    createPrivateName: createPrivateName,\n    defineProperties: $defineProperties,\n    defineProperty: $defineProperty,\n    exportStar: exportStar,\n    getOwnHashObject: getOwnHashObject,\n    getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n    getOwnPropertyNames: $getOwnPropertyNames,\n    isObject: isObject,\n    isPrivateName: isPrivateName,\n    isSymbolString: isSymbolString,\n    keys: $keys,\n    setupGlobals: setupGlobals,\n    require: relativeRequire,\n    toObject: toObject,\n    toProperty: toProperty,\n    typeof: typeOf\n  };\n})(typeof global !== 'undefined' ? global : this);\n(function() {\n  'use strict';\n  var path = typeof require !== 'undefined' && require('path');\n  function relativeRequire(callerPath, requiredPath) {\n    function isDirectory(path) {\n      return path.slice(-1) === '/';\n    }\n    function isAbsolute(path) {\n      return path[0] === '/';\n    }\n    function isRelative(path) {\n      return path[0] === '.';\n    }\n    if (isDirectory(requiredPath) || isAbsolute(requiredPath))\n      return;\n    return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath);\n  }\n  $traceurRuntime.require = relativeRequire;\n})();\n(function() {\n  'use strict';\n  function spread() {\n    var rv = [],\n        j = 0,\n        iterResult;\n    for (var i = 0; i < arguments.length; i++) {\n      var valueToSpread = $traceurRuntime.checkObjectCoercible(arguments[i]);\n      if (typeof valueToSpread[$traceurRuntime.toProperty(Symbol.iterator)] !== 'function') {\n        throw new TypeError('Cannot spread non-iterable object.');\n      }\n      var iter = valueToSpread[$traceurRuntime.toProperty(Symbol.iterator)]();\n      while (!(iterResult = iter.next()).done) {\n        rv[j++] = iterResult.value;\n      }\n    }\n    return rv;\n  }\n  $traceurRuntime.spread = spread;\n})();\n(function() {\n  'use strict';\n  var $Object = Object;\n  var $TypeError = TypeError;\n  var $create = $Object.create;\n  var $defineProperties = $traceurRuntime.defineProperties;\n  var $defineProperty = $traceurRuntime.defineProperty;\n  var $getOwnPropertyDescriptor = $traceurRuntime.getOwnPropertyDescriptor;\n  var $getOwnPropertyNames = $traceurRuntime.getOwnPropertyNames;\n  var $getPrototypeOf = Object.getPrototypeOf;\n  var $__0 = Object,\n      getOwnPropertyNames = $__0.getOwnPropertyNames,\n      getOwnPropertySymbols = $__0.getOwnPropertySymbols;\n  function superDescriptor(homeObject, name) {\n    var proto = $getPrototypeOf(homeObject);\n    do {\n      var result = $getOwnPropertyDescriptor(proto, name);\n      if (result)\n        return result;\n      proto = $getPrototypeOf(proto);\n    } while (proto);\n    return undefined;\n  }\n  function superConstructor(ctor) {\n    return ctor.__proto__;\n  }\n  function superCall(self, homeObject, name, args) {\n    return superGet(self, homeObject, name).apply(self, args);\n  }\n  function superGet(self, homeObject, name) {\n    var descriptor = superDescriptor(homeObject, name);\n    if (descriptor) {\n      if (!descriptor.get)\n        return descriptor.value;\n      return descriptor.get.call(self);\n    }\n    return undefined;\n  }\n  function superSet(self, homeObject, name, value) {\n    var descriptor = superDescriptor(homeObject, name);\n    if (descriptor && descriptor.set) {\n      descriptor.set.call(self, value);\n      return value;\n    }\n    throw $TypeError((\"super has no setter '\" + name + \"'.\"));\n  }\n  function getDescriptors(object) {\n    var descriptors = {};\n    var names = getOwnPropertyNames(object);\n    for (var i = 0; i < names.length; i++) {\n      var name = names[i];\n      descriptors[name] = $getOwnPropertyDescriptor(object, name);\n    }\n    var symbols = getOwnPropertySymbols(object);\n    for (var i = 0; i < symbols.length; i++) {\n      var symbol = symbols[i];\n      descriptors[$traceurRuntime.toProperty(symbol)] = $getOwnPropertyDescriptor(object, $traceurRuntime.toProperty(symbol));\n    }\n    return descriptors;\n  }\n  function createClass(ctor, object, staticObject, superClass) {\n    $defineProperty(object, 'constructor', {\n      value: ctor,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n    if (arguments.length > 3) {\n      if (typeof superClass === 'function')\n        ctor.__proto__ = superClass;\n      ctor.prototype = $create(getProtoParent(superClass), getDescriptors(object));\n    } else {\n      ctor.prototype = object;\n    }\n    $defineProperty(ctor, 'prototype', {\n      configurable: false,\n      writable: false\n    });\n    return $defineProperties(ctor, getDescriptors(staticObject));\n  }\n  function getProtoParent(superClass) {\n    if (typeof superClass === 'function') {\n      var prototype = superClass.prototype;\n      if ($Object(prototype) === prototype || prototype === null)\n        return superClass.prototype;\n      throw new $TypeError('super prototype must be an Object or null');\n    }\n    if (superClass === null)\n      return null;\n    throw new $TypeError((\"Super expression must either be null or a function, not \" + typeof superClass + \".\"));\n  }\n  function defaultSuperCall(self, homeObject, args) {\n    if ($getPrototypeOf(homeObject) !== null)\n      superCall(self, homeObject, 'constructor', args);\n  }\n  $traceurRuntime.createClass = createClass;\n  $traceurRuntime.defaultSuperCall = defaultSuperCall;\n  $traceurRuntime.superCall = superCall;\n  $traceurRuntime.superConstructor = superConstructor;\n  $traceurRuntime.superGet = superGet;\n  $traceurRuntime.superSet = superSet;\n})();\n(function() {\n  'use strict';\n  var createPrivateName = $traceurRuntime.createPrivateName;\n  var $defineProperties = $traceurRuntime.defineProperties;\n  var $defineProperty = $traceurRuntime.defineProperty;\n  var $create = Object.create;\n  var $TypeError = TypeError;\n  function nonEnum(value) {\n    return {\n      configurable: true,\n      enumerable: false,\n      value: value,\n      writable: true\n    };\n  }\n  var ST_NEWBORN = 0;\n  var ST_EXECUTING = 1;\n  var ST_SUSPENDED = 2;\n  var ST_CLOSED = 3;\n  var END_STATE = -2;\n  var RETHROW_STATE = -3;\n  function getInternalError(state) {\n    return new Error('Traceur compiler bug: invalid state in state machine: ' + state);\n  }\n  function GeneratorContext() {\n    this.state = 0;\n    this.GState = ST_NEWBORN;\n    this.storedException = undefined;\n    this.finallyFallThrough = undefined;\n    this.sent_ = undefined;\n    this.returnValue = undefined;\n    this.tryStack_ = [];\n  }\n  GeneratorContext.prototype = {\n    pushTry: function(catchState, finallyState) {\n      if (finallyState !== null) {\n        var finallyFallThrough = null;\n        for (var i = this.tryStack_.length - 1; i >= 0; i--) {\n          if (this.tryStack_[i].catch !== undefined) {\n            finallyFallThrough = this.tryStack_[i].catch;\n            break;\n          }\n        }\n        if (finallyFallThrough === null)\n          finallyFallThrough = RETHROW_STATE;\n        this.tryStack_.push({\n          finally: finallyState,\n          finallyFallThrough: finallyFallThrough\n        });\n      }\n      if (catchState !== null) {\n        this.tryStack_.push({catch: catchState});\n      }\n    },\n    popTry: function() {\n      this.tryStack_.pop();\n    },\n    get sent() {\n      this.maybeThrow();\n      return this.sent_;\n    },\n    set sent(v) {\n      this.sent_ = v;\n    },\n    get sentIgnoreThrow() {\n      return this.sent_;\n    },\n    maybeThrow: function() {\n      if (this.action === 'throw') {\n        this.action = 'next';\n        throw this.sent_;\n      }\n    },\n    end: function() {\n      switch (this.state) {\n        case END_STATE:\n          return this;\n        case RETHROW_STATE:\n          throw this.storedException;\n        default:\n          throw getInternalError(this.state);\n      }\n    },\n    handleException: function(ex) {\n      this.GState = ST_CLOSED;\n      this.state = END_STATE;\n      throw ex;\n    }\n  };\n  function nextOrThrow(ctx, moveNext, action, x) {\n    switch (ctx.GState) {\n      case ST_EXECUTING:\n        throw new Error((\"\\\"\" + action + \"\\\" on executing generator\"));\n      case ST_CLOSED:\n        if (action == 'next') {\n          return {\n            value: undefined,\n            done: true\n          };\n        }\n        throw x;\n      case ST_NEWBORN:\n        if (action === 'throw') {\n          ctx.GState = ST_CLOSED;\n          throw x;\n        }\n        if (x !== undefined)\n          throw $TypeError('Sent value to newborn generator');\n      case ST_SUSPENDED:\n        ctx.GState = ST_EXECUTING;\n        ctx.action = action;\n        ctx.sent = x;\n        var value = moveNext(ctx);\n        var done = value === ctx;\n        if (done)\n          value = ctx.returnValue;\n        ctx.GState = done ? ST_CLOSED : ST_SUSPENDED;\n        return {\n          value: value,\n          done: done\n        };\n    }\n  }\n  var ctxName = createPrivateName();\n  var moveNextName = createPrivateName();\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  $defineProperty(GeneratorFunctionPrototype, 'constructor', nonEnum(GeneratorFunction));\n  GeneratorFunctionPrototype.prototype = {\n    constructor: GeneratorFunctionPrototype,\n    next: function(v) {\n      return nextOrThrow(this[ctxName], this[moveNextName], 'next', v);\n    },\n    throw: function(v) {\n      return nextOrThrow(this[ctxName], this[moveNextName], 'throw', v);\n    }\n  };\n  $defineProperties(GeneratorFunctionPrototype.prototype, {\n    constructor: {enumerable: false},\n    next: {enumerable: false},\n    throw: {enumerable: false}\n  });\n  Object.defineProperty(GeneratorFunctionPrototype.prototype, Symbol.iterator, nonEnum(function() {\n    return this;\n  }));\n  function createGeneratorInstance(innerFunction, functionObject, self) {\n    var moveNext = getMoveNext(innerFunction, self);\n    var ctx = new GeneratorContext();\n    var object = $create(functionObject.prototype);\n    object[ctxName] = ctx;\n    object[moveNextName] = moveNext;\n    return object;\n  }\n  function initGeneratorFunction(functionObject) {\n    functionObject.prototype = $create(GeneratorFunctionPrototype.prototype);\n    functionObject.__proto__ = GeneratorFunctionPrototype;\n    return functionObject;\n  }\n  function AsyncFunctionContext() {\n    GeneratorContext.call(this);\n    this.err = undefined;\n    var ctx = this;\n    ctx.result = new Promise(function(resolve, reject) {\n      ctx.resolve = resolve;\n      ctx.reject = reject;\n    });\n  }\n  AsyncFunctionContext.prototype = $create(GeneratorContext.prototype);\n  AsyncFunctionContext.prototype.end = function() {\n    switch (this.state) {\n      case END_STATE:\n        this.resolve(this.returnValue);\n        break;\n      case RETHROW_STATE:\n        this.reject(this.storedException);\n        break;\n      default:\n        this.reject(getInternalError(this.state));\n    }\n  };\n  AsyncFunctionContext.prototype.handleException = function() {\n    this.state = RETHROW_STATE;\n  };\n  function asyncWrap(innerFunction, self) {\n    var moveNext = getMoveNext(innerFunction, self);\n    var ctx = new AsyncFunctionContext();\n    ctx.createCallback = function(newState) {\n      return function(value) {\n        ctx.state = newState;\n        ctx.value = value;\n        moveNext(ctx);\n      };\n    };\n    ctx.errback = function(err) {\n      handleCatch(ctx, err);\n      moveNext(ctx);\n    };\n    moveNext(ctx);\n    return ctx.result;\n  }\n  function getMoveNext(innerFunction, self) {\n    return function(ctx) {\n      while (true) {\n        try {\n          return innerFunction.call(self, ctx);\n        } catch (ex) {\n          handleCatch(ctx, ex);\n        }\n      }\n    };\n  }\n  function handleCatch(ctx, ex) {\n    ctx.storedException = ex;\n    var last = ctx.tryStack_[ctx.tryStack_.length - 1];\n    if (!last) {\n      ctx.handleException(ex);\n      return;\n    }\n    ctx.state = last.catch !== undefined ? last.catch : last.finally;\n    if (last.finallyFallThrough !== undefined)\n      ctx.finallyFallThrough = last.finallyFallThrough;\n  }\n  $traceurRuntime.asyncWrap = asyncWrap;\n  $traceurRuntime.initGeneratorFunction = initGeneratorFunction;\n  $traceurRuntime.createGeneratorInstance = createGeneratorInstance;\n})();\n(function() {\n  function buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {\n    var out = [];\n    if (opt_scheme) {\n      out.push(opt_scheme, ':');\n    }\n    if (opt_domain) {\n      out.push('//');\n      if (opt_userInfo) {\n        out.push(opt_userInfo, '@');\n      }\n      out.push(opt_domain);\n      if (opt_port) {\n        out.push(':', opt_port);\n      }\n    }\n    if (opt_path) {\n      out.push(opt_path);\n    }\n    if (opt_queryData) {\n      out.push('?', opt_queryData);\n    }\n    if (opt_fragment) {\n      out.push('#', opt_fragment);\n    }\n    return out.join('');\n  }\n  ;\n  var splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\\\?([^#]*))?' + '(?:#(.*))?' + '$');\n  var ComponentIndex = {\n    SCHEME: 1,\n    USER_INFO: 2,\n    DOMAIN: 3,\n    PORT: 4,\n    PATH: 5,\n    QUERY_DATA: 6,\n    FRAGMENT: 7\n  };\n  function split(uri) {\n    return (uri.match(splitRe));\n  }\n  function removeDotSegments(path) {\n    if (path === '/')\n      return '/';\n    var leadingSlash = path[0] === '/' ? '/' : '';\n    var trailingSlash = path.slice(-1) === '/' ? '/' : '';\n    var segments = path.split('/');\n    var out = [];\n    var up = 0;\n    for (var pos = 0; pos < segments.length; pos++) {\n      var segment = segments[pos];\n      switch (segment) {\n        case '':\n        case '.':\n          break;\n        case '..':\n          if (out.length)\n            out.pop();\n          else\n            up++;\n          break;\n        default:\n          out.push(segment);\n      }\n    }\n    if (!leadingSlash) {\n      while (up-- > 0) {\n        out.unshift('..');\n      }\n      if (out.length === 0)\n        out.push('.');\n    }\n    return leadingSlash + out.join('/') + trailingSlash;\n  }\n  function joinAndCanonicalizePath(parts) {\n    var path = parts[ComponentIndex.PATH] || '';\n    path = removeDotSegments(path);\n    parts[ComponentIndex.PATH] = path;\n    return buildFromEncodedParts(parts[ComponentIndex.SCHEME], parts[ComponentIndex.USER_INFO], parts[ComponentIndex.DOMAIN], parts[ComponentIndex.PORT], parts[ComponentIndex.PATH], parts[ComponentIndex.QUERY_DATA], parts[ComponentIndex.FRAGMENT]);\n  }\n  function canonicalizeUrl(url) {\n    var parts = split(url);\n    return joinAndCanonicalizePath(parts);\n  }\n  function resolveUrl(base, url) {\n    var parts = split(url);\n    var baseParts = split(base);\n    if (parts[ComponentIndex.SCHEME]) {\n      return joinAndCanonicalizePath(parts);\n    } else {\n      parts[ComponentIndex.SCHEME] = baseParts[ComponentIndex.SCHEME];\n    }\n    for (var i = ComponentIndex.SCHEME; i <= ComponentIndex.PORT; i++) {\n      if (!parts[i]) {\n        parts[i] = baseParts[i];\n      }\n    }\n    if (parts[ComponentIndex.PATH][0] == '/') {\n      return joinAndCanonicalizePath(parts);\n    }\n    var path = baseParts[ComponentIndex.PATH];\n    var index = path.lastIndexOf('/');\n    path = path.slice(0, index + 1) + parts[ComponentIndex.PATH];\n    parts[ComponentIndex.PATH] = path;\n    return joinAndCanonicalizePath(parts);\n  }\n  function isAbsolute(name) {\n    if (!name)\n      return false;\n    if (name[0] === '/')\n      return true;\n    var parts = split(name);\n    if (parts[ComponentIndex.SCHEME])\n      return true;\n    return false;\n  }\n  $traceurRuntime.canonicalizeUrl = canonicalizeUrl;\n  $traceurRuntime.isAbsolute = isAbsolute;\n  $traceurRuntime.removeDotSegments = removeDotSegments;\n  $traceurRuntime.resolveUrl = resolveUrl;\n})();\n(function() {\n  'use strict';\n  var types = {\n    any: {name: 'any'},\n    boolean: {name: 'boolean'},\n    number: {name: 'number'},\n    string: {name: 'string'},\n    symbol: {name: 'symbol'},\n    void: {name: 'void'}\n  };\n  var GenericType = function GenericType(type, argumentTypes) {\n    this.type = type;\n    this.argumentTypes = argumentTypes;\n  };\n  ($traceurRuntime.createClass)(GenericType, {}, {});\n  function genericType(type) {\n    for (var argumentTypes = [],\n        $__1 = 1; $__1 < arguments.length; $__1++)\n      argumentTypes[$__1 - 1] = arguments[$__1];\n    return new GenericType(type, argumentTypes);\n  }\n  $traceurRuntime.GenericType = GenericType;\n  $traceurRuntime.genericType = genericType;\n  $traceurRuntime.type = types;\n})();\n(function(global) {\n  'use strict';\n  var $__2 = $traceurRuntime,\n      canonicalizeUrl = $__2.canonicalizeUrl,\n      resolveUrl = $__2.resolveUrl,\n      isAbsolute = $__2.isAbsolute;\n  var moduleInstantiators = Object.create(null);\n  var baseURL;\n  if (global.location && global.location.href)\n    baseURL = resolveUrl(global.location.href, './');\n  else\n    baseURL = '';\n  var UncoatedModuleEntry = function UncoatedModuleEntry(url, uncoatedModule) {\n    this.url = url;\n    this.value_ = uncoatedModule;\n  };\n  ($traceurRuntime.createClass)(UncoatedModuleEntry, {}, {});\n  var ModuleEvaluationError = function ModuleEvaluationError(erroneousModuleName, cause) {\n    this.message = this.constructor.name + ': ' + this.stripCause(cause) + ' in ' + erroneousModuleName;\n    if (!(cause instanceof $ModuleEvaluationError) && cause.stack)\n      this.stack = this.stripStack(cause.stack);\n    else\n      this.stack = '';\n  };\n  var $ModuleEvaluationError = ModuleEvaluationError;\n  ($traceurRuntime.createClass)(ModuleEvaluationError, {\n    stripError: function(message) {\n      return message.replace(/.*Error:/, this.constructor.name + ':');\n    },\n    stripCause: function(cause) {\n      if (!cause)\n        return '';\n      if (!cause.message)\n        return cause + '';\n      return this.stripError(cause.message);\n    },\n    loadedBy: function(moduleName) {\n      this.stack += '\\n loaded by ' + moduleName;\n    },\n    stripStack: function(causeStack) {\n      var stack = [];\n      causeStack.split('\\n').some((function(frame) {\n        if (/UncoatedModuleInstantiator/.test(frame))\n          return true;\n        stack.push(frame);\n      }));\n      stack[0] = this.stripError(stack[0]);\n      return stack.join('\\n');\n    }\n  }, {}, Error);\n  var UncoatedModuleInstantiator = function UncoatedModuleInstantiator(url, func) {\n    $traceurRuntime.superConstructor($UncoatedModuleInstantiator).call(this, url, null);\n    this.func = func;\n  };\n  var $UncoatedModuleInstantiator = UncoatedModuleInstantiator;\n  ($traceurRuntime.createClass)(UncoatedModuleInstantiator, {getUncoatedModule: function() {\n      if (this.value_)\n        return this.value_;\n      try {\n        return this.value_ = this.func.call(global);\n      } catch (ex) {\n        if (ex instanceof ModuleEvaluationError) {\n          ex.loadedBy(this.url);\n          throw ex;\n        }\n        throw new ModuleEvaluationError(this.url, ex);\n      }\n    }}, {}, UncoatedModuleEntry);\n  function getUncoatedModuleInstantiator(name) {\n    if (!name)\n      return;\n    var url = ModuleStore.normalize(name);\n    return moduleInstantiators[url];\n  }\n  ;\n  var moduleInstances = Object.create(null);\n  var liveModuleSentinel = {};\n  function Module(uncoatedModule) {\n    var isLive = arguments[1];\n    var coatedModule = Object.create(null);\n    Object.getOwnPropertyNames(uncoatedModule).forEach((function(name) {\n      var getter,\n          value;\n      if (isLive === liveModuleSentinel) {\n        var descr = Object.getOwnPropertyDescriptor(uncoatedModule, name);\n        if (descr.get)\n          getter = descr.get;\n      }\n      if (!getter) {\n        value = uncoatedModule[name];\n        getter = function() {\n          return value;\n        };\n      }\n      Object.defineProperty(coatedModule, name, {\n        get: getter,\n        enumerable: true\n      });\n    }));\n    Object.preventExtensions(coatedModule);\n    return coatedModule;\n  }\n  var ModuleStore = {\n    normalize: function(name, refererName, refererAddress) {\n      if (typeof name !== \"string\")\n        throw new TypeError(\"module name must be a string, not \" + typeof name);\n      if (isAbsolute(name))\n        return canonicalizeUrl(name);\n      if (/[^\\.]\\/\\.\\.\\//.test(name)) {\n        throw new Error('module name embeds /../: ' + name);\n      }\n      if (name[0] === '.' && refererName)\n        return resolveUrl(refererName, name);\n      return canonicalizeUrl(name);\n    },\n    get: function(normalizedName) {\n      var m = getUncoatedModuleInstantiator(normalizedName);\n      if (!m)\n        return undefined;\n      var moduleInstance = moduleInstances[m.url];\n      if (moduleInstance)\n        return moduleInstance;\n      moduleInstance = Module(m.getUncoatedModule(), liveModuleSentinel);\n      return moduleInstances[m.url] = moduleInstance;\n    },\n    set: function(normalizedName, module) {\n      normalizedName = String(normalizedName);\n      moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, (function() {\n        return module;\n      }));\n      moduleInstances[normalizedName] = module;\n    },\n    get baseURL() {\n      return baseURL;\n    },\n    set baseURL(v) {\n      baseURL = String(v);\n    },\n    registerModule: function(name, func) {\n      var normalizedName = ModuleStore.normalize(name);\n      if (moduleInstantiators[normalizedName])\n        throw new Error('duplicate module named ' + normalizedName);\n      moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, func);\n    },\n    bundleStore: Object.create(null),\n    register: function(name, deps, func) {\n      if (!deps || !deps.length && !func.length) {\n        this.registerModule(name, func);\n      } else {\n        this.bundleStore[name] = {\n          deps: deps,\n          execute: function() {\n            var $__0 = arguments;\n            var depMap = {};\n            deps.forEach((function(dep, index) {\n              return depMap[dep] = $__0[index];\n            }));\n            var registryEntry = func.call(this, depMap);\n            registryEntry.execute.call(this);\n            return registryEntry.exports;\n          }\n        };\n      }\n    },\n    getAnonymousModule: function(func) {\n      return new Module(func.call(global), liveModuleSentinel);\n    },\n    getForTesting: function(name) {\n      var $__0 = this;\n      if (!this.testingPrefix_) {\n        Object.keys(moduleInstances).some((function(key) {\n          var m = /(traceur@[^\\/]*\\/)/.exec(key);\n          if (m) {\n            $__0.testingPrefix_ = m[1];\n            return true;\n          }\n        }));\n      }\n      return this.get(this.testingPrefix_ + name);\n    }\n  };\n  ModuleStore.set('@traceur/src/runtime/ModuleStore', new Module({ModuleStore: ModuleStore}));\n  var setupGlobals = $traceurRuntime.setupGlobals;\n  $traceurRuntime.setupGlobals = function(global) {\n    setupGlobals(global);\n  };\n  $traceurRuntime.ModuleStore = ModuleStore;\n  global.System = {\n    register: ModuleStore.register.bind(ModuleStore),\n    get: ModuleStore.get,\n    set: ModuleStore.set,\n    normalize: ModuleStore.normalize\n  };\n  $traceurRuntime.getModuleImpl = function(name) {\n    var instantiator = getUncoatedModuleInstantiator(name);\n    return instantiator && instantiator.getUncoatedModule();\n  };\n})(typeof global !== 'undefined' ? global : this);\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/utils\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/utils\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/utils\", path);\n  }\n  var $ceil = Math.ceil;\n  var $floor = Math.floor;\n  var $isFinite = isFinite;\n  var $isNaN = isNaN;\n  var $pow = Math.pow;\n  var $min = Math.min;\n  var toObject = $traceurRuntime.toObject;\n  function toUint32(x) {\n    return x >>> 0;\n  }\n  function isObject(x) {\n    return x && (typeof x === 'object' || typeof x === 'function');\n  }\n  function isCallable(x) {\n    return typeof x === 'function';\n  }\n  function isNumber(x) {\n    return typeof x === 'number';\n  }\n  function toInteger(x) {\n    x = +x;\n    if ($isNaN(x))\n      return 0;\n    if (x === 0 || !$isFinite(x))\n      return x;\n    return x > 0 ? $floor(x) : $ceil(x);\n  }\n  var MAX_SAFE_LENGTH = $pow(2, 53) - 1;\n  function toLength(x) {\n    var len = toInteger(x);\n    return len < 0 ? 0 : $min(len, MAX_SAFE_LENGTH);\n  }\n  function checkIterable(x) {\n    return !isObject(x) ? undefined : x[Symbol.iterator];\n  }\n  function isConstructor(x) {\n    return isCallable(x);\n  }\n  function createIteratorResultObject(value, done) {\n    return {\n      value: value,\n      done: done\n    };\n  }\n  function maybeDefine(object, name, descr) {\n    if (!(name in object)) {\n      Object.defineProperty(object, name, descr);\n    }\n  }\n  function maybeDefineMethod(object, name, value) {\n    maybeDefine(object, name, {\n      value: value,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n  }\n  function maybeDefineConst(object, name, value) {\n    maybeDefine(object, name, {\n      value: value,\n      configurable: false,\n      enumerable: false,\n      writable: false\n    });\n  }\n  function maybeAddFunctions(object, functions) {\n    for (var i = 0; i < functions.length; i += 2) {\n      var name = functions[i];\n      var value = functions[i + 1];\n      maybeDefineMethod(object, name, value);\n    }\n  }\n  function maybeAddConsts(object, consts) {\n    for (var i = 0; i < consts.length; i += 2) {\n      var name = consts[i];\n      var value = consts[i + 1];\n      maybeDefineConst(object, name, value);\n    }\n  }\n  function maybeAddIterator(object, func, Symbol) {\n    if (!Symbol || !Symbol.iterator || object[Symbol.iterator])\n      return;\n    if (object['@@iterator'])\n      func = object['@@iterator'];\n    Object.defineProperty(object, Symbol.iterator, {\n      value: func,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n  }\n  var polyfills = [];\n  function registerPolyfill(func) {\n    polyfills.push(func);\n  }\n  function polyfillAll(global) {\n    polyfills.forEach((function(f) {\n      return f(global);\n    }));\n  }\n  return {\n    get toObject() {\n      return toObject;\n    },\n    get toUint32() {\n      return toUint32;\n    },\n    get isObject() {\n      return isObject;\n    },\n    get isCallable() {\n      return isCallable;\n    },\n    get isNumber() {\n      return isNumber;\n    },\n    get toInteger() {\n      return toInteger;\n    },\n    get toLength() {\n      return toLength;\n    },\n    get checkIterable() {\n      return checkIterable;\n    },\n    get isConstructor() {\n      return isConstructor;\n    },\n    get createIteratorResultObject() {\n      return createIteratorResultObject;\n    },\n    get maybeDefine() {\n      return maybeDefine;\n    },\n    get maybeDefineMethod() {\n      return maybeDefineMethod;\n    },\n    get maybeDefineConst() {\n      return maybeDefineConst;\n    },\n    get maybeAddFunctions() {\n      return maybeAddFunctions;\n    },\n    get maybeAddConsts() {\n      return maybeAddConsts;\n    },\n    get maybeAddIterator() {\n      return maybeAddIterator;\n    },\n    get registerPolyfill() {\n      return registerPolyfill;\n    },\n    get polyfillAll() {\n      return polyfillAll;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Map\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Map\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Map\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      isObject = $__0.isObject,\n      maybeAddIterator = $__0.maybeAddIterator,\n      registerPolyfill = $__0.registerPolyfill;\n  var getOwnHashObject = $traceurRuntime.getOwnHashObject;\n  var $hasOwnProperty = Object.prototype.hasOwnProperty;\n  var deletedSentinel = {};\n  function lookupIndex(map, key) {\n    if (isObject(key)) {\n      var hashObject = getOwnHashObject(key);\n      return hashObject && map.objectIndex_[hashObject.hash];\n    }\n    if (typeof key === 'string')\n      return map.stringIndex_[key];\n    return map.primitiveIndex_[key];\n  }\n  function initMap(map) {\n    map.entries_ = [];\n    map.objectIndex_ = Object.create(null);\n    map.stringIndex_ = Object.create(null);\n    map.primitiveIndex_ = Object.create(null);\n    map.deletedCount_ = 0;\n  }\n  var Map = function Map() {\n    var iterable = arguments[0];\n    if (!isObject(this))\n      throw new TypeError('Map called on incompatible type');\n    if ($hasOwnProperty.call(this, 'entries_')) {\n      throw new TypeError('Map can not be reentrantly initialised');\n    }\n    initMap(this);\n    if (iterable !== null && iterable !== undefined) {\n      for (var $__2 = iterable[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__3; !($__3 = $__2.next()).done; ) {\n        var $__4 = $__3.value,\n            key = $__4[0],\n            value = $__4[1];\n        {\n          this.set(key, value);\n        }\n      }\n    }\n  };\n  ($traceurRuntime.createClass)(Map, {\n    get size() {\n      return this.entries_.length / 2 - this.deletedCount_;\n    },\n    get: function(key) {\n      var index = lookupIndex(this, key);\n      if (index !== undefined)\n        return this.entries_[index + 1];\n    },\n    set: function(key, value) {\n      var objectMode = isObject(key);\n      var stringMode = typeof key === 'string';\n      var index = lookupIndex(this, key);\n      if (index !== undefined) {\n        this.entries_[index + 1] = value;\n      } else {\n        index = this.entries_.length;\n        this.entries_[index] = key;\n        this.entries_[index + 1] = value;\n        if (objectMode) {\n          var hashObject = getOwnHashObject(key);\n          var hash = hashObject.hash;\n          this.objectIndex_[hash] = index;\n        } else if (stringMode) {\n          this.stringIndex_[key] = index;\n        } else {\n          this.primitiveIndex_[key] = index;\n        }\n      }\n      return this;\n    },\n    has: function(key) {\n      return lookupIndex(this, key) !== undefined;\n    },\n    delete: function(key) {\n      var objectMode = isObject(key);\n      var stringMode = typeof key === 'string';\n      var index;\n      var hash;\n      if (objectMode) {\n        var hashObject = getOwnHashObject(key);\n        if (hashObject) {\n          index = this.objectIndex_[hash = hashObject.hash];\n          delete this.objectIndex_[hash];\n        }\n      } else if (stringMode) {\n        index = this.stringIndex_[key];\n        delete this.stringIndex_[key];\n      } else {\n        index = this.primitiveIndex_[key];\n        delete this.primitiveIndex_[key];\n      }\n      if (index !== undefined) {\n        this.entries_[index] = deletedSentinel;\n        this.entries_[index + 1] = undefined;\n        this.deletedCount_++;\n        return true;\n      }\n      return false;\n    },\n    clear: function() {\n      initMap(this);\n    },\n    forEach: function(callbackFn) {\n      var thisArg = arguments[1];\n      for (var i = 0; i < this.entries_.length; i += 2) {\n        var key = this.entries_[i];\n        var value = this.entries_[i + 1];\n        if (key === deletedSentinel)\n          continue;\n        callbackFn.call(thisArg, value, key, this);\n      }\n    },\n    entries: $traceurRuntime.initGeneratorFunction(function $__5() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return [key, value];\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__5, this);\n    }),\n    keys: $traceurRuntime.initGeneratorFunction(function $__6() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return key;\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__6, this);\n    }),\n    values: $traceurRuntime.initGeneratorFunction(function $__7() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return value;\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__7, this);\n    })\n  }, {});\n  Object.defineProperty(Map.prototype, Symbol.iterator, {\n    configurable: true,\n    writable: true,\n    value: Map.prototype.entries\n  });\n  function polyfillMap(global) {\n    var $__4 = global,\n        Object = $__4.Object,\n        Symbol = $__4.Symbol;\n    if (!global.Map)\n      global.Map = Map;\n    var mapPrototype = global.Map.prototype;\n    if (mapPrototype.entries === undefined)\n      global.Map = Map;\n    if (mapPrototype.entries) {\n      maybeAddIterator(mapPrototype, mapPrototype.entries, Symbol);\n      maybeAddIterator(Object.getPrototypeOf(new global.Map().entries()), function() {\n        return this;\n      }, Symbol);\n    }\n  }\n  registerPolyfill(polyfillMap);\n  return {\n    get Map() {\n      return Map;\n    },\n    get polyfillMap() {\n      return polyfillMap;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Map\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Set\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Set\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Set\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      isObject = $__0.isObject,\n      maybeAddIterator = $__0.maybeAddIterator,\n      registerPolyfill = $__0.registerPolyfill;\n  var Map = System.get(\"traceur@0.0.74/src/runtime/polyfills/Map\").Map;\n  var getOwnHashObject = $traceurRuntime.getOwnHashObject;\n  var $hasOwnProperty = Object.prototype.hasOwnProperty;\n  function initSet(set) {\n    set.map_ = new Map();\n  }\n  var Set = function Set() {\n    var iterable = arguments[0];\n    if (!isObject(this))\n      throw new TypeError('Set called on incompatible type');\n    if ($hasOwnProperty.call(this, 'map_')) {\n      throw new TypeError('Set can not be reentrantly initialised');\n    }\n    initSet(this);\n    if (iterable !== null && iterable !== undefined) {\n      for (var $__4 = iterable[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__5; !($__5 = $__4.next()).done; ) {\n        var item = $__5.value;\n        {\n          this.add(item);\n        }\n      }\n    }\n  };\n  ($traceurRuntime.createClass)(Set, {\n    get size() {\n      return this.map_.size;\n    },\n    has: function(key) {\n      return this.map_.has(key);\n    },\n    add: function(key) {\n      this.map_.set(key, key);\n      return this;\n    },\n    delete: function(key) {\n      return this.map_.delete(key);\n    },\n    clear: function() {\n      return this.map_.clear();\n    },\n    forEach: function(callbackFn) {\n      var thisArg = arguments[1];\n      var $__2 = this;\n      return this.map_.forEach((function(value, key) {\n        callbackFn.call(thisArg, key, key, $__2);\n      }));\n    },\n    values: $traceurRuntime.initGeneratorFunction(function $__7() {\n      var $__8,\n          $__9;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              $__8 = this.map_.keys()[Symbol.iterator]();\n              $ctx.sent = void 0;\n              $ctx.action = 'next';\n              $ctx.state = 12;\n              break;\n            case 12:\n              $__9 = $__8[$ctx.action]($ctx.sentIgnoreThrow);\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = ($__9.done) ? 3 : 2;\n              break;\n            case 3:\n              $ctx.sent = $__9.value;\n              $ctx.state = -2;\n              break;\n            case 2:\n              $ctx.state = 12;\n              return $__9.value;\n            default:\n              return $ctx.end();\n          }\n      }, $__7, this);\n    }),\n    entries: $traceurRuntime.initGeneratorFunction(function $__10() {\n      var $__11,\n          $__12;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              $__11 = this.map_.entries()[Symbol.iterator]();\n              $ctx.sent = void 0;\n              $ctx.action = 'next';\n              $ctx.state = 12;\n              break;\n            case 12:\n              $__12 = $__11[$ctx.action]($ctx.sentIgnoreThrow);\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = ($__12.done) ? 3 : 2;\n              break;\n            case 3:\n              $ctx.sent = $__12.value;\n              $ctx.state = -2;\n              break;\n            case 2:\n              $ctx.state = 12;\n              return $__12.value;\n            default:\n              return $ctx.end();\n          }\n      }, $__10, this);\n    })\n  }, {});\n  Object.defineProperty(Set.prototype, Symbol.iterator, {\n    configurable: true,\n    writable: true,\n    value: Set.prototype.values\n  });\n  Object.defineProperty(Set.prototype, 'keys', {\n    configurable: true,\n    writable: true,\n    value: Set.prototype.values\n  });\n  function polyfillSet(global) {\n    var $__6 = global,\n        Object = $__6.Object,\n        Symbol = $__6.Symbol;\n    if (!global.Set)\n      global.Set = Set;\n    var setPrototype = global.Set.prototype;\n    if (setPrototype.values) {\n      maybeAddIterator(setPrototype, setPrototype.values, Symbol);\n      maybeAddIterator(Object.getPrototypeOf(new global.Set().values()), function() {\n        return this;\n      }, Symbol);\n    }\n  }\n  registerPolyfill(polyfillSet);\n  return {\n    get Set() {\n      return Set;\n    },\n    get polyfillSet() {\n      return polyfillSet;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Set\" + '');\nSystem.register(\"traceur@0.0.74/node_modules/rsvp/lib/rsvp/asap\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/node_modules/rsvp/lib/rsvp/asap\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/node_modules/rsvp/lib/rsvp/asap\", path);\n  }\n  var len = 0;\n  function asap(callback, arg) {\n    queue[len] = callback;\n    queue[len + 1] = arg;\n    len += 2;\n    if (len === 2) {\n      scheduleFlush();\n    }\n  }\n  var $__default = asap;\n  var browserGlobal = (typeof window !== 'undefined') ? window : {};\n  var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\n  var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n  function useNextTick() {\n    return function() {\n      process.nextTick(flush);\n    };\n  }\n  function useMutationObserver() {\n    var iterations = 0;\n    var observer = new BrowserMutationObserver(flush);\n    var node = document.createTextNode('');\n    observer.observe(node, {characterData: true});\n    return function() {\n      node.data = (iterations = ++iterations % 2);\n    };\n  }\n  function useMessageChannel() {\n    var channel = new MessageChannel();\n    channel.port1.onmessage = flush;\n    return function() {\n      channel.port2.postMessage(0);\n    };\n  }\n  function useSetTimeout() {\n    return function() {\n      setTimeout(flush, 1);\n    };\n  }\n  var queue = new Array(1000);\n  function flush() {\n    for (var i = 0; i < len; i += 2) {\n      var callback = queue[i];\n      var arg = queue[i + 1];\n      callback(arg);\n      queue[i] = undefined;\n      queue[i + 1] = undefined;\n    }\n    len = 0;\n  }\n  var scheduleFlush;\n  if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {\n    scheduleFlush = useNextTick();\n  } else if (BrowserMutationObserver) {\n    scheduleFlush = useMutationObserver();\n  } else if (isWorker) {\n    scheduleFlush = useMessageChannel();\n  } else {\n    scheduleFlush = useSetTimeout();\n  }\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Promise\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Promise\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Promise\", path);\n  }\n  var async = System.get(\"traceur@0.0.74/node_modules/rsvp/lib/rsvp/asap\").default;\n  var registerPolyfill = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\").registerPolyfill;\n  var promiseRaw = {};\n  function isPromise(x) {\n    return x && typeof x === 'object' && x.status_ !== undefined;\n  }\n  function idResolveHandler(x) {\n    return x;\n  }\n  function idRejectHandler(x) {\n    throw x;\n  }\n  function chain(promise) {\n    var onResolve = arguments[1] !== (void 0) ? arguments[1] : idResolveHandler;\n    var onReject = arguments[2] !== (void 0) ? arguments[2] : idRejectHandler;\n    var deferred = getDeferred(promise.constructor);\n    switch (promise.status_) {\n      case undefined:\n        throw TypeError;\n      case 0:\n        promise.onResolve_.push(onResolve, deferred);\n        promise.onReject_.push(onReject, deferred);\n        break;\n      case +1:\n        promiseEnqueue(promise.value_, [onResolve, deferred]);\n        break;\n      case -1:\n        promiseEnqueue(promise.value_, [onReject, deferred]);\n        break;\n    }\n    return deferred.promise;\n  }\n  function getDeferred(C) {\n    if (this === $Promise) {\n      var promise = promiseInit(new $Promise(promiseRaw));\n      return {\n        promise: promise,\n        resolve: (function(x) {\n          promiseResolve(promise, x);\n        }),\n        reject: (function(r) {\n          promiseReject(promise, r);\n        })\n      };\n    } else {\n      var result = {};\n      result.promise = new C((function(resolve, reject) {\n        result.resolve = resolve;\n        result.reject = reject;\n      }));\n      return result;\n    }\n  }\n  function promiseSet(promise, status, value, onResolve, onReject) {\n    promise.status_ = status;\n    promise.value_ = value;\n    promise.onResolve_ = onResolve;\n    promise.onReject_ = onReject;\n    return promise;\n  }\n  function promiseInit(promise) {\n    return promiseSet(promise, 0, undefined, [], []);\n  }\n  var Promise = function Promise(resolver) {\n    if (resolver === promiseRaw)\n      return;\n    if (typeof resolver !== 'function')\n      throw new TypeError;\n    var promise = promiseInit(this);\n    try {\n      resolver((function(x) {\n        promiseResolve(promise, x);\n      }), (function(r) {\n        promiseReject(promise, r);\n      }));\n    } catch (e) {\n      promiseReject(promise, e);\n    }\n  };\n  ($traceurRuntime.createClass)(Promise, {\n    catch: function(onReject) {\n      return this.then(undefined, onReject);\n    },\n    then: function(onResolve, onReject) {\n      if (typeof onResolve !== 'function')\n        onResolve = idResolveHandler;\n      if (typeof onReject !== 'function')\n        onReject = idRejectHandler;\n      var that = this;\n      var constructor = this.constructor;\n      return chain(this, function(x) {\n        x = promiseCoerce(constructor, x);\n        return x === that ? onReject(new TypeError) : isPromise(x) ? x.then(onResolve, onReject) : onResolve(x);\n      }, onReject);\n    }\n  }, {\n    resolve: function(x) {\n      if (this === $Promise) {\n        if (isPromise(x)) {\n          return x;\n        }\n        return promiseSet(new $Promise(promiseRaw), +1, x);\n      } else {\n        return new this(function(resolve, reject) {\n          resolve(x);\n        });\n      }\n    },\n    reject: function(r) {\n      if (this === $Promise) {\n        return promiseSet(new $Promise(promiseRaw), -1, r);\n      } else {\n        return new this((function(resolve, reject) {\n          reject(r);\n        }));\n      }\n    },\n    all: function(values) {\n      var deferred = getDeferred(this);\n      var resolutions = [];\n      try {\n        var count = values.length;\n        if (count === 0) {\n          deferred.resolve(resolutions);\n        } else {\n          for (var i = 0; i < values.length; i++) {\n            this.resolve(values[i]).then(function(i, x) {\n              resolutions[i] = x;\n              if (--count === 0)\n                deferred.resolve(resolutions);\n            }.bind(undefined, i), (function(r) {\n              deferred.reject(r);\n            }));\n          }\n        }\n      } catch (e) {\n        deferred.reject(e);\n      }\n      return deferred.promise;\n    },\n    race: function(values) {\n      var deferred = getDeferred(this);\n      try {\n        for (var i = 0; i < values.length; i++) {\n          this.resolve(values[i]).then((function(x) {\n            deferred.resolve(x);\n          }), (function(r) {\n            deferred.reject(r);\n          }));\n        }\n      } catch (e) {\n        deferred.reject(e);\n      }\n      return deferred.promise;\n    }\n  });\n  var $Promise = Promise;\n  var $PromiseReject = $Promise.reject;\n  function promiseResolve(promise, x) {\n    promiseDone(promise, +1, x, promise.onResolve_);\n  }\n  function promiseReject(promise, r) {\n    promiseDone(promise, -1, r, promise.onReject_);\n  }\n  function promiseDone(promise, status, value, reactions) {\n    if (promise.status_ !== 0)\n      return;\n    promiseEnqueue(value, reactions);\n    promiseSet(promise, status, value);\n  }\n  function promiseEnqueue(value, tasks) {\n    async((function() {\n      for (var i = 0; i < tasks.length; i += 2) {\n        promiseHandle(value, tasks[i], tasks[i + 1]);\n      }\n    }));\n  }\n  function promiseHandle(value, handler, deferred) {\n    try {\n      var result = handler(value);\n      if (result === deferred.promise)\n        throw new TypeError;\n      else if (isPromise(result))\n        chain(result, deferred.resolve, deferred.reject);\n      else\n        deferred.resolve(result);\n    } catch (e) {\n      try {\n        deferred.reject(e);\n      } catch (e) {}\n    }\n  }\n  var thenableSymbol = '@@thenable';\n  function isObject(x) {\n    return x && (typeof x === 'object' || typeof x === 'function');\n  }\n  function promiseCoerce(constructor, x) {\n    if (!isPromise(x) && isObject(x)) {\n      var then;\n      try {\n        then = x.then;\n      } catch (r) {\n        var promise = $PromiseReject.call(constructor, r);\n        x[thenableSymbol] = promise;\n        return promise;\n      }\n      if (typeof then === 'function') {\n        var p = x[thenableSymbol];\n        if (p) {\n          return p;\n        } else {\n          var deferred = getDeferred(constructor);\n          x[thenableSymbol] = deferred.promise;\n          try {\n            then.call(x, deferred.resolve, deferred.reject);\n          } catch (r) {\n            deferred.reject(r);\n          }\n          return deferred.promise;\n        }\n      }\n    }\n    return x;\n  }\n  function polyfillPromise(global) {\n    if (!global.Promise)\n      global.Promise = Promise;\n  }\n  registerPolyfill(polyfillPromise);\n  return {\n    get Promise() {\n      return Promise;\n    },\n    get polyfillPromise() {\n      return polyfillPromise;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Promise\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/StringIterator\", [], function() {\n  \"use strict\";\n  var $__2;\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/StringIterator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/StringIterator\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      createIteratorResultObject = $__0.createIteratorResultObject,\n      isObject = $__0.isObject;\n  var toProperty = $traceurRuntime.toProperty;\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n  var iteratedString = Symbol('iteratedString');\n  var stringIteratorNextIndex = Symbol('stringIteratorNextIndex');\n  var StringIterator = function StringIterator() {};\n  ($traceurRuntime.createClass)(StringIterator, ($__2 = {}, Object.defineProperty($__2, \"next\", {\n    value: function() {\n      var o = this;\n      if (!isObject(o) || !hasOwnProperty.call(o, iteratedString)) {\n        throw new TypeError('this must be a StringIterator object');\n      }\n      var s = o[toProperty(iteratedString)];\n      if (s === undefined) {\n        return createIteratorResultObject(undefined, true);\n      }\n      var position = o[toProperty(stringIteratorNextIndex)];\n      var len = s.length;\n      if (position >= len) {\n        o[toProperty(iteratedString)] = undefined;\n        return createIteratorResultObject(undefined, true);\n      }\n      var first = s.charCodeAt(position);\n      var resultString;\n      if (first < 0xD800 || first > 0xDBFF || position + 1 === len) {\n        resultString = String.fromCharCode(first);\n      } else {\n        var second = s.charCodeAt(position + 1);\n        if (second < 0xDC00 || second > 0xDFFF) {\n          resultString = String.fromCharCode(first);\n        } else {\n          resultString = String.fromCharCode(first) + String.fromCharCode(second);\n        }\n      }\n      o[toProperty(stringIteratorNextIndex)] = position + resultString.length;\n      return createIteratorResultObject(resultString, false);\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__2, Symbol.iterator, {\n    value: function() {\n      return this;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), $__2), {});\n  function createStringIterator(string) {\n    var s = String(string);\n    var iterator = Object.create(StringIterator.prototype);\n    iterator[toProperty(iteratedString)] = s;\n    iterator[toProperty(stringIteratorNextIndex)] = 0;\n    return iterator;\n  }\n  return {get createStringIterator() {\n      return createStringIterator;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/String\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/String\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/String\", path);\n  }\n  var createStringIterator = System.get(\"traceur@0.0.74/src/runtime/polyfills/StringIterator\").createStringIterator;\n  var $__1 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      maybeAddFunctions = $__1.maybeAddFunctions,\n      maybeAddIterator = $__1.maybeAddIterator,\n      registerPolyfill = $__1.registerPolyfill;\n  var $toString = Object.prototype.toString;\n  var $indexOf = String.prototype.indexOf;\n  var $lastIndexOf = String.prototype.lastIndexOf;\n  function startsWith(search) {\n    var string = String(this);\n    if (this == null || $toString.call(search) == '[object RegExp]') {\n      throw TypeError();\n    }\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var position = arguments.length > 1 ? arguments[1] : undefined;\n    var pos = position ? Number(position) : 0;\n    if (isNaN(pos)) {\n      pos = 0;\n    }\n    var start = Math.min(Math.max(pos, 0), stringLength);\n    return $indexOf.call(string, searchString, pos) == start;\n  }\n  function endsWith(search) {\n    var string = String(this);\n    if (this == null || $toString.call(search) == '[object RegExp]') {\n      throw TypeError();\n    }\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var pos = stringLength;\n    if (arguments.length > 1) {\n      var position = arguments[1];\n      if (position !== undefined) {\n        pos = position ? Number(position) : 0;\n        if (isNaN(pos)) {\n          pos = 0;\n        }\n      }\n    }\n    var end = Math.min(Math.max(pos, 0), stringLength);\n    var start = end - searchLength;\n    if (start < 0) {\n      return false;\n    }\n    return $lastIndexOf.call(string, searchString, start) == start;\n  }\n  function contains(search) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var position = arguments.length > 1 ? arguments[1] : undefined;\n    var pos = position ? Number(position) : 0;\n    if (isNaN(pos)) {\n      pos = 0;\n    }\n    var start = Math.min(Math.max(pos, 0), stringLength);\n    return $indexOf.call(string, searchString, pos) != -1;\n  }\n  function repeat(count) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var n = count ? Number(count) : 0;\n    if (isNaN(n)) {\n      n = 0;\n    }\n    if (n < 0 || n == Infinity) {\n      throw RangeError();\n    }\n    if (n == 0) {\n      return '';\n    }\n    var result = '';\n    while (n--) {\n      result += string;\n    }\n    return result;\n  }\n  function codePointAt(position) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var size = string.length;\n    var index = position ? Number(position) : 0;\n    if (isNaN(index)) {\n      index = 0;\n    }\n    if (index < 0 || index >= size) {\n      return undefined;\n    }\n    var first = string.charCodeAt(index);\n    var second;\n    if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n      second = string.charCodeAt(index + 1);\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      }\n    }\n    return first;\n  }\n  function raw(callsite) {\n    var raw = callsite.raw;\n    var len = raw.length >>> 0;\n    if (len === 0)\n      return '';\n    var s = '';\n    var i = 0;\n    while (true) {\n      s += raw[i];\n      if (i + 1 === len)\n        return s;\n      s += arguments[++i];\n    }\n  }\n  function fromCodePoint() {\n    var codeUnits = [];\n    var floor = Math.floor;\n    var highSurrogate;\n    var lowSurrogate;\n    var index = -1;\n    var length = arguments.length;\n    if (!length) {\n      return '';\n    }\n    while (++index < length) {\n      var codePoint = Number(arguments[index]);\n      if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) {\n        throw RangeError('Invalid code point: ' + codePoint);\n      }\n      if (codePoint <= 0xFFFF) {\n        codeUnits.push(codePoint);\n      } else {\n        codePoint -= 0x10000;\n        highSurrogate = (codePoint >> 10) + 0xD800;\n        lowSurrogate = (codePoint % 0x400) + 0xDC00;\n        codeUnits.push(highSurrogate, lowSurrogate);\n      }\n    }\n    return String.fromCharCode.apply(null, codeUnits);\n  }\n  function stringPrototypeIterator() {\n    var o = $traceurRuntime.checkObjectCoercible(this);\n    var s = String(o);\n    return createStringIterator(s);\n  }\n  function polyfillString(global) {\n    var String = global.String;\n    maybeAddFunctions(String.prototype, ['codePointAt', codePointAt, 'contains', contains, 'endsWith', endsWith, 'startsWith', startsWith, 'repeat', repeat]);\n    maybeAddFunctions(String, ['fromCodePoint', fromCodePoint, 'raw', raw]);\n    maybeAddIterator(String.prototype, stringPrototypeIterator, Symbol);\n  }\n  registerPolyfill(polyfillString);\n  return {\n    get startsWith() {\n      return startsWith;\n    },\n    get endsWith() {\n      return endsWith;\n    },\n    get contains() {\n      return contains;\n    },\n    get repeat() {\n      return repeat;\n    },\n    get codePointAt() {\n      return codePointAt;\n    },\n    get raw() {\n      return raw;\n    },\n    get fromCodePoint() {\n      return fromCodePoint;\n    },\n    get stringPrototypeIterator() {\n      return stringPrototypeIterator;\n    },\n    get polyfillString() {\n      return polyfillString;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/String\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/ArrayIterator\", [], function() {\n  \"use strict\";\n  var $__2;\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/ArrayIterator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/ArrayIterator\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      toObject = $__0.toObject,\n      toUint32 = $__0.toUint32,\n      createIteratorResultObject = $__0.createIteratorResultObject;\n  var ARRAY_ITERATOR_KIND_KEYS = 1;\n  var ARRAY_ITERATOR_KIND_VALUES = 2;\n  var ARRAY_ITERATOR_KIND_ENTRIES = 3;\n  var ArrayIterator = function ArrayIterator() {};\n  ($traceurRuntime.createClass)(ArrayIterator, ($__2 = {}, Object.defineProperty($__2, \"next\", {\n    value: function() {\n      var iterator = toObject(this);\n      var array = iterator.iteratorObject_;\n      if (!array) {\n        throw new TypeError('Object is not an ArrayIterator');\n      }\n      var index = iterator.arrayIteratorNextIndex_;\n      var itemKind = iterator.arrayIterationKind_;\n      var length = toUint32(array.length);\n      if (index >= length) {\n        iterator.arrayIteratorNextIndex_ = Infinity;\n        return createIteratorResultObject(undefined, true);\n      }\n      iterator.arrayIteratorNextIndex_ = index + 1;\n      if (itemKind == ARRAY_ITERATOR_KIND_VALUES)\n        return createIteratorResultObject(array[index], false);\n      if (itemKind == ARRAY_ITERATOR_KIND_ENTRIES)\n        return createIteratorResultObject([index, array[index]], false);\n      return createIteratorResultObject(index, false);\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__2, Symbol.iterator, {\n    value: function() {\n      return this;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), $__2), {});\n  function createArrayIterator(array, kind) {\n    var object = toObject(array);\n    var iterator = new ArrayIterator;\n    iterator.iteratorObject_ = object;\n    iterator.arrayIteratorNextIndex_ = 0;\n    iterator.arrayIterationKind_ = kind;\n    return iterator;\n  }\n  function entries() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_ENTRIES);\n  }\n  function keys() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_KEYS);\n  }\n  function values() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_VALUES);\n  }\n  return {\n    get entries() {\n      return entries;\n    },\n    get keys() {\n      return keys;\n    },\n    get values() {\n      return values;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Array\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Array\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Array\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/ArrayIterator\"),\n      entries = $__0.entries,\n      keys = $__0.keys,\n      values = $__0.values;\n  var $__1 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      checkIterable = $__1.checkIterable,\n      isCallable = $__1.isCallable,\n      isConstructor = $__1.isConstructor,\n      maybeAddFunctions = $__1.maybeAddFunctions,\n      maybeAddIterator = $__1.maybeAddIterator,\n      registerPolyfill = $__1.registerPolyfill,\n      toInteger = $__1.toInteger,\n      toLength = $__1.toLength,\n      toObject = $__1.toObject;\n  function from(arrLike) {\n    var mapFn = arguments[1];\n    var thisArg = arguments[2];\n    var C = this;\n    var items = toObject(arrLike);\n    var mapping = mapFn !== undefined;\n    var k = 0;\n    var arr,\n        len;\n    if (mapping && !isCallable(mapFn)) {\n      throw TypeError();\n    }\n    if (checkIterable(items)) {\n      arr = isConstructor(C) ? new C() : [];\n      for (var $__2 = items[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__3; !($__3 = $__2.next()).done; ) {\n        var item = $__3.value;\n        {\n          if (mapping) {\n            arr[k] = mapFn.call(thisArg, item, k);\n          } else {\n            arr[k] = item;\n          }\n          k++;\n        }\n      }\n      arr.length = k;\n      return arr;\n    }\n    len = toLength(items.length);\n    arr = isConstructor(C) ? new C(len) : new Array(len);\n    for (; k < len; k++) {\n      if (mapping) {\n        arr[k] = typeof thisArg === 'undefined' ? mapFn(items[k], k) : mapFn.call(thisArg, items[k], k);\n      } else {\n        arr[k] = items[k];\n      }\n    }\n    arr.length = len;\n    return arr;\n  }\n  function of() {\n    for (var items = [],\n        $__4 = 0; $__4 < arguments.length; $__4++)\n      items[$__4] = arguments[$__4];\n    var C = this;\n    var len = items.length;\n    var arr = isConstructor(C) ? new C(len) : new Array(len);\n    for (var k = 0; k < len; k++) {\n      arr[k] = items[k];\n    }\n    arr.length = len;\n    return arr;\n  }\n  function fill(value) {\n    var start = arguments[1] !== (void 0) ? arguments[1] : 0;\n    var end = arguments[2];\n    var object = toObject(this);\n    var len = toLength(object.length);\n    var fillStart = toInteger(start);\n    var fillEnd = end !== undefined ? toInteger(end) : len;\n    fillStart = fillStart < 0 ? Math.max(len + fillStart, 0) : Math.min(fillStart, len);\n    fillEnd = fillEnd < 0 ? Math.max(len + fillEnd, 0) : Math.min(fillEnd, len);\n    while (fillStart < fillEnd) {\n      object[fillStart] = value;\n      fillStart++;\n    }\n    return object;\n  }\n  function find(predicate) {\n    var thisArg = arguments[1];\n    return findHelper(this, predicate, thisArg);\n  }\n  function findIndex(predicate) {\n    var thisArg = arguments[1];\n    return findHelper(this, predicate, thisArg, true);\n  }\n  function findHelper(self, predicate) {\n    var thisArg = arguments[2];\n    var returnIndex = arguments[3] !== (void 0) ? arguments[3] : false;\n    var object = toObject(self);\n    var len = toLength(object.length);\n    if (!isCallable(predicate)) {\n      throw TypeError();\n    }\n    for (var i = 0; i < len; i++) {\n      var value = object[i];\n      if (predicate.call(thisArg, value, i, object)) {\n        return returnIndex ? i : value;\n      }\n    }\n    return returnIndex ? -1 : undefined;\n  }\n  function polyfillArray(global) {\n    var $__5 = global,\n        Array = $__5.Array,\n        Object = $__5.Object,\n        Symbol = $__5.Symbol;\n    maybeAddFunctions(Array.prototype, ['entries', entries, 'keys', keys, 'values', values, 'fill', fill, 'find', find, 'findIndex', findIndex]);\n    maybeAddFunctions(Array, ['from', from, 'of', of]);\n    maybeAddIterator(Array.prototype, values, Symbol);\n    maybeAddIterator(Object.getPrototypeOf([].values()), function() {\n      return this;\n    }, Symbol);\n  }\n  registerPolyfill(polyfillArray);\n  return {\n    get from() {\n      return from;\n    },\n    get of() {\n      return of;\n    },\n    get fill() {\n      return fill;\n    },\n    get find() {\n      return find;\n    },\n    get findIndex() {\n      return findIndex;\n    },\n    get polyfillArray() {\n      return polyfillArray;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Array\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Object\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Object\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Object\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      maybeAddFunctions = $__0.maybeAddFunctions,\n      registerPolyfill = $__0.registerPolyfill;\n  var $__1 = $traceurRuntime,\n      defineProperty = $__1.defineProperty,\n      getOwnPropertyDescriptor = $__1.getOwnPropertyDescriptor,\n      getOwnPropertyNames = $__1.getOwnPropertyNames,\n      isPrivateName = $__1.isPrivateName,\n      keys = $__1.keys;\n  function is(left, right) {\n    if (left === right)\n      return left !== 0 || 1 / left === 1 / right;\n    return left !== left && right !== right;\n  }\n  function assign(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      var props = source == null ? [] : keys(source);\n      var p,\n          length = props.length;\n      for (p = 0; p < length; p++) {\n        var name = props[p];\n        if (isPrivateName(name))\n          continue;\n        target[name] = source[name];\n      }\n    }\n    return target;\n  }\n  function mixin(target, source) {\n    var props = getOwnPropertyNames(source);\n    var p,\n        descriptor,\n        length = props.length;\n    for (p = 0; p < length; p++) {\n      var name = props[p];\n      if (isPrivateName(name))\n        continue;\n      descriptor = getOwnPropertyDescriptor(source, props[p]);\n      defineProperty(target, props[p], descriptor);\n    }\n    return target;\n  }\n  function polyfillObject(global) {\n    var Object = global.Object;\n    maybeAddFunctions(Object, ['assign', assign, 'is', is, 'mixin', mixin]);\n  }\n  registerPolyfill(polyfillObject);\n  return {\n    get is() {\n      return is;\n    },\n    get assign() {\n      return assign;\n    },\n    get mixin() {\n      return mixin;\n    },\n    get polyfillObject() {\n      return polyfillObject;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Object\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/Number\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/Number\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/Number\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\"),\n      isNumber = $__0.isNumber,\n      maybeAddConsts = $__0.maybeAddConsts,\n      maybeAddFunctions = $__0.maybeAddFunctions,\n      registerPolyfill = $__0.registerPolyfill,\n      toInteger = $__0.toInteger;\n  var $abs = Math.abs;\n  var $isFinite = isFinite;\n  var $isNaN = isNaN;\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n  var MIN_SAFE_INTEGER = -Math.pow(2, 53) + 1;\n  var EPSILON = Math.pow(2, -52);\n  function NumberIsFinite(number) {\n    return isNumber(number) && $isFinite(number);\n  }\n  ;\n  function isInteger(number) {\n    return NumberIsFinite(number) && toInteger(number) === number;\n  }\n  function NumberIsNaN(number) {\n    return isNumber(number) && $isNaN(number);\n  }\n  ;\n  function isSafeInteger(number) {\n    if (NumberIsFinite(number)) {\n      var integral = toInteger(number);\n      if (integral === number)\n        return $abs(integral) <= MAX_SAFE_INTEGER;\n    }\n    return false;\n  }\n  function polyfillNumber(global) {\n    var Number = global.Number;\n    maybeAddConsts(Number, ['MAX_SAFE_INTEGER', MAX_SAFE_INTEGER, 'MIN_SAFE_INTEGER', MIN_SAFE_INTEGER, 'EPSILON', EPSILON]);\n    maybeAddFunctions(Number, ['isFinite', NumberIsFinite, 'isInteger', isInteger, 'isNaN', NumberIsNaN, 'isSafeInteger', isSafeInteger]);\n  }\n  registerPolyfill(polyfillNumber);\n  return {\n    get MAX_SAFE_INTEGER() {\n      return MAX_SAFE_INTEGER;\n    },\n    get MIN_SAFE_INTEGER() {\n      return MIN_SAFE_INTEGER;\n    },\n    get EPSILON() {\n      return EPSILON;\n    },\n    get isFinite() {\n      return NumberIsFinite;\n    },\n    get isInteger() {\n      return isInteger;\n    },\n    get isNaN() {\n      return NumberIsNaN;\n    },\n    get isSafeInteger() {\n      return isSafeInteger;\n    },\n    get polyfillNumber() {\n      return polyfillNumber;\n    }\n  };\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/Number\" + '');\nSystem.register(\"traceur@0.0.74/src/runtime/polyfills/polyfills\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/polyfills/polyfills\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/polyfills/polyfills\", path);\n  }\n  var polyfillAll = System.get(\"traceur@0.0.74/src/runtime/polyfills/utils\").polyfillAll;\n  polyfillAll(this);\n  var setupGlobals = $traceurRuntime.setupGlobals;\n  $traceurRuntime.setupGlobals = function(global) {\n    setupGlobals(global);\n    polyfillAll(global);\n  };\n  return {};\n});\nSystem.get(\"traceur@0.0.74/src/runtime/polyfills/polyfills\" + '');\nSystem.register(\"traceur@0.0.74/src/Options\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/Options\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/Options\", path);\n  }\n  function enumerableOnlyObject(obj) {\n    var result = Object.create(null);\n    Object.keys(obj).forEach(function(key) {\n      Object.defineProperty(result, key, {\n        enumerable: true,\n        value: obj[key]\n      });\n    });\n    return result;\n  }\n  var optionsV01 = enumerableOnlyObject({\n    annotations: false,\n    arrayComprehension: false,\n    arrowFunctions: true,\n    asyncFunctions: false,\n    blockBinding: true,\n    classes: true,\n    commentCallback: false,\n    computedPropertyNames: true,\n    debug: false,\n    defaultParameters: true,\n    destructuring: true,\n    exponentiation: false,\n    forOf: true,\n    freeVariableChecker: false,\n    generatorComprehension: false,\n    generators: true,\n    memberVariables: false,\n    moduleName: false,\n    modules: 'register',\n    numericLiterals: true,\n    outputLanguage: 'es5',\n    propertyMethods: true,\n    propertyNameShorthand: true,\n    referrer: '',\n    unicodeExpressions: true,\n    restParameters: true,\n    script: false,\n    sourceMaps: false,\n    spread: true,\n    symbols: false,\n    templateLiterals: true,\n    typeAssertionModule: null,\n    typeAssertions: false,\n    types: false,\n    unicodeEscapeSequences: true,\n    validate: false\n  });\n  var versionLockedOptions = optionsV01;\n  var parseOptions = Object.create(null);\n  var transformOptions = Object.create(null);\n  var defaultValues = Object.create(null);\n  var experimentalOptions = Object.create(null);\n  var moduleOptions = ['amd', 'commonjs', 'instantiate', 'inline', 'register'];\n  var Options = function Options() {\n    var options = arguments[0] !== (void 0) ? arguments[0] : Object.create(null);\n    this.reset();\n    Object.defineProperties(this, {\n      modules_: {\n        value: versionLockedOptions.modules,\n        writable: true,\n        enumerable: false\n      },\n      sourceMaps_: {\n        value: versionLockedOptions.sourceMaps,\n        writable: true,\n        enumerable: false\n      }\n    });\n    this.setFromObject(options);\n  };\n  ($traceurRuntime.createClass)(Options, {\n    set experimental(v) {\n      var $__0 = this;\n      v = coerceOptionValue(v);\n      Object.keys(experimentalOptions).forEach((function(name) {\n        $__0[name] = v;\n      }));\n    },\n    get experimental() {\n      var $__0 = this;\n      var value;\n      Object.keys(experimentalOptions).every((function(name) {\n        var currentValue = $__0[name];\n        if (value === undefined) {\n          value = currentValue;\n          return true;\n        }\n        if (currentValue !== value) {\n          value = null;\n          return false;\n        }\n        return true;\n      }));\n      return value;\n    },\n    get modules() {\n      return this.modules_;\n    },\n    set modules(value) {\n      if (typeof value === 'boolean' && !value)\n        value = 'register';\n      if (moduleOptions.indexOf(value) === -1) {\n        throw new Error('Invalid \\'modules\\' option \\'' + value + '\\', not in ' + moduleOptions.join(', '));\n      }\n      this.modules_ = value;\n    },\n    get sourceMaps() {\n      return this.sourceMaps_;\n    },\n    set sourceMaps(value) {\n      if (value === null || typeof value === 'boolean') {\n        this.sourceMaps_ = value ? 'file' : false;\n        return;\n      }\n      if (value === 'file' || value === 'inline' || value === 'memory') {\n        this.sourceMaps_ = value;\n      } else {\n        throw new Error('Option sourceMaps should be ' + '[false|inline|file|memory], not ' + value);\n      }\n    },\n    reset: function() {\n      var allOff = arguments[0];\n      var $__0 = this;\n      var useDefault = allOff === undefined;\n      Object.keys(defaultValues).forEach((function(name) {\n        $__0[name] = useDefault && defaultValues[name];\n      }));\n      this.setDefaults();\n    },\n    setDefaults: function() {\n      this.modules = 'register';\n      this.moduleName = false;\n      this.outputLanguage = 'es5';\n      this.referrer = '';\n      this.sourceMaps = false;\n      this.typeAssertionModule = null;\n    },\n    setFromObject: function(object) {\n      var $__0 = this;\n      Object.keys(this).forEach((function(name) {\n        if (name in object)\n          $__0.setOption(name, object[name]);\n      }));\n      this.modules = object.modules || this.modules;\n      if (typeof object.sourceMaps === 'boolean' || typeof object.sourceMaps === 'string') {\n        this.sourceMaps = object.sourceMaps;\n      }\n      return this;\n    },\n    setOption: function(name, value) {\n      name = toCamelCase(name);\n      if (name in this) {\n        this[name] = value;\n      } else {\n        throw Error('Unknown option: ' + name);\n      }\n    },\n    diff: function(ref) {\n      var $__0 = this;\n      var mismatches = [];\n      Object.keys(options).forEach((function(key) {\n        if ($__0[key] !== ref[key]) {\n          mismatches.push({\n            key: key,\n            now: traceur.options[key],\n            v01: ref[key]\n          });\n        }\n      }));\n      return mismatches;\n    }\n  }, {});\n  ;\n  var options = new Options();\n  var descriptions = {\n    experimental: 'Turns on all experimental features',\n    sourceMaps: 'Generate source map and (\\'file\\') write to .map' + ' or (\\'inline\\') append data URL'\n  };\n  var CommandOptions = function CommandOptions() {\n    $traceurRuntime.superConstructor($CommandOptions).apply(this, arguments);\n  };\n  var $CommandOptions = CommandOptions;\n  ($traceurRuntime.createClass)(CommandOptions, {parseCommand: function(s) {\n      var re = /--([^=]+)(?:=(.+))?/;\n      var m = re.exec(s);\n      if (m) {\n        var value = true;\n        if (typeof m[2] !== 'undefined')\n          value = coerceOptionValue(m[2]);\n        this.setOption(m[1], value);\n      }\n    }}, {\n    fromString: function(s) {\n      return $CommandOptions.fromArgv(s.split(/\\s+/));\n    },\n    fromArgv: function(args) {\n      var options = new $CommandOptions();\n      args.forEach((function(arg) {\n        return options.parseCommand(arg);\n      }));\n      return options;\n    }\n  }, Options);\n  function coerceOptionValue(v) {\n    switch (v) {\n      case 'false':\n        return false;\n      case 'true':\n      case true:\n        return true;\n      default:\n        return !!v && String(v);\n    }\n  }\n  function addOptions(flags, commandOptions) {\n    flags.option('--referrer <name>', 'Bracket output code with System.referrerName=<name>', (function(name) {\n      commandOptions.setOption('referrer', name);\n      System.map = System.semverMap(name);\n      return name;\n    }));\n    flags.option('--type-assertion-module <path>', 'Absolute path to the type assertion module.', (function(path) {\n      commandOptions.setOption('type-assertion-module', path);\n      return path;\n    }));\n    flags.option('--modules <' + moduleOptions.join(', ') + '>', 'select the output format for modules', (function(moduleFormat) {\n      commandOptions.modules = moduleFormat;\n    }));\n    flags.option('--moduleName <string>', '__moduleName value, + sign to use source name, or empty to omit', (function(moduleName) {\n      if (moduleName === '+')\n        moduleName = true;\n      commandOptions.moduleName = moduleName;\n    }));\n    flags.option('--outputLanguage <es6|es5>', 'compilation target language', (function(outputLanguage) {\n      if (outputLanguage === 'es6' || outputLanguage === 'es5')\n        commandOptions.outputLanguage = outputLanguage;\n      else\n        throw new Error('outputLanguage must be one of es5, es6');\n    }));\n    flags.option('--source-maps [file|inline|memory]', 'sourceMaps generated to file or inline with data: URL', (function(to) {\n      return commandOptions.sourceMaps = to;\n    }));\n    flags.option('--experimental', 'Turns on all experimental features', (function() {\n      commandOptions.experimental = true;\n    }));\n    Object.keys(commandOptions).forEach(function(name) {\n      var dashedName = toDashCase(name);\n      if (flags.optionFor('--' + name) || flags.optionFor('--' + dashedName)) {\n        return;\n      } else if ((name in parseOptions) && (name in transformOptions)) {\n        flags.option('--' + dashedName + ' [true|false|parse]', descriptions[name]);\n        flags.on(dashedName, (function(value) {\n          return commandOptions.setOption(dashedName, value);\n        }));\n      } else if (commandOptions[name] !== null) {\n        flags.option('--' + dashedName, descriptions[name]);\n        flags.on(dashedName, (function() {\n          return commandOptions.setOption(dashedName, true);\n        }));\n      } else {\n        throw new Error('Unexpected null commandOption ' + name);\n      }\n    });\n    commandOptions.setDefaults();\n  }\n  function toCamelCase(s) {\n    return s.replace(/-\\w/g, function(ch) {\n      return ch[1].toUpperCase();\n    });\n  }\n  function toDashCase(s) {\n    return s.replace(/[A-Z]/g, function(ch) {\n      return '-' + ch.toLowerCase();\n    });\n  }\n  var EXPERIMENTAL = 0;\n  var ON_BY_DEFAULT = 1;\n  function addFeatureOption(name, kind) {\n    if (kind === EXPERIMENTAL)\n      experimentalOptions[name] = true;\n    Object.defineProperty(parseOptions, name, {\n      get: function() {\n        return !!options[name];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(transformOptions, name, {\n      get: function() {\n        var v = options[name];\n        if (v === 'parse')\n          return false;\n        return v;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    var defaultValue = options[name] || kind === ON_BY_DEFAULT;\n    options[name] = defaultValue;\n    defaultValues[name] = defaultValue;\n  }\n  function addBoolOption(name) {\n    defaultValues[name] = false;\n    options[name] = false;\n  }\n  addFeatureOption('arrowFunctions', ON_BY_DEFAULT);\n  addFeatureOption('blockBinding', ON_BY_DEFAULT);\n  addFeatureOption('classes', ON_BY_DEFAULT);\n  addFeatureOption('computedPropertyNames', ON_BY_DEFAULT);\n  addFeatureOption('defaultParameters', ON_BY_DEFAULT);\n  addFeatureOption('destructuring', ON_BY_DEFAULT);\n  addFeatureOption('forOf', ON_BY_DEFAULT);\n  addFeatureOption('generators', ON_BY_DEFAULT);\n  addFeatureOption('modules', 'SPECIAL');\n  addFeatureOption('numericLiterals', ON_BY_DEFAULT);\n  addFeatureOption('propertyMethods', ON_BY_DEFAULT);\n  addFeatureOption('propertyNameShorthand', ON_BY_DEFAULT);\n  addFeatureOption('restParameters', ON_BY_DEFAULT);\n  addFeatureOption('sourceMaps', 'SPECIAL');\n  addFeatureOption('spread', ON_BY_DEFAULT);\n  addFeatureOption('templateLiterals', ON_BY_DEFAULT);\n  addFeatureOption('unicodeEscapeSequences', ON_BY_DEFAULT);\n  addFeatureOption('unicodeExpressions', ON_BY_DEFAULT);\n  addFeatureOption('annotations', EXPERIMENTAL);\n  addFeatureOption('arrayComprehension', EXPERIMENTAL);\n  addFeatureOption('asyncFunctions', EXPERIMENTAL);\n  addFeatureOption('exponentiation', EXPERIMENTAL);\n  addFeatureOption('generatorComprehension', EXPERIMENTAL);\n  addFeatureOption('symbols', EXPERIMENTAL);\n  addFeatureOption('types', EXPERIMENTAL);\n  addFeatureOption('memberVariables', EXPERIMENTAL);\n  addBoolOption('commentCallback');\n  addBoolOption('debug');\n  addBoolOption('freeVariableChecker');\n  addBoolOption('script');\n  addBoolOption('typeAssertions');\n  addBoolOption('validate');\n  return {\n    get optionsV01() {\n      return optionsV01;\n    },\n    get versionLockedOptions() {\n      return versionLockedOptions;\n    },\n    get parseOptions() {\n      return parseOptions;\n    },\n    get transformOptions() {\n      return transformOptions;\n    },\n    get Options() {\n      return Options;\n    },\n    get options() {\n      return options;\n    },\n    get CommandOptions() {\n      return CommandOptions;\n    },\n    get addOptions() {\n      return addOptions;\n    },\n    get toDashCase() {\n      return toDashCase;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/TokenType\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/TokenType\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/TokenType\", path);\n  }\n  var AMPERSAND = '&';\n  var AMPERSAND_EQUAL = '&=';\n  var AND = '&&';\n  var ARROW = '=>';\n  var AT = '@';\n  var BACK_QUOTE = '`';\n  var BANG = '!';\n  var BAR = '|';\n  var BAR_EQUAL = '|=';\n  var BREAK = 'break';\n  var CARET = '^';\n  var CARET_EQUAL = '^=';\n  var CASE = 'case';\n  var CATCH = 'catch';\n  var CLASS = 'class';\n  var CLOSE_ANGLE = '>';\n  var CLOSE_CURLY = '}';\n  var CLOSE_PAREN = ')';\n  var CLOSE_SQUARE = ']';\n  var COLON = ':';\n  var COMMA = ',';\n  var CONST = 'const';\n  var CONTINUE = 'continue';\n  var DEBUGGER = 'debugger';\n  var DEFAULT = 'default';\n  var DELETE = 'delete';\n  var DO = 'do';\n  var DOT_DOT_DOT = '...';\n  var ELSE = 'else';\n  var END_OF_FILE = 'End of File';\n  var ENUM = 'enum';\n  var EQUAL = '=';\n  var EQUAL_EQUAL = '==';\n  var EQUAL_EQUAL_EQUAL = '===';\n  var ERROR = 'error';\n  var EXPORT = 'export';\n  var EXTENDS = 'extends';\n  var FALSE = 'false';\n  var FINALLY = 'finally';\n  var FOR = 'for';\n  var FUNCTION = 'function';\n  var GREATER_EQUAL = '>=';\n  var IDENTIFIER = 'identifier';\n  var IF = 'if';\n  var IMPLEMENTS = 'implements';\n  var IMPORT = 'import';\n  var IN = 'in';\n  var INSTANCEOF = 'instanceof';\n  var INTERFACE = 'interface';\n  var LEFT_SHIFT = '<<';\n  var LEFT_SHIFT_EQUAL = '<<=';\n  var LESS_EQUAL = '<=';\n  var LET = 'let';\n  var MINUS = '-';\n  var MINUS_EQUAL = '-=';\n  var MINUS_MINUS = '--';\n  var NEW = 'new';\n  var NO_SUBSTITUTION_TEMPLATE = 'no substitution template';\n  var NOT_EQUAL = '!=';\n  var NOT_EQUAL_EQUAL = '!==';\n  var NULL = 'null';\n  var NUMBER = 'number literal';\n  var OPEN_ANGLE = '<';\n  var OPEN_CURLY = '{';\n  var OPEN_PAREN = '(';\n  var OPEN_SQUARE = '[';\n  var OR = '||';\n  var PACKAGE = 'package';\n  var PERCENT = '%';\n  var PERCENT_EQUAL = '%=';\n  var PERIOD = '.';\n  var PLUS = '+';\n  var PLUS_EQUAL = '+=';\n  var PLUS_PLUS = '++';\n  var PRIVATE = 'private';\n  var PROTECTED = 'protected';\n  var PUBLIC = 'public';\n  var QUESTION = '?';\n  var REGULAR_EXPRESSION = 'regular expression literal';\n  var RETURN = 'return';\n  var RIGHT_SHIFT = '>>';\n  var RIGHT_SHIFT_EQUAL = '>>=';\n  var SEMI_COLON = ';';\n  var SLASH = '/';\n  var SLASH_EQUAL = '/=';\n  var STAR = '*';\n  var STAR_EQUAL = '*=';\n  var STAR_STAR = '**';\n  var STAR_STAR_EQUAL = '**=';\n  var STATIC = 'static';\n  var STRING = 'string literal';\n  var SUPER = 'super';\n  var SWITCH = 'switch';\n  var TEMPLATE_HEAD = 'template head';\n  var TEMPLATE_MIDDLE = 'template middle';\n  var TEMPLATE_TAIL = 'template tail';\n  var THIS = 'this';\n  var THROW = 'throw';\n  var TILDE = '~';\n  var TRUE = 'true';\n  var TRY = 'try';\n  var TYPEOF = 'typeof';\n  var UNSIGNED_RIGHT_SHIFT = '>>>';\n  var UNSIGNED_RIGHT_SHIFT_EQUAL = '>>>=';\n  var VAR = 'var';\n  var VOID = 'void';\n  var WHILE = 'while';\n  var WITH = 'with';\n  var YIELD = 'yield';\n  return {\n    get AMPERSAND() {\n      return AMPERSAND;\n    },\n    get AMPERSAND_EQUAL() {\n      return AMPERSAND_EQUAL;\n    },\n    get AND() {\n      return AND;\n    },\n    get ARROW() {\n      return ARROW;\n    },\n    get AT() {\n      return AT;\n    },\n    get BACK_QUOTE() {\n      return BACK_QUOTE;\n    },\n    get BANG() {\n      return BANG;\n    },\n    get BAR() {\n      return BAR;\n    },\n    get BAR_EQUAL() {\n      return BAR_EQUAL;\n    },\n    get BREAK() {\n      return BREAK;\n    },\n    get CARET() {\n      return CARET;\n    },\n    get CARET_EQUAL() {\n      return CARET_EQUAL;\n    },\n    get CASE() {\n      return CASE;\n    },\n    get CATCH() {\n      return CATCH;\n    },\n    get CLASS() {\n      return CLASS;\n    },\n    get CLOSE_ANGLE() {\n      return CLOSE_ANGLE;\n    },\n    get CLOSE_CURLY() {\n      return CLOSE_CURLY;\n    },\n    get CLOSE_PAREN() {\n      return CLOSE_PAREN;\n    },\n    get CLOSE_SQUARE() {\n      return CLOSE_SQUARE;\n    },\n    get COLON() {\n      return COLON;\n    },\n    get COMMA() {\n      return COMMA;\n    },\n    get CONST() {\n      return CONST;\n    },\n    get CONTINUE() {\n      return CONTINUE;\n    },\n    get DEBUGGER() {\n      return DEBUGGER;\n    },\n    get DEFAULT() {\n      return DEFAULT;\n    },\n    get DELETE() {\n      return DELETE;\n    },\n    get DO() {\n      return DO;\n    },\n    get DOT_DOT_DOT() {\n      return DOT_DOT_DOT;\n    },\n    get ELSE() {\n      return ELSE;\n    },\n    get END_OF_FILE() {\n      return END_OF_FILE;\n    },\n    get ENUM() {\n      return ENUM;\n    },\n    get EQUAL() {\n      return EQUAL;\n    },\n    get EQUAL_EQUAL() {\n      return EQUAL_EQUAL;\n    },\n    get EQUAL_EQUAL_EQUAL() {\n      return EQUAL_EQUAL_EQUAL;\n    },\n    get ERROR() {\n      return ERROR;\n    },\n    get EXPORT() {\n      return EXPORT;\n    },\n    get EXTENDS() {\n      return EXTENDS;\n    },\n    get FALSE() {\n      return FALSE;\n    },\n    get FINALLY() {\n      return FINALLY;\n    },\n    get FOR() {\n      return FOR;\n    },\n    get FUNCTION() {\n      return FUNCTION;\n    },\n    get GREATER_EQUAL() {\n      return GREATER_EQUAL;\n    },\n    get IDENTIFIER() {\n      return IDENTIFIER;\n    },\n    get IF() {\n      return IF;\n    },\n    get IMPLEMENTS() {\n      return IMPLEMENTS;\n    },\n    get IMPORT() {\n      return IMPORT;\n    },\n    get IN() {\n      return IN;\n    },\n    get INSTANCEOF() {\n      return INSTANCEOF;\n    },\n    get INTERFACE() {\n      return INTERFACE;\n    },\n    get LEFT_SHIFT() {\n      return LEFT_SHIFT;\n    },\n    get LEFT_SHIFT_EQUAL() {\n      return LEFT_SHIFT_EQUAL;\n    },\n    get LESS_EQUAL() {\n      return LESS_EQUAL;\n    },\n    get LET() {\n      return LET;\n    },\n    get MINUS() {\n      return MINUS;\n    },\n    get MINUS_EQUAL() {\n      return MINUS_EQUAL;\n    },\n    get MINUS_MINUS() {\n      return MINUS_MINUS;\n    },\n    get NEW() {\n      return NEW;\n    },\n    get NO_SUBSTITUTION_TEMPLATE() {\n      return NO_SUBSTITUTION_TEMPLATE;\n    },\n    get NOT_EQUAL() {\n      return NOT_EQUAL;\n    },\n    get NOT_EQUAL_EQUAL() {\n      return NOT_EQUAL_EQUAL;\n    },\n    get NULL() {\n      return NULL;\n    },\n    get NUMBER() {\n      return NUMBER;\n    },\n    get OPEN_ANGLE() {\n      return OPEN_ANGLE;\n    },\n    get OPEN_CURLY() {\n      return OPEN_CURLY;\n    },\n    get OPEN_PAREN() {\n      return OPEN_PAREN;\n    },\n    get OPEN_SQUARE() {\n      return OPEN_SQUARE;\n    },\n    get OR() {\n      return OR;\n    },\n    get PACKAGE() {\n      return PACKAGE;\n    },\n    get PERCENT() {\n      return PERCENT;\n    },\n    get PERCENT_EQUAL() {\n      return PERCENT_EQUAL;\n    },\n    get PERIOD() {\n      return PERIOD;\n    },\n    get PLUS() {\n      return PLUS;\n    },\n    get PLUS_EQUAL() {\n      return PLUS_EQUAL;\n    },\n    get PLUS_PLUS() {\n      return PLUS_PLUS;\n    },\n    get PRIVATE() {\n      return PRIVATE;\n    },\n    get PROTECTED() {\n      return PROTECTED;\n    },\n    get PUBLIC() {\n      return PUBLIC;\n    },\n    get QUESTION() {\n      return QUESTION;\n    },\n    get REGULAR_EXPRESSION() {\n      return REGULAR_EXPRESSION;\n    },\n    get RETURN() {\n      return RETURN;\n    },\n    get RIGHT_SHIFT() {\n      return RIGHT_SHIFT;\n    },\n    get RIGHT_SHIFT_EQUAL() {\n      return RIGHT_SHIFT_EQUAL;\n    },\n    get SEMI_COLON() {\n      return SEMI_COLON;\n    },\n    get SLASH() {\n      return SLASH;\n    },\n    get SLASH_EQUAL() {\n      return SLASH_EQUAL;\n    },\n    get STAR() {\n      return STAR;\n    },\n    get STAR_EQUAL() {\n      return STAR_EQUAL;\n    },\n    get STAR_STAR() {\n      return STAR_STAR;\n    },\n    get STAR_STAR_EQUAL() {\n      return STAR_STAR_EQUAL;\n    },\n    get STATIC() {\n      return STATIC;\n    },\n    get STRING() {\n      return STRING;\n    },\n    get SUPER() {\n      return SUPER;\n    },\n    get SWITCH() {\n      return SWITCH;\n    },\n    get TEMPLATE_HEAD() {\n      return TEMPLATE_HEAD;\n    },\n    get TEMPLATE_MIDDLE() {\n      return TEMPLATE_MIDDLE;\n    },\n    get TEMPLATE_TAIL() {\n      return TEMPLATE_TAIL;\n    },\n    get THIS() {\n      return THIS;\n    },\n    get THROW() {\n      return THROW;\n    },\n    get TILDE() {\n      return TILDE;\n    },\n    get TRUE() {\n      return TRUE;\n    },\n    get TRY() {\n      return TRY;\n    },\n    get TYPEOF() {\n      return TYPEOF;\n    },\n    get UNSIGNED_RIGHT_SHIFT() {\n      return UNSIGNED_RIGHT_SHIFT;\n    },\n    get UNSIGNED_RIGHT_SHIFT_EQUAL() {\n      return UNSIGNED_RIGHT_SHIFT_EQUAL;\n    },\n    get VAR() {\n      return VAR;\n    },\n    get VOID() {\n      return VOID;\n    },\n    get WHILE() {\n      return WHILE;\n    },\n    get WITH() {\n      return WITH;\n    },\n    get YIELD() {\n      return YIELD;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/trees/ParseTreeType\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\", path);\n  }\n  var ANNOTATION = 'ANNOTATION';\n  var ANON_BLOCK = 'ANON_BLOCK';\n  var ARGUMENT_LIST = 'ARGUMENT_LIST';\n  var ARRAY_COMPREHENSION = 'ARRAY_COMPREHENSION';\n  var ARRAY_LITERAL_EXPRESSION = 'ARRAY_LITERAL_EXPRESSION';\n  var ARRAY_PATTERN = 'ARRAY_PATTERN';\n  var ARROW_FUNCTION_EXPRESSION = 'ARROW_FUNCTION_EXPRESSION';\n  var ASSIGNMENT_ELEMENT = 'ASSIGNMENT_ELEMENT';\n  var AWAIT_EXPRESSION = 'AWAIT_EXPRESSION';\n  var BINARY_EXPRESSION = 'BINARY_EXPRESSION';\n  var BINDING_ELEMENT = 'BINDING_ELEMENT';\n  var BINDING_IDENTIFIER = 'BINDING_IDENTIFIER';\n  var BLOCK = 'BLOCK';\n  var BREAK_STATEMENT = 'BREAK_STATEMENT';\n  var CALL_EXPRESSION = 'CALL_EXPRESSION';\n  var CASE_CLAUSE = 'CASE_CLAUSE';\n  var CATCH = 'CATCH';\n  var CLASS_DECLARATION = 'CLASS_DECLARATION';\n  var CLASS_EXPRESSION = 'CLASS_EXPRESSION';\n  var COMMA_EXPRESSION = 'COMMA_EXPRESSION';\n  var COMPREHENSION_FOR = 'COMPREHENSION_FOR';\n  var COMPREHENSION_IF = 'COMPREHENSION_IF';\n  var COMPUTED_PROPERTY_NAME = 'COMPUTED_PROPERTY_NAME';\n  var CONDITIONAL_EXPRESSION = 'CONDITIONAL_EXPRESSION';\n  var CONTINUE_STATEMENT = 'CONTINUE_STATEMENT';\n  var COVER_FORMALS = 'COVER_FORMALS';\n  var COVER_INITIALIZED_NAME = 'COVER_INITIALIZED_NAME';\n  var DEBUGGER_STATEMENT = 'DEBUGGER_STATEMENT';\n  var DEFAULT_CLAUSE = 'DEFAULT_CLAUSE';\n  var DO_WHILE_STATEMENT = 'DO_WHILE_STATEMENT';\n  var EMPTY_STATEMENT = 'EMPTY_STATEMENT';\n  var EXPORT_DECLARATION = 'EXPORT_DECLARATION';\n  var EXPORT_DEFAULT = 'EXPORT_DEFAULT';\n  var EXPORT_SPECIFIER = 'EXPORT_SPECIFIER';\n  var EXPORT_SPECIFIER_SET = 'EXPORT_SPECIFIER_SET';\n  var EXPORT_STAR = 'EXPORT_STAR';\n  var EXPRESSION_STATEMENT = 'EXPRESSION_STATEMENT';\n  var FINALLY = 'FINALLY';\n  var FOR_IN_STATEMENT = 'FOR_IN_STATEMENT';\n  var FOR_OF_STATEMENT = 'FOR_OF_STATEMENT';\n  var FOR_STATEMENT = 'FOR_STATEMENT';\n  var FORMAL_PARAMETER = 'FORMAL_PARAMETER';\n  var FORMAL_PARAMETER_LIST = 'FORMAL_PARAMETER_LIST';\n  var FUNCTION_BODY = 'FUNCTION_BODY';\n  var FUNCTION_DECLARATION = 'FUNCTION_DECLARATION';\n  var FUNCTION_EXPRESSION = 'FUNCTION_EXPRESSION';\n  var GENERATOR_COMPREHENSION = 'GENERATOR_COMPREHENSION';\n  var GET_ACCESSOR = 'GET_ACCESSOR';\n  var IDENTIFIER_EXPRESSION = 'IDENTIFIER_EXPRESSION';\n  var IF_STATEMENT = 'IF_STATEMENT';\n  var IMPORT_DECLARATION = 'IMPORT_DECLARATION';\n  var IMPORT_SPECIFIER = 'IMPORT_SPECIFIER';\n  var IMPORT_SPECIFIER_SET = 'IMPORT_SPECIFIER_SET';\n  var IMPORTED_BINDING = 'IMPORTED_BINDING';\n  var LABELLED_STATEMENT = 'LABELLED_STATEMENT';\n  var LITERAL_EXPRESSION = 'LITERAL_EXPRESSION';\n  var LITERAL_PROPERTY_NAME = 'LITERAL_PROPERTY_NAME';\n  var MEMBER_EXPRESSION = 'MEMBER_EXPRESSION';\n  var MEMBER_LOOKUP_EXPRESSION = 'MEMBER_LOOKUP_EXPRESSION';\n  var MODULE = 'MODULE';\n  var MODULE_DECLARATION = 'MODULE_DECLARATION';\n  var MODULE_SPECIFIER = 'MODULE_SPECIFIER';\n  var NAMED_EXPORT = 'NAMED_EXPORT';\n  var NEW_EXPRESSION = 'NEW_EXPRESSION';\n  var OBJECT_LITERAL_EXPRESSION = 'OBJECT_LITERAL_EXPRESSION';\n  var OBJECT_PATTERN = 'OBJECT_PATTERN';\n  var OBJECT_PATTERN_FIELD = 'OBJECT_PATTERN_FIELD';\n  var PAREN_EXPRESSION = 'PAREN_EXPRESSION';\n  var POSTFIX_EXPRESSION = 'POSTFIX_EXPRESSION';\n  var PREDEFINED_TYPE = 'PREDEFINED_TYPE';\n  var PROPERTY_METHOD_ASSIGNMENT = 'PROPERTY_METHOD_ASSIGNMENT';\n  var PROPERTY_NAME_ASSIGNMENT = 'PROPERTY_NAME_ASSIGNMENT';\n  var PROPERTY_NAME_SHORTHAND = 'PROPERTY_NAME_SHORTHAND';\n  var PROPERTY_VARIABLE_DECLARATION = 'PROPERTY_VARIABLE_DECLARATION';\n  var REST_PARAMETER = 'REST_PARAMETER';\n  var RETURN_STATEMENT = 'RETURN_STATEMENT';\n  var SCRIPT = 'SCRIPT';\n  var SET_ACCESSOR = 'SET_ACCESSOR';\n  var SPREAD_EXPRESSION = 'SPREAD_EXPRESSION';\n  var SPREAD_PATTERN_ELEMENT = 'SPREAD_PATTERN_ELEMENT';\n  var STATE_MACHINE = 'STATE_MACHINE';\n  var SUPER_EXPRESSION = 'SUPER_EXPRESSION';\n  var SWITCH_STATEMENT = 'SWITCH_STATEMENT';\n  var SYNTAX_ERROR_TREE = 'SYNTAX_ERROR_TREE';\n  var TEMPLATE_LITERAL_EXPRESSION = 'TEMPLATE_LITERAL_EXPRESSION';\n  var TEMPLATE_LITERAL_PORTION = 'TEMPLATE_LITERAL_PORTION';\n  var TEMPLATE_SUBSTITUTION = 'TEMPLATE_SUBSTITUTION';\n  var THIS_EXPRESSION = 'THIS_EXPRESSION';\n  var THROW_STATEMENT = 'THROW_STATEMENT';\n  var TRY_STATEMENT = 'TRY_STATEMENT';\n  var TYPE_ARGUMENTS = 'TYPE_ARGUMENTS';\n  var TYPE_NAME = 'TYPE_NAME';\n  var TYPE_REFERENCE = 'TYPE_REFERENCE';\n  var UNARY_EXPRESSION = 'UNARY_EXPRESSION';\n  var VARIABLE_DECLARATION = 'VARIABLE_DECLARATION';\n  var VARIABLE_DECLARATION_LIST = 'VARIABLE_DECLARATION_LIST';\n  var VARIABLE_STATEMENT = 'VARIABLE_STATEMENT';\n  var WHILE_STATEMENT = 'WHILE_STATEMENT';\n  var WITH_STATEMENT = 'WITH_STATEMENT';\n  var YIELD_EXPRESSION = 'YIELD_EXPRESSION';\n  return {\n    get ANNOTATION() {\n      return ANNOTATION;\n    },\n    get ANON_BLOCK() {\n      return ANON_BLOCK;\n    },\n    get ARGUMENT_LIST() {\n      return ARGUMENT_LIST;\n    },\n    get ARRAY_COMPREHENSION() {\n      return ARRAY_COMPREHENSION;\n    },\n    get ARRAY_LITERAL_EXPRESSION() {\n      return ARRAY_LITERAL_EXPRESSION;\n    },\n    get ARRAY_PATTERN() {\n      return ARRAY_PATTERN;\n    },\n    get ARROW_FUNCTION_EXPRESSION() {\n      return ARROW_FUNCTION_EXPRESSION;\n    },\n    get ASSIGNMENT_ELEMENT() {\n      return ASSIGNMENT_ELEMENT;\n    },\n    get AWAIT_EXPRESSION() {\n      return AWAIT_EXPRESSION;\n    },\n    get BINARY_EXPRESSION() {\n      return BINARY_EXPRESSION;\n    },\n    get BINDING_ELEMENT() {\n      return BINDING_ELEMENT;\n    },\n    get BINDING_IDENTIFIER() {\n      return BINDING_IDENTIFIER;\n    },\n    get BLOCK() {\n      return BLOCK;\n    },\n    get BREAK_STATEMENT() {\n      return BREAK_STATEMENT;\n    },\n    get CALL_EXPRESSION() {\n      return CALL_EXPRESSION;\n    },\n    get CASE_CLAUSE() {\n      return CASE_CLAUSE;\n    },\n    get CATCH() {\n      return CATCH;\n    },\n    get CLASS_DECLARATION() {\n      return CLASS_DECLARATION;\n    },\n    get CLASS_EXPRESSION() {\n      return CLASS_EXPRESSION;\n    },\n    get COMMA_EXPRESSION() {\n      return COMMA_EXPRESSION;\n    },\n    get COMPREHENSION_FOR() {\n      return COMPREHENSION_FOR;\n    },\n    get COMPREHENSION_IF() {\n      return COMPREHENSION_IF;\n    },\n    get COMPUTED_PROPERTY_NAME() {\n      return COMPUTED_PROPERTY_NAME;\n    },\n    get CONDITIONAL_EXPRESSION() {\n      return CONDITIONAL_EXPRESSION;\n    },\n    get CONTINUE_STATEMENT() {\n      return CONTINUE_STATEMENT;\n    },\n    get COVER_FORMALS() {\n      return COVER_FORMALS;\n    },\n    get COVER_INITIALIZED_NAME() {\n      return COVER_INITIALIZED_NAME;\n    },\n    get DEBUGGER_STATEMENT() {\n      return DEBUGGER_STATEMENT;\n    },\n    get DEFAULT_CLAUSE() {\n      return DEFAULT_CLAUSE;\n    },\n    get DO_WHILE_STATEMENT() {\n      return DO_WHILE_STATEMENT;\n    },\n    get EMPTY_STATEMENT() {\n      return EMPTY_STATEMENT;\n    },\n    get EXPORT_DECLARATION() {\n      return EXPORT_DECLARATION;\n    },\n    get EXPORT_DEFAULT() {\n      return EXPORT_DEFAULT;\n    },\n    get EXPORT_SPECIFIER() {\n      return EXPORT_SPECIFIER;\n    },\n    get EXPORT_SPECIFIER_SET() {\n      return EXPORT_SPECIFIER_SET;\n    },\n    get EXPORT_STAR() {\n      return EXPORT_STAR;\n    },\n    get EXPRESSION_STATEMENT() {\n      return EXPRESSION_STATEMENT;\n    },\n    get FINALLY() {\n      return FINALLY;\n    },\n    get FOR_IN_STATEMENT() {\n      return FOR_IN_STATEMENT;\n    },\n    get FOR_OF_STATEMENT() {\n      return FOR_OF_STATEMENT;\n    },\n    get FOR_STATEMENT() {\n      return FOR_STATEMENT;\n    },\n    get FORMAL_PARAMETER() {\n      return FORMAL_PARAMETER;\n    },\n    get FORMAL_PARAMETER_LIST() {\n      return FORMAL_PARAMETER_LIST;\n    },\n    get FUNCTION_BODY() {\n      return FUNCTION_BODY;\n    },\n    get FUNCTION_DECLARATION() {\n      return FUNCTION_DECLARATION;\n    },\n    get FUNCTION_EXPRESSION() {\n      return FUNCTION_EXPRESSION;\n    },\n    get GENERATOR_COMPREHENSION() {\n      return GENERATOR_COMPREHENSION;\n    },\n    get GET_ACCESSOR() {\n      return GET_ACCESSOR;\n    },\n    get IDENTIFIER_EXPRESSION() {\n      return IDENTIFIER_EXPRESSION;\n    },\n    get IF_STATEMENT() {\n      return IF_STATEMENT;\n    },\n    get IMPORT_DECLARATION() {\n      return IMPORT_DECLARATION;\n    },\n    get IMPORT_SPECIFIER() {\n      return IMPORT_SPECIFIER;\n    },\n    get IMPORT_SPECIFIER_SET() {\n      return IMPORT_SPECIFIER_SET;\n    },\n    get IMPORTED_BINDING() {\n      return IMPORTED_BINDING;\n    },\n    get LABELLED_STATEMENT() {\n      return LABELLED_STATEMENT;\n    },\n    get LITERAL_EXPRESSION() {\n      return LITERAL_EXPRESSION;\n    },\n    get LITERAL_PROPERTY_NAME() {\n      return LITERAL_PROPERTY_NAME;\n    },\n    get MEMBER_EXPRESSION() {\n      return MEMBER_EXPRESSION;\n    },\n    get MEMBER_LOOKUP_EXPRESSION() {\n      return MEMBER_LOOKUP_EXPRESSION;\n    },\n    get MODULE() {\n      return MODULE;\n    },\n    get MODULE_DECLARATION() {\n      return MODULE_DECLARATION;\n    },\n    get MODULE_SPECIFIER() {\n      return MODULE_SPECIFIER;\n    },\n    get NAMED_EXPORT() {\n      return NAMED_EXPORT;\n    },\n    get NEW_EXPRESSION() {\n      return NEW_EXPRESSION;\n    },\n    get OBJECT_LITERAL_EXPRESSION() {\n      return OBJECT_LITERAL_EXPRESSION;\n    },\n    get OBJECT_PATTERN() {\n      return OBJECT_PATTERN;\n    },\n    get OBJECT_PATTERN_FIELD() {\n      return OBJECT_PATTERN_FIELD;\n    },\n    get PAREN_EXPRESSION() {\n      return PAREN_EXPRESSION;\n    },\n    get POSTFIX_EXPRESSION() {\n      return POSTFIX_EXPRESSION;\n    },\n    get PREDEFINED_TYPE() {\n      return PREDEFINED_TYPE;\n    },\n    get PROPERTY_METHOD_ASSIGNMENT() {\n      return PROPERTY_METHOD_ASSIGNMENT;\n    },\n    get PROPERTY_NAME_ASSIGNMENT() {\n      return PROPERTY_NAME_ASSIGNMENT;\n    },\n    get PROPERTY_NAME_SHORTHAND() {\n      return PROPERTY_NAME_SHORTHAND;\n    },\n    get PROPERTY_VARIABLE_DECLARATION() {\n      return PROPERTY_VARIABLE_DECLARATION;\n    },\n    get REST_PARAMETER() {\n      return REST_PARAMETER;\n    },\n    get RETURN_STATEMENT() {\n      return RETURN_STATEMENT;\n    },\n    get SCRIPT() {\n      return SCRIPT;\n    },\n    get SET_ACCESSOR() {\n      return SET_ACCESSOR;\n    },\n    get SPREAD_EXPRESSION() {\n      return SPREAD_EXPRESSION;\n    },\n    get SPREAD_PATTERN_ELEMENT() {\n      return SPREAD_PATTERN_ELEMENT;\n    },\n    get STATE_MACHINE() {\n      return STATE_MACHINE;\n    },\n    get SUPER_EXPRESSION() {\n      return SUPER_EXPRESSION;\n    },\n    get SWITCH_STATEMENT() {\n      return SWITCH_STATEMENT;\n    },\n    get SYNTAX_ERROR_TREE() {\n      return SYNTAX_ERROR_TREE;\n    },\n    get TEMPLATE_LITERAL_EXPRESSION() {\n      return TEMPLATE_LITERAL_EXPRESSION;\n    },\n    get TEMPLATE_LITERAL_PORTION() {\n      return TEMPLATE_LITERAL_PORTION;\n    },\n    get TEMPLATE_SUBSTITUTION() {\n      return TEMPLATE_SUBSTITUTION;\n    },\n    get THIS_EXPRESSION() {\n      return THIS_EXPRESSION;\n    },\n    get THROW_STATEMENT() {\n      return THROW_STATEMENT;\n    },\n    get TRY_STATEMENT() {\n      return TRY_STATEMENT;\n    },\n    get TYPE_ARGUMENTS() {\n      return TYPE_ARGUMENTS;\n    },\n    get TYPE_NAME() {\n      return TYPE_NAME;\n    },\n    get TYPE_REFERENCE() {\n      return TYPE_REFERENCE;\n    },\n    get UNARY_EXPRESSION() {\n      return UNARY_EXPRESSION;\n    },\n    get VARIABLE_DECLARATION() {\n      return VARIABLE_DECLARATION;\n    },\n    get VARIABLE_DECLARATION_LIST() {\n      return VARIABLE_DECLARATION_LIST;\n    },\n    get VARIABLE_STATEMENT() {\n      return VARIABLE_STATEMENT;\n    },\n    get WHILE_STATEMENT() {\n      return WHILE_STATEMENT;\n    },\n    get WITH_STATEMENT() {\n      return WITH_STATEMENT;\n    },\n    get YIELD_EXPRESSION() {\n      return YIELD_EXPRESSION;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/ParseTreeVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\", path);\n  }\n  var ParseTreeVisitor = function ParseTreeVisitor() {};\n  ($traceurRuntime.createClass)(ParseTreeVisitor, {\n    visitAny: function(tree) {\n      tree && tree.visit(this);\n    },\n    visit: function(tree) {\n      this.visitAny(tree);\n    },\n    visitList: function(list) {\n      if (list) {\n        for (var i = 0; i < list.length; i++) {\n          this.visitAny(list[i]);\n        }\n      }\n    },\n    visitStateMachine: function(tree) {\n      throw Error('State machines should not live outside of the GeneratorTransformer.');\n    },\n    visitAnnotation: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.args);\n    },\n    visitAnonBlock: function(tree) {\n      this.visitList(tree.statements);\n    },\n    visitArgumentList: function(tree) {\n      this.visitList(tree.args);\n    },\n    visitArrayComprehension: function(tree) {\n      this.visitList(tree.comprehensionList);\n      this.visitAny(tree.expression);\n    },\n    visitArrayLiteralExpression: function(tree) {\n      this.visitList(tree.elements);\n    },\n    visitArrayPattern: function(tree) {\n      this.visitList(tree.elements);\n    },\n    visitArrowFunctionExpression: function(tree) {\n      this.visitAny(tree.parameterList);\n      this.visitAny(tree.body);\n    },\n    visitAssignmentElement: function(tree) {\n      this.visitAny(tree.assignment);\n      this.visitAny(tree.initializer);\n    },\n    visitAwaitExpression: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitBinaryExpression: function(tree) {\n      this.visitAny(tree.left);\n      this.visitAny(tree.right);\n    },\n    visitBindingElement: function(tree) {\n      this.visitAny(tree.binding);\n      this.visitAny(tree.initializer);\n    },\n    visitBindingIdentifier: function(tree) {},\n    visitBlock: function(tree) {\n      this.visitList(tree.statements);\n    },\n    visitBreakStatement: function(tree) {},\n    visitCallExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.visitAny(tree.args);\n    },\n    visitCaseClause: function(tree) {\n      this.visitAny(tree.expression);\n      this.visitList(tree.statements);\n    },\n    visitCatch: function(tree) {\n      this.visitAny(tree.binding);\n      this.visitAny(tree.catchBody);\n    },\n    visitClassDeclaration: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.superClass);\n      this.visitList(tree.elements);\n      this.visitList(tree.annotations);\n    },\n    visitClassExpression: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.superClass);\n      this.visitList(tree.elements);\n      this.visitList(tree.annotations);\n    },\n    visitCommaExpression: function(tree) {\n      this.visitList(tree.expressions);\n    },\n    visitComprehensionFor: function(tree) {\n      this.visitAny(tree.left);\n      this.visitAny(tree.iterator);\n    },\n    visitComprehensionIf: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitComputedPropertyName: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitConditionalExpression: function(tree) {\n      this.visitAny(tree.condition);\n      this.visitAny(tree.left);\n      this.visitAny(tree.right);\n    },\n    visitContinueStatement: function(tree) {},\n    visitCoverFormals: function(tree) {\n      this.visitList(tree.expressions);\n    },\n    visitCoverInitializedName: function(tree) {\n      this.visitAny(tree.initializer);\n    },\n    visitDebuggerStatement: function(tree) {},\n    visitDefaultClause: function(tree) {\n      this.visitList(tree.statements);\n    },\n    visitDoWhileStatement: function(tree) {\n      this.visitAny(tree.body);\n      this.visitAny(tree.condition);\n    },\n    visitEmptyStatement: function(tree) {},\n    visitExportDeclaration: function(tree) {\n      this.visitAny(tree.declaration);\n      this.visitList(tree.annotations);\n    },\n    visitExportDefault: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitExportSpecifier: function(tree) {},\n    visitExportSpecifierSet: function(tree) {\n      this.visitList(tree.specifiers);\n    },\n    visitExportStar: function(tree) {},\n    visitExpressionStatement: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitFinally: function(tree) {\n      this.visitAny(tree.block);\n    },\n    visitForInStatement: function(tree) {\n      this.visitAny(tree.initializer);\n      this.visitAny(tree.collection);\n      this.visitAny(tree.body);\n    },\n    visitForOfStatement: function(tree) {\n      this.visitAny(tree.initializer);\n      this.visitAny(tree.collection);\n      this.visitAny(tree.body);\n    },\n    visitForStatement: function(tree) {\n      this.visitAny(tree.initializer);\n      this.visitAny(tree.condition);\n      this.visitAny(tree.increment);\n      this.visitAny(tree.body);\n    },\n    visitFormalParameter: function(tree) {\n      this.visitAny(tree.parameter);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n    },\n    visitFormalParameterList: function(tree) {\n      this.visitList(tree.parameters);\n    },\n    visitFunctionBody: function(tree) {\n      this.visitList(tree.statements);\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.parameterList);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n      this.visitAny(tree.body);\n    },\n    visitFunctionExpression: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.parameterList);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n      this.visitAny(tree.body);\n    },\n    visitGeneratorComprehension: function(tree) {\n      this.visitList(tree.comprehensionList);\n      this.visitAny(tree.expression);\n    },\n    visitGetAccessor: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n      this.visitAny(tree.body);\n    },\n    visitIdentifierExpression: function(tree) {},\n    visitIfStatement: function(tree) {\n      this.visitAny(tree.condition);\n      this.visitAny(tree.ifClause);\n      this.visitAny(tree.elseClause);\n    },\n    visitImportedBinding: function(tree) {\n      this.visitAny(tree.binding);\n    },\n    visitImportDeclaration: function(tree) {\n      this.visitAny(tree.importClause);\n      this.visitAny(tree.moduleSpecifier);\n    },\n    visitImportSpecifier: function(tree) {\n      this.visitAny(tree.binding);\n    },\n    visitImportSpecifierSet: function(tree) {\n      this.visitList(tree.specifiers);\n    },\n    visitLabelledStatement: function(tree) {\n      this.visitAny(tree.statement);\n    },\n    visitLiteralExpression: function(tree) {},\n    visitLiteralPropertyName: function(tree) {},\n    visitMemberExpression: function(tree) {\n      this.visitAny(tree.operand);\n    },\n    visitMemberLookupExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.visitAny(tree.memberExpression);\n    },\n    visitModule: function(tree) {\n      this.visitList(tree.scriptItemList);\n    },\n    visitModuleDeclaration: function(tree) {\n      this.visitAny(tree.binding);\n      this.visitAny(tree.expression);\n    },\n    visitModuleSpecifier: function(tree) {},\n    visitNamedExport: function(tree) {\n      this.visitAny(tree.moduleSpecifier);\n      this.visitAny(tree.specifierSet);\n    },\n    visitNewExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.visitAny(tree.args);\n    },\n    visitObjectLiteralExpression: function(tree) {\n      this.visitList(tree.propertyNameAndValues);\n    },\n    visitObjectPattern: function(tree) {\n      this.visitList(tree.fields);\n    },\n    visitObjectPatternField: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.element);\n    },\n    visitParenExpression: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitPostfixExpression: function(tree) {\n      this.visitAny(tree.operand);\n    },\n    visitPredefinedType: function(tree) {},\n    visitScript: function(tree) {\n      this.visitList(tree.scriptItemList);\n    },\n    visitPropertyMethodAssignment: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.parameterList);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n      this.visitAny(tree.body);\n    },\n    visitPropertyNameAssignment: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.value);\n    },\n    visitPropertyNameShorthand: function(tree) {},\n    visitPropertyVariableDeclaration: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.typeAnnotation);\n      this.visitList(tree.annotations);\n    },\n    visitRestParameter: function(tree) {\n      this.visitAny(tree.identifier);\n    },\n    visitReturnStatement: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitSetAccessor: function(tree) {\n      this.visitAny(tree.name);\n      this.visitAny(tree.parameterList);\n      this.visitList(tree.annotations);\n      this.visitAny(tree.body);\n    },\n    visitSpreadExpression: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitSpreadPatternElement: function(tree) {\n      this.visitAny(tree.lvalue);\n    },\n    visitSuperExpression: function(tree) {},\n    visitSwitchStatement: function(tree) {\n      this.visitAny(tree.expression);\n      this.visitList(tree.caseClauses);\n    },\n    visitSyntaxErrorTree: function(tree) {},\n    visitTemplateLiteralExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.visitList(tree.elements);\n    },\n    visitTemplateLiteralPortion: function(tree) {},\n    visitTemplateSubstitution: function(tree) {\n      this.visitAny(tree.expression);\n    },\n    visitThisExpression: function(tree) {},\n    visitThrowStatement: function(tree) {\n      this.visitAny(tree.value);\n    },\n    visitTryStatement: function(tree) {\n      this.visitAny(tree.body);\n      this.visitAny(tree.catchBlock);\n      this.visitAny(tree.finallyBlock);\n    },\n    visitTypeArguments: function(tree) {\n      this.visitList(tree.args);\n    },\n    visitTypeName: function(tree) {\n      this.visitAny(tree.moduleName);\n    },\n    visitTypeReference: function(tree) {\n      this.visitAny(tree.typeName);\n      this.visitAny(tree.args);\n    },\n    visitUnaryExpression: function(tree) {\n      this.visitAny(tree.operand);\n    },\n    visitVariableDeclaration: function(tree) {\n      this.visitAny(tree.lvalue);\n      this.visitAny(tree.typeAnnotation);\n      this.visitAny(tree.initializer);\n    },\n    visitVariableDeclarationList: function(tree) {\n      this.visitList(tree.declarations);\n    },\n    visitVariableStatement: function(tree) {\n      this.visitAny(tree.declarations);\n    },\n    visitWhileStatement: function(tree) {\n      this.visitAny(tree.condition);\n      this.visitAny(tree.body);\n    },\n    visitWithStatement: function(tree) {\n      this.visitAny(tree.expression);\n      this.visitAny(tree.body);\n    },\n    visitYieldExpression: function(tree) {\n      this.visitAny(tree.expression);\n    }\n  }, {});\n  return {get ParseTreeVisitor() {\n      return ParseTreeVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/PredefinedName\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/PredefinedName\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/PredefinedName\", path);\n  }\n  var $ARGUMENTS = '$arguments';\n  var ANY = 'any';\n  var APPLY = 'apply';\n  var ARGUMENTS = 'arguments';\n  var ARRAY = 'Array';\n  var AS = 'as';\n  var ASYNC = 'async';\n  var AWAIT = 'await';\n  var BIND = 'bind';\n  var CALL = 'call';\n  var CONFIGURABLE = 'configurable';\n  var CONSTRUCTOR = 'constructor';\n  var CREATE = 'create';\n  var CURRENT = 'current';\n  var DEFINE_PROPERTY = 'defineProperty';\n  var ENUMERABLE = 'enumerable';\n  var FREEZE = 'freeze';\n  var FROM = 'from';\n  var FUNCTION = 'Function';\n  var GET = 'get';\n  var HAS = 'has';\n  var LENGTH = 'length';\n  var MODULE = 'module';\n  var NEW = 'new';\n  var OBJECT = 'Object';\n  var OBJECT_NAME = 'Object';\n  var OF = 'of';\n  var PREVENT_EXTENSIONS = 'preventExtensions';\n  var PROTOTYPE = 'prototype';\n  var PUSH = 'push';\n  var SET = 'set';\n  var SLICE = 'slice';\n  var THIS = 'this';\n  var TRACEUR_RUNTIME = '$traceurRuntime';\n  var UNDEFINED = 'undefined';\n  var WRITABLE = 'writable';\n  return {\n    get $ARGUMENTS() {\n      return $ARGUMENTS;\n    },\n    get ANY() {\n      return ANY;\n    },\n    get APPLY() {\n      return APPLY;\n    },\n    get ARGUMENTS() {\n      return ARGUMENTS;\n    },\n    get ARRAY() {\n      return ARRAY;\n    },\n    get AS() {\n      return AS;\n    },\n    get ASYNC() {\n      return ASYNC;\n    },\n    get AWAIT() {\n      return AWAIT;\n    },\n    get BIND() {\n      return BIND;\n    },\n    get CALL() {\n      return CALL;\n    },\n    get CONFIGURABLE() {\n      return CONFIGURABLE;\n    },\n    get CONSTRUCTOR() {\n      return CONSTRUCTOR;\n    },\n    get CREATE() {\n      return CREATE;\n    },\n    get CURRENT() {\n      return CURRENT;\n    },\n    get DEFINE_PROPERTY() {\n      return DEFINE_PROPERTY;\n    },\n    get ENUMERABLE() {\n      return ENUMERABLE;\n    },\n    get FREEZE() {\n      return FREEZE;\n    },\n    get FROM() {\n      return FROM;\n    },\n    get FUNCTION() {\n      return FUNCTION;\n    },\n    get GET() {\n      return GET;\n    },\n    get HAS() {\n      return HAS;\n    },\n    get LENGTH() {\n      return LENGTH;\n    },\n    get MODULE() {\n      return MODULE;\n    },\n    get NEW() {\n      return NEW;\n    },\n    get OBJECT() {\n      return OBJECT;\n    },\n    get OBJECT_NAME() {\n      return OBJECT_NAME;\n    },\n    get OF() {\n      return OF;\n    },\n    get PREVENT_EXTENSIONS() {\n      return PREVENT_EXTENSIONS;\n    },\n    get PROTOTYPE() {\n      return PROTOTYPE;\n    },\n    get PUSH() {\n      return PUSH;\n    },\n    get SET() {\n      return SET;\n    },\n    get SLICE() {\n      return SLICE;\n    },\n    get THIS() {\n      return THIS;\n    },\n    get TRACEUR_RUNTIME() {\n      return TRACEUR_RUNTIME;\n    },\n    get UNDEFINED() {\n      return UNDEFINED;\n    },\n    get WRITABLE() {\n      return WRITABLE;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/semantics/util\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/util\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/util\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION,\n      LITERAL_EXPRESSION = $__0.LITERAL_EXPRESSION,\n      PAREN_EXPRESSION = $__0.PAREN_EXPRESSION,\n      UNARY_EXPRESSION = $__0.UNARY_EXPRESSION;\n  var UNDEFINED = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").UNDEFINED;\n  var VOID = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VOID;\n  function hasUseStrict(list) {\n    for (var i = 0; i < list.length; i++) {\n      if (!list[i].isDirectivePrologue())\n        return false;\n      if (list[i].isUseStrictDirective())\n        return true;\n    }\n    return false;\n  }\n  function isUndefined(tree) {\n    if (tree.type === PAREN_EXPRESSION)\n      return isUndefined(tree.expression);\n    return tree.type === IDENTIFIER_EXPRESSION && tree.identifierToken.value === UNDEFINED;\n  }\n  function isVoidExpression(tree) {\n    if (tree.type === PAREN_EXPRESSION)\n      return isVoidExpression(tree.expression);\n    return tree.type === UNARY_EXPRESSION && tree.operator.type === VOID && isLiteralExpression(tree.operand);\n  }\n  function isLiteralExpression(tree) {\n    if (tree.type === PAREN_EXPRESSION)\n      return isLiteralExpression(tree.expression);\n    return tree.type === LITERAL_EXPRESSION;\n  }\n  return {\n    get hasUseStrict() {\n      return hasUseStrict;\n    },\n    get isUndefined() {\n      return isUndefined;\n    },\n    get isVoidExpression() {\n      return isVoidExpression;\n    },\n    get isLiteralExpression() {\n      return isLiteralExpression;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/semantics/isTreeStrict\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/isTreeStrict\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/isTreeStrict\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARROW_FUNCTION_EXPRESSION = $__0.ARROW_FUNCTION_EXPRESSION,\n      CLASS_DECLARATION = $__0.CLASS_DECLARATION,\n      CLASS_EXPRESSION = $__0.CLASS_EXPRESSION,\n      FUNCTION_BODY = $__0.FUNCTION_BODY,\n      FUNCTION_DECLARATION = $__0.FUNCTION_DECLARATION,\n      FUNCTION_EXPRESSION = $__0.FUNCTION_EXPRESSION,\n      GET_ACCESSOR = $__0.GET_ACCESSOR,\n      MODULE = $__0.MODULE,\n      PROPERTY_METHOD_ASSIGNMENT = $__0.PROPERTY_METHOD_ASSIGNMENT,\n      SCRIPT = $__0.SCRIPT,\n      SET_ACCESSOR = $__0.SET_ACCESSOR;\n  var hasUseStrict = System.get(\"traceur@0.0.74/src/semantics/util\").hasUseStrict;\n  function isTreeStrict(tree) {\n    switch (tree.type) {\n      case CLASS_DECLARATION:\n      case CLASS_EXPRESSION:\n      case MODULE:\n        return true;\n      case FUNCTION_BODY:\n        return hasUseStrict(tree.statements);\n      case FUNCTION_EXPRESSION:\n      case FUNCTION_DECLARATION:\n      case PROPERTY_METHOD_ASSIGNMENT:\n        return isTreeStrict(tree.body);\n      case ARROW_FUNCTION_EXPRESSION:\n        if (tree.body.type === FUNCTION_BODY) {\n          return isTreeStrict(tree.body);\n        }\n        return false;\n      case GET_ACCESSOR:\n      case SET_ACCESSOR:\n        return isTreeStrict(tree.body);\n      case SCRIPT:\n        return hasUseStrict(tree.scriptItemList);\n      default:\n        return false;\n    }\n  }\n  return {get isTreeStrict() {\n      return isTreeStrict;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/semantics/Scope\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/Scope\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/Scope\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BLOCK = $__0.BLOCK,\n      CATCH = $__0.CATCH;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var isTreeStrict = System.get(\"traceur@0.0.74/src/semantics/isTreeStrict\").isTreeStrict;\n  function reportDuplicateVar(reporter, tree, name) {\n    reporter.reportError(tree.location && tree.location.start, (\"Duplicate declaration, \" + name));\n  }\n  var Scope = function Scope(parent, tree) {\n    this.parent = parent;\n    this.tree = tree;\n    this.variableDeclarations = Object.create(null);\n    this.lexicalDeclarations = Object.create(null);\n    this.strictMode = parent && parent.strictMode || isTreeStrict(tree);\n  };\n  ($traceurRuntime.createClass)(Scope, {\n    addBinding: function(tree, type, reporter) {\n      if (type === VAR) {\n        this.addVar(tree, reporter);\n      } else {\n        this.addDeclaration(tree, type, reporter);\n      }\n    },\n    addVar: function(tree, reporter) {\n      var name = tree.getStringValue();\n      if (this.lexicalDeclarations[name]) {\n        reportDuplicateVar(reporter, tree, name);\n        return;\n      }\n      this.variableDeclarations[name] = {\n        type: VAR,\n        tree: tree\n      };\n      if (!this.isVarScope && this.parent) {\n        this.parent.addVar(tree, reporter);\n      }\n    },\n    addDeclaration: function(tree, type, reporter) {\n      var name = tree.getStringValue();\n      if (this.lexicalDeclarations[name] || this.variableDeclarations[name]) {\n        reportDuplicateVar(reporter, tree, name);\n        return;\n      }\n      this.lexicalDeclarations[name] = {\n        type: type,\n        tree: tree\n      };\n    },\n    renameBinding: function(oldName, newTree, newType, reporter) {\n      var name = newTree.getStringValue();\n      if (newType == VAR) {\n        if (this.lexicalDeclarations[oldName]) {\n          delete this.lexicalDeclarations[oldName];\n          this.addVar(newTree, reporter);\n        }\n      } else if (this.variableDeclarations[oldName]) {\n        delete this.variableDeclarations[oldName];\n        this.addDeclaration(newTree, newType, reporter);\n        if (!this.isVarScope && this.parent) {\n          this.parent.renameBinding(oldName, newTree, newType);\n        }\n      }\n    },\n    get isVarScope() {\n      switch (this.tree.type) {\n        case BLOCK:\n        case CATCH:\n          return false;\n      }\n      return true;\n    },\n    getVarScope: function() {\n      if (this.isVarScope) {\n        return this;\n      }\n      if (this.parent) {\n        return this.parent.getVarScope();\n      }\n      return null;\n    },\n    getBinding: function(tree) {\n      var name = tree.getStringValue();\n      return this.getBindingByName(name);\n    },\n    getBindingByName: function(name) {\n      var b = this.lexicalDeclarations[name];\n      if (b) {\n        return b;\n      }\n      b = this.variableDeclarations[name];\n      if (b && this.isVarScope) {\n        return b;\n      }\n      if (this.parent) {\n        return this.parent.getBindingByName(name);\n      }\n      return null;\n    },\n    getAllBindingNames: function() {\n      var names = Object.create(null);\n      var name;\n      for (name in this.variableDeclarations) {\n        names[name] = true;\n      }\n      for (name in this.lexicalDeclarations) {\n        names[name] = true;\n      }\n      return names;\n    },\n    getVariableBindingNames: function() {\n      var names = Object.create(null);\n      for (var name in this.variableDeclarations) {\n        names[name] = true;\n      }\n      return names;\n    },\n    getLexicalBindingNames: function() {\n      var names = Object.create(null);\n      for (var name in this.lexicalDeclarations) {\n        names[name] = true;\n      }\n      return names;\n    },\n    hasBindingName: function(name) {\n      return this.lexicalDeclarations[name] || this.variableDeclarations[name];\n    },\n    hasLexicalBindingName: function(name) {\n      return this.lexicalDeclarations[name];\n    },\n    hasVariableBindingName: function(name) {\n      return this.variableDeclarations[name];\n    }\n  }, {});\n  return {get Scope() {\n      return Scope;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/semantics/ScopeVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/ScopeVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/ScopeVisitor\", path);\n  }\n  var Map = System.get(\"traceur@0.0.74/src/runtime/polyfills/Map\").Map;\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var Scope = System.get(\"traceur@0.0.74/src/semantics/Scope\").Scope;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      COMPREHENSION_FOR = $__4.COMPREHENSION_FOR,\n      VARIABLE_DECLARATION_LIST = $__4.VARIABLE_DECLARATION_LIST;\n  var ScopeVisitor = function ScopeVisitor() {\n    this.map_ = new Map();\n    this.scope = null;\n    this.withBlockCounter_ = 0;\n  };\n  var $ScopeVisitor = ScopeVisitor;\n  ($traceurRuntime.createClass)(ScopeVisitor, {\n    getScopeForTree: function(tree) {\n      return this.map_.get(tree);\n    },\n    pushScope: function(tree) {\n      var scope = new Scope(this.scope, tree);\n      this.map_.set(tree, scope);\n      return this.scope = scope;\n    },\n    popScope: function(scope) {\n      if (this.scope !== scope) {\n        throw new Error('ScopeVisitor scope mismatch');\n      }\n      this.scope = scope.parent;\n    },\n    visitScript: function(tree) {\n      var scope = this.pushScope(tree);\n      $traceurRuntime.superGet(this, $ScopeVisitor.prototype, \"visitScript\").call(this, tree);\n      this.popScope(scope);\n    },\n    visitModule: function(tree) {\n      var scope = this.pushScope(tree);\n      $traceurRuntime.superGet(this, $ScopeVisitor.prototype, \"visitModule\").call(this, tree);\n      this.popScope(scope);\n    },\n    visitBlock: function(tree) {\n      var scope = this.pushScope(tree);\n      $traceurRuntime.superGet(this, $ScopeVisitor.prototype, \"visitBlock\").call(this, tree);\n      this.popScope(scope);\n    },\n    visitCatch: function(tree) {\n      var scope = this.pushScope(tree);\n      this.visitAny(tree.binding);\n      this.visitList(tree.catchBody.statements);\n      this.popScope(scope);\n    },\n    visitFunctionBodyForScope: function(tree) {\n      var parameterList = arguments[1] !== (void 0) ? arguments[1] : tree.parameterList;\n      var scope = this.pushScope(tree);\n      this.visitAny(parameterList);\n      this.visitAny(tree.body);\n      this.popScope(scope);\n    },\n    visitFunctionExpression: function(tree) {\n      this.visitFunctionBodyForScope(tree);\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.visitAny(tree.name);\n      this.visitFunctionBodyForScope(tree);\n    },\n    visitArrowFunctionExpression: function(tree) {\n      this.visitFunctionBodyForScope(tree);\n    },\n    visitGetAccessor: function(tree) {\n      this.visitFunctionBodyForScope(tree, null);\n    },\n    visitSetAccessor: function(tree) {\n      this.visitFunctionBodyForScope(tree);\n    },\n    visitPropertyMethodAssignment: function(tree) {\n      this.visitFunctionBodyForScope(tree);\n    },\n    visitClassDeclaration: function(tree) {\n      this.visitAny(tree.superClass);\n      var scope = this.pushScope(tree);\n      this.visitAny(tree.name);\n      this.visitList(tree.elements);\n      this.popScope(scope);\n    },\n    visitClassExpression: function(tree) {\n      this.visitAny(tree.superClass);\n      var scope;\n      if (tree.name) {\n        scope = this.pushScope(tree);\n        this.visitAny(tree.name);\n      }\n      this.visitList(tree.elements);\n      if (tree.name) {\n        this.popScope(scope);\n      }\n    },\n    visitWithStatement: function(tree) {\n      this.visitAny(tree.expression);\n      this.withBlockCounter_++;\n      this.visitAny(tree.body);\n      this.withBlockCounter_--;\n    },\n    get inWithBlock() {\n      return this.withBlockCounter_ > 0;\n    },\n    visitLoop_: function(tree, func) {\n      if (tree.initializer.type !== VARIABLE_DECLARATION_LIST || tree.initializer.declarationType === VAR) {\n        func();\n        return;\n      }\n      var scope = this.pushScope(tree);\n      func();\n      this.popScope(scope);\n    },\n    visitForInStatement: function(tree) {\n      var $__5 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__5, $ScopeVisitor.prototype, \"visitForInStatement\").call($__5, tree);\n      }));\n    },\n    visitForOfStatement: function(tree) {\n      var $__5 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__5, $ScopeVisitor.prototype, \"visitForOfStatement\").call($__5, tree);\n      }));\n    },\n    visitForStatement: function(tree) {\n      var $__5 = this;\n      if (!tree.initializer) {\n        $traceurRuntime.superGet(this, $ScopeVisitor.prototype, \"visitForStatement\").call(this, tree);\n      } else {\n        this.visitLoop_(tree, (function() {\n          return $traceurRuntime.superGet($__5, $ScopeVisitor.prototype, \"visitForStatement\").call($__5, tree);\n        }));\n      }\n    },\n    visitComprehension_: function(tree) {\n      var scopes = [];\n      for (var i = 0; i < tree.comprehensionList.length; i++) {\n        var scope = null;\n        if (tree.comprehensionList[i].type === COMPREHENSION_FOR) {\n          scope = this.pushScope(tree.comprehensionList[i]);\n        }\n        scopes.push(scope);\n        this.visitAny(tree.comprehensionList[i]);\n      }\n      this.visitAny(tree.expression);\n      for (var i = scopes.length - 1; i >= 0; i--) {\n        if (scopes[i]) {\n          this.popScope(scopes[i]);\n        }\n      }\n    },\n    visitArrayComprehension: function(tree) {\n      this.visitComprehension_(tree);\n    },\n    visitGeneratorComprehension: function(tree) {\n      this.visitComprehension_(tree);\n    }\n  }, {}, ParseTreeVisitor);\n  return {get ScopeVisitor() {\n      return ScopeVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/ScopeChainBuilder\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      CONST = $__0.CONST,\n      LET = $__0.LET,\n      VAR = $__0.VAR;\n  var ScopeVisitor = System.get(\"traceur@0.0.74/src/semantics/ScopeVisitor\").ScopeVisitor;\n  var ScopeChainBuilder = function ScopeChainBuilder(reporter) {\n    $traceurRuntime.superConstructor($ScopeChainBuilder).call(this);\n    this.reporter_ = reporter;\n    this.declarationType_ = null;\n  };\n  var $ScopeChainBuilder = ScopeChainBuilder;\n  ($traceurRuntime.createClass)(ScopeChainBuilder, {\n    visitCatch: function(tree) {\n      var scope = this.pushScope(tree);\n      this.declarationType_ = LET;\n      this.visitAny(tree.binding);\n      this.visitList(tree.catchBody.statements);\n      this.popScope(scope);\n    },\n    visitImportedBinding: function(tree) {\n      this.declarationType_ = CONST;\n      $traceurRuntime.superGet(this, $ScopeChainBuilder.prototype, \"visitImportedBinding\").call(this, tree);\n    },\n    visitVariableDeclarationList: function(tree) {\n      this.declarationType_ = tree.declarationType;\n      $traceurRuntime.superGet(this, $ScopeChainBuilder.prototype, \"visitVariableDeclarationList\").call(this, tree);\n    },\n    visitBindingIdentifier: function(tree) {\n      this.declareVariable(tree);\n    },\n    visitFunctionExpression: function(tree) {\n      var scope = this.pushScope(tree);\n      if (tree.name) {\n        this.declarationType_ = CONST;\n        this.visitAny(tree.name);\n      }\n      this.visitAny(tree.parameterList);\n      this.visitAny(tree.body);\n      this.popScope(scope);\n    },\n    visitFormalParameter: function(tree) {\n      this.declarationType_ = VAR;\n      $traceurRuntime.superGet(this, $ScopeChainBuilder.prototype, \"visitFormalParameter\").call(this, tree);\n    },\n    visitFunctionDeclaration: function(tree) {\n      if (this.scope) {\n        if (this.scope.isVarScope) {\n          this.declarationType_ = VAR;\n          this.visitAny(tree.name);\n        } else {\n          if (!this.scope.strictMode) {\n            var varScope = this.scope.getVarScope();\n            if (varScope) {\n              varScope.addVar(tree.name, this.reporter_);\n            }\n          }\n          this.declarationType_ = LET;\n          this.visitAny(tree.name);\n        }\n      }\n      this.visitFunctionBodyForScope(tree, tree.parameterList, tree.body);\n    },\n    visitClassDeclaration: function(tree) {\n      this.visitAny(tree.superClass);\n      this.declarationType_ = LET;\n      this.visitAny(tree.name);\n      var scope = this.pushScope(tree);\n      this.declarationType_ = CONST;\n      this.visitAny(tree.name);\n      this.visitList(tree.elements);\n      this.popScope(scope);\n    },\n    visitClassExpression: function(tree) {\n      this.visitAny(tree.superClass);\n      var scope;\n      if (tree.name) {\n        scope = this.pushScope(tree);\n        this.declarationType_ = CONST;\n        this.visitAny(tree.name);\n      }\n      this.visitList(tree.elements);\n      if (tree.name) {\n        this.popScope(scope);\n      }\n    },\n    visitComprehensionFor: function(tree) {\n      this.declarationType_ = LET;\n      $traceurRuntime.superGet(this, $ScopeChainBuilder.prototype, \"visitComprehensionFor\").call(this, tree);\n    },\n    declareVariable: function(tree) {\n      this.scope.addBinding(tree, this.declarationType_, this.reporter_);\n    }\n  }, {}, ScopeVisitor);\n  return {get ScopeChainBuilder() {\n      return ScopeChainBuilder;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/semantics/ConstChecker\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/ConstChecker\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/ConstChecker\", path);\n  }\n  var IDENTIFIER_EXPRESSION = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\").IDENTIFIER_EXPRESSION;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      CONST = $__1.CONST,\n      MINUS_MINUS = $__1.MINUS_MINUS,\n      PLUS_PLUS = $__1.PLUS_PLUS;\n  var ScopeVisitor = System.get(\"traceur@0.0.74/src/semantics/ScopeVisitor\").ScopeVisitor;\n  var ScopeChainBuilder = System.get(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\").ScopeChainBuilder;\n  var ConstChecker = function ConstChecker(scopeBuilder, reporter) {\n    $traceurRuntime.superConstructor($ConstChecker).call(this);\n    this.scopeBuilder_ = scopeBuilder;\n    this.reporter_ = reporter;\n  };\n  var $ConstChecker = ConstChecker;\n  ($traceurRuntime.createClass)(ConstChecker, {\n    pushScope: function(tree) {\n      return this.scope = this.scopeBuilder_.getScopeForTree(tree);\n    },\n    visitUnaryExpression: function(tree) {\n      if (tree.operand.type === IDENTIFIER_EXPRESSION && (tree.operator.type === PLUS_PLUS || tree.operator.type === MINUS_MINUS)) {\n        this.validateMutation_(tree.operand);\n      }\n      $traceurRuntime.superGet(this, $ConstChecker.prototype, \"visitUnaryExpression\").call(this, tree);\n    },\n    visitPostfixExpression: function(tree) {\n      if (tree.operand.type === IDENTIFIER_EXPRESSION) {\n        this.validateMutation_(tree.operand);\n      }\n      $traceurRuntime.superGet(this, $ConstChecker.prototype, \"visitPostfixExpression\").call(this, tree);\n    },\n    visitBinaryExpression: function(tree) {\n      if (tree.left.type === IDENTIFIER_EXPRESSION && tree.operator.isAssignmentOperator()) {\n        this.validateMutation_(tree.left);\n      }\n      $traceurRuntime.superGet(this, $ConstChecker.prototype, \"visitBinaryExpression\").call(this, tree);\n    },\n    validateMutation_: function(identifierExpression) {\n      if (this.inWithBlock) {\n        return;\n      }\n      var binding = this.scope.getBinding(identifierExpression);\n      if (binding === null) {\n        return;\n      }\n      var $__5 = binding,\n          type = $__5.type,\n          tree = $__5.tree;\n      if (type === CONST) {\n        this.reportError_(identifierExpression.location, (tree.getStringValue() + \" is read-only\"));\n      }\n    },\n    reportError_: function(location, message) {\n      this.reporter_.reportError(location.start, message);\n    }\n  }, {}, ScopeVisitor);\n  function validate(tree, reporter) {\n    var builder = new ScopeChainBuilder(reporter);\n    builder.visitAny(tree);\n    var checker = new ConstChecker(builder, reporter);\n    checker.visitAny(tree);\n  }\n  return {\n    get ConstChecker() {\n      return ConstChecker;\n    },\n    get validate() {\n      return validate;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/semantics/FreeVariableChecker\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/FreeVariableChecker\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/FreeVariableChecker\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      FUNCTION_DECLARATION = $__0.FUNCTION_DECLARATION,\n      FUNCTION_EXPRESSION = $__0.FUNCTION_EXPRESSION,\n      GET_ACCESSOR = $__0.GET_ACCESSOR,\n      IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION,\n      MODULE = $__0.MODULE,\n      PROPERTY_METHOD_ASSIGNMENT = $__0.PROPERTY_METHOD_ASSIGNMENT,\n      SET_ACCESSOR = $__0.SET_ACCESSOR;\n  var TYPEOF = System.get(\"traceur@0.0.74/src/syntax/TokenType\").TYPEOF;\n  var ScopeVisitor = System.get(\"traceur@0.0.74/src/semantics/ScopeVisitor\").ScopeVisitor;\n  var ScopeChainBuilder = System.get(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\").ScopeChainBuilder;\n  function hasArgumentsInScope(scope) {\n    for (; scope; scope = scope.parent) {\n      switch (scope.tree.type) {\n        case FUNCTION_DECLARATION:\n        case FUNCTION_EXPRESSION:\n        case GET_ACCESSOR:\n        case PROPERTY_METHOD_ASSIGNMENT:\n        case SET_ACCESSOR:\n          return true;\n      }\n    }\n    return false;\n  }\n  function inModuleScope(scope) {\n    for (; scope; scope = scope.parent) {\n      if (scope.tree.type === MODULE) {\n        return true;\n      }\n    }\n    return false;\n  }\n  var FreeVariableChecker = function FreeVariableChecker(scopeBuilder, reporter) {\n    var global = arguments[2] !== (void 0) ? arguments[2] : Object.create(null);\n    $traceurRuntime.superConstructor($FreeVariableChecker).call(this);\n    this.scopeBuilder_ = scopeBuilder;\n    this.reporter_ = reporter;\n    this.global_ = global;\n  };\n  var $FreeVariableChecker = FreeVariableChecker;\n  ($traceurRuntime.createClass)(FreeVariableChecker, {\n    pushScope: function(tree) {\n      return this.scope = this.scopeBuilder_.getScopeForTree(tree);\n    },\n    visitUnaryExpression: function(tree) {\n      if (tree.operator.type === TYPEOF && tree.operand.type === IDENTIFIER_EXPRESSION) {\n        var scope = this.scope;\n        var binding = scope.getBinding(tree.operand);\n        if (!binding) {\n          scope.addVar(tree.operand, this.reporter_);\n        }\n      } else {\n        $traceurRuntime.superGet(this, $FreeVariableChecker.prototype, \"visitUnaryExpression\").call(this, tree);\n      }\n    },\n    visitIdentifierExpression: function(tree) {\n      if (this.inWithBlock) {\n        return;\n      }\n      var scope = this.scope;\n      var binding = scope.getBinding(tree);\n      if (binding) {\n        return;\n      }\n      var name = tree.getStringValue();\n      if (name === 'arguments' && hasArgumentsInScope(scope)) {\n        return;\n      }\n      if (name === '__moduleName' && inModuleScope(scope)) {\n        return;\n      }\n      if (!(name in this.global_)) {\n        this.reporter_.reportError(tree.location.start, (name + \" is not defined\"));\n      }\n    }\n  }, {}, ScopeVisitor);\n  function validate(tree, reporter) {\n    var global = arguments[2] !== (void 0) ? arguments[2] : Reflect.global;\n    var builder = new ScopeChainBuilder(reporter);\n    builder.visitAny(tree);\n    var checker = new FreeVariableChecker(builder, reporter, global);\n    checker.visitAny(tree);\n  }\n  return {get validate() {\n      return validate;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/JSON\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/JSON\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/JSON\", path);\n  }\n  function transform(v) {\n    var replacer = arguments[1] !== (void 0) ? arguments[1] : (function(k, v) {\n      return v;\n    });\n    return transform_(replacer('', v), replacer);\n  }\n  function transform_(v, replacer) {\n    var rv,\n        tv;\n    if (Array.isArray(v)) {\n      var len = v.length;\n      rv = Array(len);\n      for (var i = 0; i < len; i++) {\n        tv = transform_(replacer(String(i), v[i]), replacer);\n        rv[i] = tv === undefined ? null : tv;\n      }\n      return rv;\n    }\n    if (v instanceof Object) {\n      rv = {};\n      Object.keys(v).forEach((function(k) {\n        tv = transform_(replacer(k, v[k]), replacer);\n        if (tv !== undefined) {\n          rv[k] = tv;\n        }\n      }));\n      return rv;\n    }\n    return v;\n  }\n  return {get transform() {\n      return transform;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/Token\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/Token\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/Token\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AMPERSAND_EQUAL = $__0.AMPERSAND_EQUAL,\n      BAR_EQUAL = $__0.BAR_EQUAL,\n      CARET_EQUAL = $__0.CARET_EQUAL,\n      EQUAL = $__0.EQUAL,\n      LEFT_SHIFT_EQUAL = $__0.LEFT_SHIFT_EQUAL,\n      MINUS_EQUAL = $__0.MINUS_EQUAL,\n      PERCENT_EQUAL = $__0.PERCENT_EQUAL,\n      PLUS_EQUAL = $__0.PLUS_EQUAL,\n      RIGHT_SHIFT_EQUAL = $__0.RIGHT_SHIFT_EQUAL,\n      SLASH_EQUAL = $__0.SLASH_EQUAL,\n      STAR_EQUAL = $__0.STAR_EQUAL,\n      STAR_STAR_EQUAL = $__0.STAR_STAR_EQUAL,\n      UNSIGNED_RIGHT_SHIFT_EQUAL = $__0.UNSIGNED_RIGHT_SHIFT_EQUAL;\n  var Token = function Token(type, location) {\n    this.type = type;\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(Token, {\n    toString: function() {\n      return this.type;\n    },\n    isAssignmentOperator: function() {\n      return isAssignmentOperator(this.type);\n    },\n    isKeyword: function() {\n      return false;\n    },\n    isStrictKeyword: function() {\n      return false;\n    }\n  }, {});\n  function isAssignmentOperator(type) {\n    switch (type) {\n      case AMPERSAND_EQUAL:\n      case BAR_EQUAL:\n      case CARET_EQUAL:\n      case EQUAL:\n      case LEFT_SHIFT_EQUAL:\n      case MINUS_EQUAL:\n      case PERCENT_EQUAL:\n      case PLUS_EQUAL:\n      case RIGHT_SHIFT_EQUAL:\n      case SLASH_EQUAL:\n      case STAR_EQUAL:\n      case STAR_STAR_EQUAL:\n      case UNSIGNED_RIGHT_SHIFT_EQUAL:\n        return true;\n    }\n    return false;\n  }\n  return {\n    get Token() {\n      return Token;\n    },\n    get isAssignmentOperator() {\n      return isAssignmentOperator;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/trees/ParseTree\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/trees/ParseTree\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/trees/ParseTree\", path);\n  }\n  var ParseTreeType = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\");\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      IDENTIFIER = $__0.IDENTIFIER,\n      STAR = $__0.STAR,\n      STRING = $__0.STRING,\n      VAR = $__0.VAR;\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var utilJSON = System.get(\"traceur@0.0.74/src/util/JSON\");\n  var ASYNC = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").ASYNC;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARRAY_COMPREHENSION = $__3.ARRAY_COMPREHENSION,\n      ARRAY_LITERAL_EXPRESSION = $__3.ARRAY_LITERAL_EXPRESSION,\n      ARRAY_PATTERN = $__3.ARRAY_PATTERN,\n      ARROW_FUNCTION_EXPRESSION = $__3.ARROW_FUNCTION_EXPRESSION,\n      AWAIT_EXPRESSION = $__3.AWAIT_EXPRESSION,\n      BINARY_EXPRESSION = $__3.BINARY_EXPRESSION,\n      BINDING_IDENTIFIER = $__3.BINDING_IDENTIFIER,\n      BLOCK = $__3.BLOCK,\n      BREAK_STATEMENT = $__3.BREAK_STATEMENT,\n      CALL_EXPRESSION = $__3.CALL_EXPRESSION,\n      CLASS_DECLARATION = $__3.CLASS_DECLARATION,\n      CLASS_EXPRESSION = $__3.CLASS_EXPRESSION,\n      COMMA_EXPRESSION = $__3.COMMA_EXPRESSION,\n      CONDITIONAL_EXPRESSION = $__3.CONDITIONAL_EXPRESSION,\n      CONTINUE_STATEMENT = $__3.CONTINUE_STATEMENT,\n      DEBUGGER_STATEMENT = $__3.DEBUGGER_STATEMENT,\n      DO_WHILE_STATEMENT = $__3.DO_WHILE_STATEMENT,\n      EMPTY_STATEMENT = $__3.EMPTY_STATEMENT,\n      EXPORT_DECLARATION = $__3.EXPORT_DECLARATION,\n      EXPRESSION_STATEMENT = $__3.EXPRESSION_STATEMENT,\n      FORMAL_PARAMETER = $__3.FORMAL_PARAMETER,\n      FOR_IN_STATEMENT = $__3.FOR_IN_STATEMENT,\n      FOR_OF_STATEMENT = $__3.FOR_OF_STATEMENT,\n      FOR_STATEMENT = $__3.FOR_STATEMENT,\n      FUNCTION_DECLARATION = $__3.FUNCTION_DECLARATION,\n      FUNCTION_EXPRESSION = $__3.FUNCTION_EXPRESSION,\n      GENERATOR_COMPREHENSION = $__3.GENERATOR_COMPREHENSION,\n      IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION,\n      IF_STATEMENT = $__3.IF_STATEMENT,\n      IMPORTED_BINDING = $__3.IMPORTED_BINDING,\n      IMPORT_DECLARATION = $__3.IMPORT_DECLARATION,\n      LABELLED_STATEMENT = $__3.LABELLED_STATEMENT,\n      LITERAL_EXPRESSION = $__3.LITERAL_EXPRESSION,\n      MEMBER_EXPRESSION = $__3.MEMBER_EXPRESSION,\n      MEMBER_LOOKUP_EXPRESSION = $__3.MEMBER_LOOKUP_EXPRESSION,\n      MODULE_DECLARATION = $__3.MODULE_DECLARATION,\n      NEW_EXPRESSION = $__3.NEW_EXPRESSION,\n      OBJECT_LITERAL_EXPRESSION = $__3.OBJECT_LITERAL_EXPRESSION,\n      OBJECT_PATTERN = $__3.OBJECT_PATTERN,\n      PAREN_EXPRESSION = $__3.PAREN_EXPRESSION,\n      POSTFIX_EXPRESSION = $__3.POSTFIX_EXPRESSION,\n      PREDEFINED_TYPE = $__3.PREDEFINED_TYPE,\n      PROPERTY_NAME_SHORTHAND = $__3.PROPERTY_NAME_SHORTHAND,\n      REST_PARAMETER = $__3.REST_PARAMETER,\n      RETURN_STATEMENT = $__3.RETURN_STATEMENT,\n      SPREAD_EXPRESSION = $__3.SPREAD_EXPRESSION,\n      SPREAD_PATTERN_ELEMENT = $__3.SPREAD_PATTERN_ELEMENT,\n      SUPER_EXPRESSION = $__3.SUPER_EXPRESSION,\n      SWITCH_STATEMENT = $__3.SWITCH_STATEMENT,\n      TEMPLATE_LITERAL_EXPRESSION = $__3.TEMPLATE_LITERAL_EXPRESSION,\n      THIS_EXPRESSION = $__3.THIS_EXPRESSION,\n      THROW_STATEMENT = $__3.THROW_STATEMENT,\n      TRY_STATEMENT = $__3.TRY_STATEMENT,\n      TYPE_REFERENCE = $__3.TYPE_REFERENCE,\n      UNARY_EXPRESSION = $__3.UNARY_EXPRESSION,\n      VARIABLE_DECLARATION = $__3.VARIABLE_DECLARATION,\n      VARIABLE_STATEMENT = $__3.VARIABLE_STATEMENT,\n      WHILE_STATEMENT = $__3.WHILE_STATEMENT,\n      WITH_STATEMENT = $__3.WITH_STATEMENT,\n      YIELD_EXPRESSION = $__3.YIELD_EXPRESSION;\n  ;\n  var ParseTree = function ParseTree(type, location) {\n    throw new Error(\"Don't use for now. 'super' is currently very slow.\");\n    this.type = type;\n    this.location = location;\n  };\n  var $ParseTree = ParseTree;\n  ($traceurRuntime.createClass)(ParseTree, {\n    isPattern: function() {\n      switch (this.type) {\n        case ARRAY_PATTERN:\n        case OBJECT_PATTERN:\n          return true;\n        default:\n          return false;\n      }\n    },\n    isLeftHandSideExpression: function() {\n      switch (this.type) {\n        case THIS_EXPRESSION:\n        case CLASS_EXPRESSION:\n        case SUPER_EXPRESSION:\n        case IDENTIFIER_EXPRESSION:\n        case LITERAL_EXPRESSION:\n        case ARRAY_LITERAL_EXPRESSION:\n        case OBJECT_LITERAL_EXPRESSION:\n        case NEW_EXPRESSION:\n        case MEMBER_EXPRESSION:\n        case MEMBER_LOOKUP_EXPRESSION:\n        case CALL_EXPRESSION:\n        case FUNCTION_EXPRESSION:\n        case TEMPLATE_LITERAL_EXPRESSION:\n          return true;\n        case PAREN_EXPRESSION:\n          return this.expression.isLeftHandSideExpression();\n        default:\n          return false;\n      }\n    },\n    isAssignmentExpression: function() {\n      switch (this.type) {\n        case ARRAY_COMPREHENSION:\n        case ARRAY_LITERAL_EXPRESSION:\n        case ARROW_FUNCTION_EXPRESSION:\n        case AWAIT_EXPRESSION:\n        case BINARY_EXPRESSION:\n        case CALL_EXPRESSION:\n        case CLASS_EXPRESSION:\n        case CONDITIONAL_EXPRESSION:\n        case FUNCTION_EXPRESSION:\n        case GENERATOR_COMPREHENSION:\n        case IDENTIFIER_EXPRESSION:\n        case LITERAL_EXPRESSION:\n        case MEMBER_EXPRESSION:\n        case MEMBER_LOOKUP_EXPRESSION:\n        case NEW_EXPRESSION:\n        case OBJECT_LITERAL_EXPRESSION:\n        case PAREN_EXPRESSION:\n        case POSTFIX_EXPRESSION:\n        case TEMPLATE_LITERAL_EXPRESSION:\n        case SUPER_EXPRESSION:\n        case THIS_EXPRESSION:\n        case UNARY_EXPRESSION:\n        case YIELD_EXPRESSION:\n          return true;\n        default:\n          return false;\n      }\n    },\n    isMemberExpression: function() {\n      switch (this.type) {\n        case THIS_EXPRESSION:\n        case CLASS_EXPRESSION:\n        case SUPER_EXPRESSION:\n        case IDENTIFIER_EXPRESSION:\n        case LITERAL_EXPRESSION:\n        case ARRAY_LITERAL_EXPRESSION:\n        case OBJECT_LITERAL_EXPRESSION:\n        case PAREN_EXPRESSION:\n        case TEMPLATE_LITERAL_EXPRESSION:\n        case FUNCTION_EXPRESSION:\n        case MEMBER_LOOKUP_EXPRESSION:\n        case MEMBER_EXPRESSION:\n        case CALL_EXPRESSION:\n          return true;\n        case NEW_EXPRESSION:\n          return this.args != null;\n      }\n      return false;\n    },\n    isExpression: function() {\n      return this.isAssignmentExpression() || this.type == COMMA_EXPRESSION;\n    },\n    isAssignmentOrSpread: function() {\n      return this.isAssignmentExpression() || this.type == SPREAD_EXPRESSION;\n    },\n    isRestParameter: function() {\n      return this.type == REST_PARAMETER || (this.type == FORMAL_PARAMETER && this.parameter.isRestParameter());\n    },\n    isSpreadPatternElement: function() {\n      return this.type == SPREAD_PATTERN_ELEMENT;\n    },\n    isStatementListItem: function() {\n      return this.isStatement() || this.isDeclaration();\n    },\n    isStatement: function() {\n      switch (this.type) {\n        case BLOCK:\n        case VARIABLE_STATEMENT:\n        case EMPTY_STATEMENT:\n        case EXPRESSION_STATEMENT:\n        case IF_STATEMENT:\n        case CONTINUE_STATEMENT:\n        case BREAK_STATEMENT:\n        case RETURN_STATEMENT:\n        case WITH_STATEMENT:\n        case LABELLED_STATEMENT:\n        case THROW_STATEMENT:\n        case TRY_STATEMENT:\n        case DEBUGGER_STATEMENT:\n          return true;\n      }\n      return this.isBreakableStatement();\n    },\n    isDeclaration: function() {\n      switch (this.type) {\n        case FUNCTION_DECLARATION:\n        case CLASS_DECLARATION:\n          return true;\n      }\n      return this.isLexicalDeclaration();\n    },\n    isLexicalDeclaration: function() {\n      switch (this.type) {\n        case VARIABLE_STATEMENT:\n          return this.declarations.declarationType !== VAR;\n      }\n      return false;\n    },\n    isBreakableStatement: function() {\n      switch (this.type) {\n        case SWITCH_STATEMENT:\n          return true;\n      }\n      return this.isIterationStatement();\n    },\n    isIterationStatement: function() {\n      switch (this.type) {\n        case DO_WHILE_STATEMENT:\n        case FOR_IN_STATEMENT:\n        case FOR_OF_STATEMENT:\n        case FOR_STATEMENT:\n        case WHILE_STATEMENT:\n          return true;\n      }\n      return false;\n    },\n    isScriptElement: function() {\n      switch (this.type) {\n        case CLASS_DECLARATION:\n        case EXPORT_DECLARATION:\n        case FUNCTION_DECLARATION:\n        case IMPORT_DECLARATION:\n        case MODULE_DECLARATION:\n        case VARIABLE_DECLARATION:\n          return true;\n      }\n      return this.isStatement();\n    },\n    isGenerator: function() {\n      return this.functionKind !== null && this.functionKind.type === STAR;\n    },\n    isAsyncFunction: function() {\n      return this.functionKind !== null && this.functionKind.type === IDENTIFIER && this.functionKind.value === ASYNC;\n    },\n    isType: function() {\n      switch (this.type) {\n        case PREDEFINED_TYPE:\n        case TYPE_REFERENCE:\n          return true;\n      }\n      return false;\n    },\n    getDirectivePrologueStringToken_: function() {\n      var tree = this;\n      if (tree.type !== EXPRESSION_STATEMENT || !(tree = tree.expression))\n        return null;\n      if (tree.type !== LITERAL_EXPRESSION || !(tree = tree.literalToken))\n        return null;\n      if (tree.type !== STRING)\n        return null;\n      return tree;\n    },\n    isDirectivePrologue: function() {\n      return this.getDirectivePrologueStringToken_() !== null;\n    },\n    isUseStrictDirective: function() {\n      var token = this.getDirectivePrologueStringToken_();\n      if (!token)\n        return false;\n      var v = token.value;\n      return v === '\"use strict\"' || v === \"'use strict'\";\n    },\n    toJSON: function() {\n      return utilJSON.transform(this, $ParseTree.replacer);\n    },\n    stringify: function() {\n      var indent = arguments[0] !== (void 0) ? arguments[0] : 2;\n      return JSON.stringify(this, $ParseTree.replacer, indent);\n    },\n    getStringValue: function() {\n      switch (this.type) {\n        case IDENTIFIER_EXPRESSION:\n        case BINDING_IDENTIFIER:\n          return this.identifierToken.toString();\n        case IMPORTED_BINDING:\n          return this.binding.getStringValue();\n        case PROPERTY_NAME_SHORTHAND:\n          return this.name.toString();\n      }\n      throw new Error('Not yet implemented');\n    }\n  }, {\n    stripLocation: function(key, value) {\n      if (key === 'location') {\n        return undefined;\n      }\n      return value;\n    },\n    replacer: function(k, v) {\n      if (v instanceof $ParseTree || v instanceof Token) {\n        var rv = {type: v.type};\n        Object.keys(v).forEach(function(name) {\n          if (name !== 'location')\n            rv[name] = v[name];\n        });\n        return rv;\n      }\n      return v;\n    }\n  });\n  return {\n    get ParseTreeType() {\n      return ParseTreeType;\n    },\n    get ParseTree() {\n      return ParseTree;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/trees/ParseTrees\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/trees/ParseTrees\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/trees/ParseTrees\", path);\n  }\n  var ParseTree = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTree\").ParseTree;\n  var ParseTreeType = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\");\n  var ANNOTATION = ParseTreeType.ANNOTATION;\n  var Annotation = function Annotation(location, name, args) {\n    this.location = location;\n    this.name = name;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(Annotation, {\n    transform: function(transformer) {\n      return transformer.transformAnnotation(this);\n    },\n    visit: function(visitor) {\n      visitor.visitAnnotation(this);\n    },\n    get type() {\n      return ANNOTATION;\n    }\n  }, {}, ParseTree);\n  var ANON_BLOCK = ParseTreeType.ANON_BLOCK;\n  var AnonBlock = function AnonBlock(location, statements) {\n    this.location = location;\n    this.statements = statements;\n  };\n  ($traceurRuntime.createClass)(AnonBlock, {\n    transform: function(transformer) {\n      return transformer.transformAnonBlock(this);\n    },\n    visit: function(visitor) {\n      visitor.visitAnonBlock(this);\n    },\n    get type() {\n      return ANON_BLOCK;\n    }\n  }, {}, ParseTree);\n  var ARGUMENT_LIST = ParseTreeType.ARGUMENT_LIST;\n  var ArgumentList = function ArgumentList(location, args) {\n    this.location = location;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(ArgumentList, {\n    transform: function(transformer) {\n      return transformer.transformArgumentList(this);\n    },\n    visit: function(visitor) {\n      visitor.visitArgumentList(this);\n    },\n    get type() {\n      return ARGUMENT_LIST;\n    }\n  }, {}, ParseTree);\n  var ARRAY_COMPREHENSION = ParseTreeType.ARRAY_COMPREHENSION;\n  var ArrayComprehension = function ArrayComprehension(location, comprehensionList, expression) {\n    this.location = location;\n    this.comprehensionList = comprehensionList;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ArrayComprehension, {\n    transform: function(transformer) {\n      return transformer.transformArrayComprehension(this);\n    },\n    visit: function(visitor) {\n      visitor.visitArrayComprehension(this);\n    },\n    get type() {\n      return ARRAY_COMPREHENSION;\n    }\n  }, {}, ParseTree);\n  var ARRAY_LITERAL_EXPRESSION = ParseTreeType.ARRAY_LITERAL_EXPRESSION;\n  var ArrayLiteralExpression = function ArrayLiteralExpression(location, elements) {\n    this.location = location;\n    this.elements = elements;\n  };\n  ($traceurRuntime.createClass)(ArrayLiteralExpression, {\n    transform: function(transformer) {\n      return transformer.transformArrayLiteralExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitArrayLiteralExpression(this);\n    },\n    get type() {\n      return ARRAY_LITERAL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var ARRAY_PATTERN = ParseTreeType.ARRAY_PATTERN;\n  var ArrayPattern = function ArrayPattern(location, elements) {\n    this.location = location;\n    this.elements = elements;\n  };\n  ($traceurRuntime.createClass)(ArrayPattern, {\n    transform: function(transformer) {\n      return transformer.transformArrayPattern(this);\n    },\n    visit: function(visitor) {\n      visitor.visitArrayPattern(this);\n    },\n    get type() {\n      return ARRAY_PATTERN;\n    }\n  }, {}, ParseTree);\n  var ARROW_FUNCTION_EXPRESSION = ParseTreeType.ARROW_FUNCTION_EXPRESSION;\n  var ArrowFunctionExpression = function ArrowFunctionExpression(location, functionKind, parameterList, body) {\n    this.location = location;\n    this.functionKind = functionKind;\n    this.parameterList = parameterList;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(ArrowFunctionExpression, {\n    transform: function(transformer) {\n      return transformer.transformArrowFunctionExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitArrowFunctionExpression(this);\n    },\n    get type() {\n      return ARROW_FUNCTION_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var ASSIGNMENT_ELEMENT = ParseTreeType.ASSIGNMENT_ELEMENT;\n  var AssignmentElement = function AssignmentElement(location, assignment, initializer) {\n    this.location = location;\n    this.assignment = assignment;\n    this.initializer = initializer;\n  };\n  ($traceurRuntime.createClass)(AssignmentElement, {\n    transform: function(transformer) {\n      return transformer.transformAssignmentElement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitAssignmentElement(this);\n    },\n    get type() {\n      return ASSIGNMENT_ELEMENT;\n    }\n  }, {}, ParseTree);\n  var AWAIT_EXPRESSION = ParseTreeType.AWAIT_EXPRESSION;\n  var AwaitExpression = function AwaitExpression(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(AwaitExpression, {\n    transform: function(transformer) {\n      return transformer.transformAwaitExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitAwaitExpression(this);\n    },\n    get type() {\n      return AWAIT_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var BINARY_EXPRESSION = ParseTreeType.BINARY_EXPRESSION;\n  var BinaryExpression = function BinaryExpression(location, left, operator, right) {\n    this.location = location;\n    this.left = left;\n    this.operator = operator;\n    this.right = right;\n  };\n  ($traceurRuntime.createClass)(BinaryExpression, {\n    transform: function(transformer) {\n      return transformer.transformBinaryExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitBinaryExpression(this);\n    },\n    get type() {\n      return BINARY_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var BINDING_ELEMENT = ParseTreeType.BINDING_ELEMENT;\n  var BindingElement = function BindingElement(location, binding, initializer) {\n    this.location = location;\n    this.binding = binding;\n    this.initializer = initializer;\n  };\n  ($traceurRuntime.createClass)(BindingElement, {\n    transform: function(transformer) {\n      return transformer.transformBindingElement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitBindingElement(this);\n    },\n    get type() {\n      return BINDING_ELEMENT;\n    }\n  }, {}, ParseTree);\n  var BINDING_IDENTIFIER = ParseTreeType.BINDING_IDENTIFIER;\n  var BindingIdentifier = function BindingIdentifier(location, identifierToken) {\n    this.location = location;\n    this.identifierToken = identifierToken;\n  };\n  ($traceurRuntime.createClass)(BindingIdentifier, {\n    transform: function(transformer) {\n      return transformer.transformBindingIdentifier(this);\n    },\n    visit: function(visitor) {\n      visitor.visitBindingIdentifier(this);\n    },\n    get type() {\n      return BINDING_IDENTIFIER;\n    }\n  }, {}, ParseTree);\n  var BLOCK = ParseTreeType.BLOCK;\n  var Block = function Block(location, statements) {\n    this.location = location;\n    this.statements = statements;\n  };\n  ($traceurRuntime.createClass)(Block, {\n    transform: function(transformer) {\n      return transformer.transformBlock(this);\n    },\n    visit: function(visitor) {\n      visitor.visitBlock(this);\n    },\n    get type() {\n      return BLOCK;\n    }\n  }, {}, ParseTree);\n  var BREAK_STATEMENT = ParseTreeType.BREAK_STATEMENT;\n  var BreakStatement = function BreakStatement(location, name) {\n    this.location = location;\n    this.name = name;\n  };\n  ($traceurRuntime.createClass)(BreakStatement, {\n    transform: function(transformer) {\n      return transformer.transformBreakStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitBreakStatement(this);\n    },\n    get type() {\n      return BREAK_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var CALL_EXPRESSION = ParseTreeType.CALL_EXPRESSION;\n  var CallExpression = function CallExpression(location, operand, args) {\n    this.location = location;\n    this.operand = operand;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(CallExpression, {\n    transform: function(transformer) {\n      return transformer.transformCallExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCallExpression(this);\n    },\n    get type() {\n      return CALL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var CASE_CLAUSE = ParseTreeType.CASE_CLAUSE;\n  var CaseClause = function CaseClause(location, expression, statements) {\n    this.location = location;\n    this.expression = expression;\n    this.statements = statements;\n  };\n  ($traceurRuntime.createClass)(CaseClause, {\n    transform: function(transformer) {\n      return transformer.transformCaseClause(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCaseClause(this);\n    },\n    get type() {\n      return CASE_CLAUSE;\n    }\n  }, {}, ParseTree);\n  var CATCH = ParseTreeType.CATCH;\n  var Catch = function Catch(location, binding, catchBody) {\n    this.location = location;\n    this.binding = binding;\n    this.catchBody = catchBody;\n  };\n  ($traceurRuntime.createClass)(Catch, {\n    transform: function(transformer) {\n      return transformer.transformCatch(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCatch(this);\n    },\n    get type() {\n      return CATCH;\n    }\n  }, {}, ParseTree);\n  var CLASS_DECLARATION = ParseTreeType.CLASS_DECLARATION;\n  var ClassDeclaration = function ClassDeclaration(location, name, superClass, elements, annotations) {\n    this.location = location;\n    this.name = name;\n    this.superClass = superClass;\n    this.elements = elements;\n    this.annotations = annotations;\n  };\n  ($traceurRuntime.createClass)(ClassDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformClassDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitClassDeclaration(this);\n    },\n    get type() {\n      return CLASS_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var CLASS_EXPRESSION = ParseTreeType.CLASS_EXPRESSION;\n  var ClassExpression = function ClassExpression(location, name, superClass, elements, annotations) {\n    this.location = location;\n    this.name = name;\n    this.superClass = superClass;\n    this.elements = elements;\n    this.annotations = annotations;\n  };\n  ($traceurRuntime.createClass)(ClassExpression, {\n    transform: function(transformer) {\n      return transformer.transformClassExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitClassExpression(this);\n    },\n    get type() {\n      return CLASS_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var COMMA_EXPRESSION = ParseTreeType.COMMA_EXPRESSION;\n  var CommaExpression = function CommaExpression(location, expressions) {\n    this.location = location;\n    this.expressions = expressions;\n  };\n  ($traceurRuntime.createClass)(CommaExpression, {\n    transform: function(transformer) {\n      return transformer.transformCommaExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCommaExpression(this);\n    },\n    get type() {\n      return COMMA_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var COMPREHENSION_FOR = ParseTreeType.COMPREHENSION_FOR;\n  var ComprehensionFor = function ComprehensionFor(location, left, iterator) {\n    this.location = location;\n    this.left = left;\n    this.iterator = iterator;\n  };\n  ($traceurRuntime.createClass)(ComprehensionFor, {\n    transform: function(transformer) {\n      return transformer.transformComprehensionFor(this);\n    },\n    visit: function(visitor) {\n      visitor.visitComprehensionFor(this);\n    },\n    get type() {\n      return COMPREHENSION_FOR;\n    }\n  }, {}, ParseTree);\n  var COMPREHENSION_IF = ParseTreeType.COMPREHENSION_IF;\n  var ComprehensionIf = function ComprehensionIf(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ComprehensionIf, {\n    transform: function(transformer) {\n      return transformer.transformComprehensionIf(this);\n    },\n    visit: function(visitor) {\n      visitor.visitComprehensionIf(this);\n    },\n    get type() {\n      return COMPREHENSION_IF;\n    }\n  }, {}, ParseTree);\n  var COMPUTED_PROPERTY_NAME = ParseTreeType.COMPUTED_PROPERTY_NAME;\n  var ComputedPropertyName = function ComputedPropertyName(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ComputedPropertyName, {\n    transform: function(transformer) {\n      return transformer.transformComputedPropertyName(this);\n    },\n    visit: function(visitor) {\n      visitor.visitComputedPropertyName(this);\n    },\n    get type() {\n      return COMPUTED_PROPERTY_NAME;\n    }\n  }, {}, ParseTree);\n  var CONDITIONAL_EXPRESSION = ParseTreeType.CONDITIONAL_EXPRESSION;\n  var ConditionalExpression = function ConditionalExpression(location, condition, left, right) {\n    this.location = location;\n    this.condition = condition;\n    this.left = left;\n    this.right = right;\n  };\n  ($traceurRuntime.createClass)(ConditionalExpression, {\n    transform: function(transformer) {\n      return transformer.transformConditionalExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitConditionalExpression(this);\n    },\n    get type() {\n      return CONDITIONAL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var CONTINUE_STATEMENT = ParseTreeType.CONTINUE_STATEMENT;\n  var ContinueStatement = function ContinueStatement(location, name) {\n    this.location = location;\n    this.name = name;\n  };\n  ($traceurRuntime.createClass)(ContinueStatement, {\n    transform: function(transformer) {\n      return transformer.transformContinueStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitContinueStatement(this);\n    },\n    get type() {\n      return CONTINUE_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var COVER_FORMALS = ParseTreeType.COVER_FORMALS;\n  var CoverFormals = function CoverFormals(location, expressions) {\n    this.location = location;\n    this.expressions = expressions;\n  };\n  ($traceurRuntime.createClass)(CoverFormals, {\n    transform: function(transformer) {\n      return transformer.transformCoverFormals(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCoverFormals(this);\n    },\n    get type() {\n      return COVER_FORMALS;\n    }\n  }, {}, ParseTree);\n  var COVER_INITIALIZED_NAME = ParseTreeType.COVER_INITIALIZED_NAME;\n  var CoverInitializedName = function CoverInitializedName(location, name, equalToken, initializer) {\n    this.location = location;\n    this.name = name;\n    this.equalToken = equalToken;\n    this.initializer = initializer;\n  };\n  ($traceurRuntime.createClass)(CoverInitializedName, {\n    transform: function(transformer) {\n      return transformer.transformCoverInitializedName(this);\n    },\n    visit: function(visitor) {\n      visitor.visitCoverInitializedName(this);\n    },\n    get type() {\n      return COVER_INITIALIZED_NAME;\n    }\n  }, {}, ParseTree);\n  var DEBUGGER_STATEMENT = ParseTreeType.DEBUGGER_STATEMENT;\n  var DebuggerStatement = function DebuggerStatement(location) {\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(DebuggerStatement, {\n    transform: function(transformer) {\n      return transformer.transformDebuggerStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitDebuggerStatement(this);\n    },\n    get type() {\n      return DEBUGGER_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var DEFAULT_CLAUSE = ParseTreeType.DEFAULT_CLAUSE;\n  var DefaultClause = function DefaultClause(location, statements) {\n    this.location = location;\n    this.statements = statements;\n  };\n  ($traceurRuntime.createClass)(DefaultClause, {\n    transform: function(transformer) {\n      return transformer.transformDefaultClause(this);\n    },\n    visit: function(visitor) {\n      visitor.visitDefaultClause(this);\n    },\n    get type() {\n      return DEFAULT_CLAUSE;\n    }\n  }, {}, ParseTree);\n  var DO_WHILE_STATEMENT = ParseTreeType.DO_WHILE_STATEMENT;\n  var DoWhileStatement = function DoWhileStatement(location, body, condition) {\n    this.location = location;\n    this.body = body;\n    this.condition = condition;\n  };\n  ($traceurRuntime.createClass)(DoWhileStatement, {\n    transform: function(transformer) {\n      return transformer.transformDoWhileStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitDoWhileStatement(this);\n    },\n    get type() {\n      return DO_WHILE_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var EMPTY_STATEMENT = ParseTreeType.EMPTY_STATEMENT;\n  var EmptyStatement = function EmptyStatement(location) {\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(EmptyStatement, {\n    transform: function(transformer) {\n      return transformer.transformEmptyStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitEmptyStatement(this);\n    },\n    get type() {\n      return EMPTY_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var EXPORT_DECLARATION = ParseTreeType.EXPORT_DECLARATION;\n  var ExportDeclaration = function ExportDeclaration(location, declaration, annotations) {\n    this.location = location;\n    this.declaration = declaration;\n    this.annotations = annotations;\n  };\n  ($traceurRuntime.createClass)(ExportDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformExportDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExportDeclaration(this);\n    },\n    get type() {\n      return EXPORT_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var EXPORT_DEFAULT = ParseTreeType.EXPORT_DEFAULT;\n  var ExportDefault = function ExportDefault(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ExportDefault, {\n    transform: function(transformer) {\n      return transformer.transformExportDefault(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExportDefault(this);\n    },\n    get type() {\n      return EXPORT_DEFAULT;\n    }\n  }, {}, ParseTree);\n  var EXPORT_SPECIFIER = ParseTreeType.EXPORT_SPECIFIER;\n  var ExportSpecifier = function ExportSpecifier(location, lhs, rhs) {\n    this.location = location;\n    this.lhs = lhs;\n    this.rhs = rhs;\n  };\n  ($traceurRuntime.createClass)(ExportSpecifier, {\n    transform: function(transformer) {\n      return transformer.transformExportSpecifier(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExportSpecifier(this);\n    },\n    get type() {\n      return EXPORT_SPECIFIER;\n    }\n  }, {}, ParseTree);\n  var EXPORT_SPECIFIER_SET = ParseTreeType.EXPORT_SPECIFIER_SET;\n  var ExportSpecifierSet = function ExportSpecifierSet(location, specifiers) {\n    this.location = location;\n    this.specifiers = specifiers;\n  };\n  ($traceurRuntime.createClass)(ExportSpecifierSet, {\n    transform: function(transformer) {\n      return transformer.transformExportSpecifierSet(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExportSpecifierSet(this);\n    },\n    get type() {\n      return EXPORT_SPECIFIER_SET;\n    }\n  }, {}, ParseTree);\n  var EXPORT_STAR = ParseTreeType.EXPORT_STAR;\n  var ExportStar = function ExportStar(location) {\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(ExportStar, {\n    transform: function(transformer) {\n      return transformer.transformExportStar(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExportStar(this);\n    },\n    get type() {\n      return EXPORT_STAR;\n    }\n  }, {}, ParseTree);\n  var EXPRESSION_STATEMENT = ParseTreeType.EXPRESSION_STATEMENT;\n  var ExpressionStatement = function ExpressionStatement(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ExpressionStatement, {\n    transform: function(transformer) {\n      return transformer.transformExpressionStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitExpressionStatement(this);\n    },\n    get type() {\n      return EXPRESSION_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var FINALLY = ParseTreeType.FINALLY;\n  var Finally = function Finally(location, block) {\n    this.location = location;\n    this.block = block;\n  };\n  ($traceurRuntime.createClass)(Finally, {\n    transform: function(transformer) {\n      return transformer.transformFinally(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFinally(this);\n    },\n    get type() {\n      return FINALLY;\n    }\n  }, {}, ParseTree);\n  var FOR_IN_STATEMENT = ParseTreeType.FOR_IN_STATEMENT;\n  var ForInStatement = function ForInStatement(location, initializer, collection, body) {\n    this.location = location;\n    this.initializer = initializer;\n    this.collection = collection;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(ForInStatement, {\n    transform: function(transformer) {\n      return transformer.transformForInStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitForInStatement(this);\n    },\n    get type() {\n      return FOR_IN_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var FOR_OF_STATEMENT = ParseTreeType.FOR_OF_STATEMENT;\n  var ForOfStatement = function ForOfStatement(location, initializer, collection, body) {\n    this.location = location;\n    this.initializer = initializer;\n    this.collection = collection;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(ForOfStatement, {\n    transform: function(transformer) {\n      return transformer.transformForOfStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitForOfStatement(this);\n    },\n    get type() {\n      return FOR_OF_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var FOR_STATEMENT = ParseTreeType.FOR_STATEMENT;\n  var ForStatement = function ForStatement(location, initializer, condition, increment, body) {\n    this.location = location;\n    this.initializer = initializer;\n    this.condition = condition;\n    this.increment = increment;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(ForStatement, {\n    transform: function(transformer) {\n      return transformer.transformForStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitForStatement(this);\n    },\n    get type() {\n      return FOR_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var FORMAL_PARAMETER = ParseTreeType.FORMAL_PARAMETER;\n  var FormalParameter = function FormalParameter(location, parameter, typeAnnotation, annotations) {\n    this.location = location;\n    this.parameter = parameter;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n  };\n  ($traceurRuntime.createClass)(FormalParameter, {\n    transform: function(transformer) {\n      return transformer.transformFormalParameter(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFormalParameter(this);\n    },\n    get type() {\n      return FORMAL_PARAMETER;\n    }\n  }, {}, ParseTree);\n  var FORMAL_PARAMETER_LIST = ParseTreeType.FORMAL_PARAMETER_LIST;\n  var FormalParameterList = function FormalParameterList(location, parameters) {\n    this.location = location;\n    this.parameters = parameters;\n  };\n  ($traceurRuntime.createClass)(FormalParameterList, {\n    transform: function(transformer) {\n      return transformer.transformFormalParameterList(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFormalParameterList(this);\n    },\n    get type() {\n      return FORMAL_PARAMETER_LIST;\n    }\n  }, {}, ParseTree);\n  var FUNCTION_BODY = ParseTreeType.FUNCTION_BODY;\n  var FunctionBody = function FunctionBody(location, statements) {\n    this.location = location;\n    this.statements = statements;\n  };\n  ($traceurRuntime.createClass)(FunctionBody, {\n    transform: function(transformer) {\n      return transformer.transformFunctionBody(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFunctionBody(this);\n    },\n    get type() {\n      return FUNCTION_BODY;\n    }\n  }, {}, ParseTree);\n  var FUNCTION_DECLARATION = ParseTreeType.FUNCTION_DECLARATION;\n  var FunctionDeclaration = function FunctionDeclaration(location, name, functionKind, parameterList, typeAnnotation, annotations, body) {\n    this.location = location;\n    this.name = name;\n    this.functionKind = functionKind;\n    this.parameterList = parameterList;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(FunctionDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformFunctionDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFunctionDeclaration(this);\n    },\n    get type() {\n      return FUNCTION_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var FUNCTION_EXPRESSION = ParseTreeType.FUNCTION_EXPRESSION;\n  var FunctionExpression = function FunctionExpression(location, name, functionKind, parameterList, typeAnnotation, annotations, body) {\n    this.location = location;\n    this.name = name;\n    this.functionKind = functionKind;\n    this.parameterList = parameterList;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(FunctionExpression, {\n    transform: function(transformer) {\n      return transformer.transformFunctionExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitFunctionExpression(this);\n    },\n    get type() {\n      return FUNCTION_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var GENERATOR_COMPREHENSION = ParseTreeType.GENERATOR_COMPREHENSION;\n  var GeneratorComprehension = function GeneratorComprehension(location, comprehensionList, expression) {\n    this.location = location;\n    this.comprehensionList = comprehensionList;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(GeneratorComprehension, {\n    transform: function(transformer) {\n      return transformer.transformGeneratorComprehension(this);\n    },\n    visit: function(visitor) {\n      visitor.visitGeneratorComprehension(this);\n    },\n    get type() {\n      return GENERATOR_COMPREHENSION;\n    }\n  }, {}, ParseTree);\n  var GET_ACCESSOR = ParseTreeType.GET_ACCESSOR;\n  var GetAccessor = function GetAccessor(location, isStatic, name, typeAnnotation, annotations, body) {\n    this.location = location;\n    this.isStatic = isStatic;\n    this.name = name;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(GetAccessor, {\n    transform: function(transformer) {\n      return transformer.transformGetAccessor(this);\n    },\n    visit: function(visitor) {\n      visitor.visitGetAccessor(this);\n    },\n    get type() {\n      return GET_ACCESSOR;\n    }\n  }, {}, ParseTree);\n  var IDENTIFIER_EXPRESSION = ParseTreeType.IDENTIFIER_EXPRESSION;\n  var IdentifierExpression = function IdentifierExpression(location, identifierToken) {\n    this.location = location;\n    this.identifierToken = identifierToken;\n  };\n  ($traceurRuntime.createClass)(IdentifierExpression, {\n    transform: function(transformer) {\n      return transformer.transformIdentifierExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitIdentifierExpression(this);\n    },\n    get type() {\n      return IDENTIFIER_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var IF_STATEMENT = ParseTreeType.IF_STATEMENT;\n  var IfStatement = function IfStatement(location, condition, ifClause, elseClause) {\n    this.location = location;\n    this.condition = condition;\n    this.ifClause = ifClause;\n    this.elseClause = elseClause;\n  };\n  ($traceurRuntime.createClass)(IfStatement, {\n    transform: function(transformer) {\n      return transformer.transformIfStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitIfStatement(this);\n    },\n    get type() {\n      return IF_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var IMPORTED_BINDING = ParseTreeType.IMPORTED_BINDING;\n  var ImportedBinding = function ImportedBinding(location, binding) {\n    this.location = location;\n    this.binding = binding;\n  };\n  ($traceurRuntime.createClass)(ImportedBinding, {\n    transform: function(transformer) {\n      return transformer.transformImportedBinding(this);\n    },\n    visit: function(visitor) {\n      visitor.visitImportedBinding(this);\n    },\n    get type() {\n      return IMPORTED_BINDING;\n    }\n  }, {}, ParseTree);\n  var IMPORT_DECLARATION = ParseTreeType.IMPORT_DECLARATION;\n  var ImportDeclaration = function ImportDeclaration(location, importClause, moduleSpecifier) {\n    this.location = location;\n    this.importClause = importClause;\n    this.moduleSpecifier = moduleSpecifier;\n  };\n  ($traceurRuntime.createClass)(ImportDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformImportDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitImportDeclaration(this);\n    },\n    get type() {\n      return IMPORT_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var IMPORT_SPECIFIER = ParseTreeType.IMPORT_SPECIFIER;\n  var ImportSpecifier = function ImportSpecifier(location, binding, name) {\n    this.location = location;\n    this.binding = binding;\n    this.name = name;\n  };\n  ($traceurRuntime.createClass)(ImportSpecifier, {\n    transform: function(transformer) {\n      return transformer.transformImportSpecifier(this);\n    },\n    visit: function(visitor) {\n      visitor.visitImportSpecifier(this);\n    },\n    get type() {\n      return IMPORT_SPECIFIER;\n    }\n  }, {}, ParseTree);\n  var IMPORT_SPECIFIER_SET = ParseTreeType.IMPORT_SPECIFIER_SET;\n  var ImportSpecifierSet = function ImportSpecifierSet(location, specifiers) {\n    this.location = location;\n    this.specifiers = specifiers;\n  };\n  ($traceurRuntime.createClass)(ImportSpecifierSet, {\n    transform: function(transformer) {\n      return transformer.transformImportSpecifierSet(this);\n    },\n    visit: function(visitor) {\n      visitor.visitImportSpecifierSet(this);\n    },\n    get type() {\n      return IMPORT_SPECIFIER_SET;\n    }\n  }, {}, ParseTree);\n  var LABELLED_STATEMENT = ParseTreeType.LABELLED_STATEMENT;\n  var LabelledStatement = function LabelledStatement(location, name, statement) {\n    this.location = location;\n    this.name = name;\n    this.statement = statement;\n  };\n  ($traceurRuntime.createClass)(LabelledStatement, {\n    transform: function(transformer) {\n      return transformer.transformLabelledStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitLabelledStatement(this);\n    },\n    get type() {\n      return LABELLED_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var LITERAL_EXPRESSION = ParseTreeType.LITERAL_EXPRESSION;\n  var LiteralExpression = function LiteralExpression(location, literalToken) {\n    this.location = location;\n    this.literalToken = literalToken;\n  };\n  ($traceurRuntime.createClass)(LiteralExpression, {\n    transform: function(transformer) {\n      return transformer.transformLiteralExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitLiteralExpression(this);\n    },\n    get type() {\n      return LITERAL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var LITERAL_PROPERTY_NAME = ParseTreeType.LITERAL_PROPERTY_NAME;\n  var LiteralPropertyName = function LiteralPropertyName(location, literalToken) {\n    this.location = location;\n    this.literalToken = literalToken;\n  };\n  ($traceurRuntime.createClass)(LiteralPropertyName, {\n    transform: function(transformer) {\n      return transformer.transformLiteralPropertyName(this);\n    },\n    visit: function(visitor) {\n      visitor.visitLiteralPropertyName(this);\n    },\n    get type() {\n      return LITERAL_PROPERTY_NAME;\n    }\n  }, {}, ParseTree);\n  var MEMBER_EXPRESSION = ParseTreeType.MEMBER_EXPRESSION;\n  var MemberExpression = function MemberExpression(location, operand, memberName) {\n    this.location = location;\n    this.operand = operand;\n    this.memberName = memberName;\n  };\n  ($traceurRuntime.createClass)(MemberExpression, {\n    transform: function(transformer) {\n      return transformer.transformMemberExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitMemberExpression(this);\n    },\n    get type() {\n      return MEMBER_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var MEMBER_LOOKUP_EXPRESSION = ParseTreeType.MEMBER_LOOKUP_EXPRESSION;\n  var MemberLookupExpression = function MemberLookupExpression(location, operand, memberExpression) {\n    this.location = location;\n    this.operand = operand;\n    this.memberExpression = memberExpression;\n  };\n  ($traceurRuntime.createClass)(MemberLookupExpression, {\n    transform: function(transformer) {\n      return transformer.transformMemberLookupExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitMemberLookupExpression(this);\n    },\n    get type() {\n      return MEMBER_LOOKUP_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var MODULE = ParseTreeType.MODULE;\n  var Module = function Module(location, scriptItemList, moduleName) {\n    this.location = location;\n    this.scriptItemList = scriptItemList;\n    this.moduleName = moduleName;\n  };\n  ($traceurRuntime.createClass)(Module, {\n    transform: function(transformer) {\n      return transformer.transformModule(this);\n    },\n    visit: function(visitor) {\n      visitor.visitModule(this);\n    },\n    get type() {\n      return MODULE;\n    }\n  }, {}, ParseTree);\n  var MODULE_DECLARATION = ParseTreeType.MODULE_DECLARATION;\n  var ModuleDeclaration = function ModuleDeclaration(location, binding, expression) {\n    this.location = location;\n    this.binding = binding;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ModuleDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformModuleDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitModuleDeclaration(this);\n    },\n    get type() {\n      return MODULE_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var MODULE_SPECIFIER = ParseTreeType.MODULE_SPECIFIER;\n  var ModuleSpecifier = function ModuleSpecifier(location, token) {\n    this.location = location;\n    this.token = token;\n  };\n  ($traceurRuntime.createClass)(ModuleSpecifier, {\n    transform: function(transformer) {\n      return transformer.transformModuleSpecifier(this);\n    },\n    visit: function(visitor) {\n      visitor.visitModuleSpecifier(this);\n    },\n    get type() {\n      return MODULE_SPECIFIER;\n    }\n  }, {}, ParseTree);\n  var NAMED_EXPORT = ParseTreeType.NAMED_EXPORT;\n  var NamedExport = function NamedExport(location, moduleSpecifier, specifierSet) {\n    this.location = location;\n    this.moduleSpecifier = moduleSpecifier;\n    this.specifierSet = specifierSet;\n  };\n  ($traceurRuntime.createClass)(NamedExport, {\n    transform: function(transformer) {\n      return transformer.transformNamedExport(this);\n    },\n    visit: function(visitor) {\n      visitor.visitNamedExport(this);\n    },\n    get type() {\n      return NAMED_EXPORT;\n    }\n  }, {}, ParseTree);\n  var NEW_EXPRESSION = ParseTreeType.NEW_EXPRESSION;\n  var NewExpression = function NewExpression(location, operand, args) {\n    this.location = location;\n    this.operand = operand;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(NewExpression, {\n    transform: function(transformer) {\n      return transformer.transformNewExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitNewExpression(this);\n    },\n    get type() {\n      return NEW_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var OBJECT_LITERAL_EXPRESSION = ParseTreeType.OBJECT_LITERAL_EXPRESSION;\n  var ObjectLiteralExpression = function ObjectLiteralExpression(location, propertyNameAndValues) {\n    this.location = location;\n    this.propertyNameAndValues = propertyNameAndValues;\n  };\n  ($traceurRuntime.createClass)(ObjectLiteralExpression, {\n    transform: function(transformer) {\n      return transformer.transformObjectLiteralExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitObjectLiteralExpression(this);\n    },\n    get type() {\n      return OBJECT_LITERAL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var OBJECT_PATTERN = ParseTreeType.OBJECT_PATTERN;\n  var ObjectPattern = function ObjectPattern(location, fields) {\n    this.location = location;\n    this.fields = fields;\n  };\n  ($traceurRuntime.createClass)(ObjectPattern, {\n    transform: function(transformer) {\n      return transformer.transformObjectPattern(this);\n    },\n    visit: function(visitor) {\n      visitor.visitObjectPattern(this);\n    },\n    get type() {\n      return OBJECT_PATTERN;\n    }\n  }, {}, ParseTree);\n  var OBJECT_PATTERN_FIELD = ParseTreeType.OBJECT_PATTERN_FIELD;\n  var ObjectPatternField = function ObjectPatternField(location, name, element) {\n    this.location = location;\n    this.name = name;\n    this.element = element;\n  };\n  ($traceurRuntime.createClass)(ObjectPatternField, {\n    transform: function(transformer) {\n      return transformer.transformObjectPatternField(this);\n    },\n    visit: function(visitor) {\n      visitor.visitObjectPatternField(this);\n    },\n    get type() {\n      return OBJECT_PATTERN_FIELD;\n    }\n  }, {}, ParseTree);\n  var PAREN_EXPRESSION = ParseTreeType.PAREN_EXPRESSION;\n  var ParenExpression = function ParenExpression(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ParenExpression, {\n    transform: function(transformer) {\n      return transformer.transformParenExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitParenExpression(this);\n    },\n    get type() {\n      return PAREN_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var POSTFIX_EXPRESSION = ParseTreeType.POSTFIX_EXPRESSION;\n  var PostfixExpression = function PostfixExpression(location, operand, operator) {\n    this.location = location;\n    this.operand = operand;\n    this.operator = operator;\n  };\n  ($traceurRuntime.createClass)(PostfixExpression, {\n    transform: function(transformer) {\n      return transformer.transformPostfixExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPostfixExpression(this);\n    },\n    get type() {\n      return POSTFIX_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var PREDEFINED_TYPE = ParseTreeType.PREDEFINED_TYPE;\n  var PredefinedType = function PredefinedType(location, typeToken) {\n    this.location = location;\n    this.typeToken = typeToken;\n  };\n  ($traceurRuntime.createClass)(PredefinedType, {\n    transform: function(transformer) {\n      return transformer.transformPredefinedType(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPredefinedType(this);\n    },\n    get type() {\n      return PREDEFINED_TYPE;\n    }\n  }, {}, ParseTree);\n  var SCRIPT = ParseTreeType.SCRIPT;\n  var Script = function Script(location, scriptItemList, moduleName) {\n    this.location = location;\n    this.scriptItemList = scriptItemList;\n    this.moduleName = moduleName;\n  };\n  ($traceurRuntime.createClass)(Script, {\n    transform: function(transformer) {\n      return transformer.transformScript(this);\n    },\n    visit: function(visitor) {\n      visitor.visitScript(this);\n    },\n    get type() {\n      return SCRIPT;\n    }\n  }, {}, ParseTree);\n  var PROPERTY_METHOD_ASSIGNMENT = ParseTreeType.PROPERTY_METHOD_ASSIGNMENT;\n  var PropertyMethodAssignment = function PropertyMethodAssignment(location, isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body) {\n    this.location = location;\n    this.isStatic = isStatic;\n    this.functionKind = functionKind;\n    this.name = name;\n    this.parameterList = parameterList;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(PropertyMethodAssignment, {\n    transform: function(transformer) {\n      return transformer.transformPropertyMethodAssignment(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPropertyMethodAssignment(this);\n    },\n    get type() {\n      return PROPERTY_METHOD_ASSIGNMENT;\n    }\n  }, {}, ParseTree);\n  var PROPERTY_NAME_ASSIGNMENT = ParseTreeType.PROPERTY_NAME_ASSIGNMENT;\n  var PropertyNameAssignment = function PropertyNameAssignment(location, name, value) {\n    this.location = location;\n    this.name = name;\n    this.value = value;\n  };\n  ($traceurRuntime.createClass)(PropertyNameAssignment, {\n    transform: function(transformer) {\n      return transformer.transformPropertyNameAssignment(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPropertyNameAssignment(this);\n    },\n    get type() {\n      return PROPERTY_NAME_ASSIGNMENT;\n    }\n  }, {}, ParseTree);\n  var PROPERTY_NAME_SHORTHAND = ParseTreeType.PROPERTY_NAME_SHORTHAND;\n  var PropertyNameShorthand = function PropertyNameShorthand(location, name) {\n    this.location = location;\n    this.name = name;\n  };\n  ($traceurRuntime.createClass)(PropertyNameShorthand, {\n    transform: function(transformer) {\n      return transformer.transformPropertyNameShorthand(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPropertyNameShorthand(this);\n    },\n    get type() {\n      return PROPERTY_NAME_SHORTHAND;\n    }\n  }, {}, ParseTree);\n  var PROPERTY_VARIABLE_DECLARATION = ParseTreeType.PROPERTY_VARIABLE_DECLARATION;\n  var PropertyVariableDeclaration = function PropertyVariableDeclaration(location, isStatic, name, typeAnnotation, annotations) {\n    this.location = location;\n    this.isStatic = isStatic;\n    this.name = name;\n    this.typeAnnotation = typeAnnotation;\n    this.annotations = annotations;\n  };\n  ($traceurRuntime.createClass)(PropertyVariableDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformPropertyVariableDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitPropertyVariableDeclaration(this);\n    },\n    get type() {\n      return PROPERTY_VARIABLE_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var REST_PARAMETER = ParseTreeType.REST_PARAMETER;\n  var RestParameter = function RestParameter(location, identifier) {\n    this.location = location;\n    this.identifier = identifier;\n  };\n  ($traceurRuntime.createClass)(RestParameter, {\n    transform: function(transformer) {\n      return transformer.transformRestParameter(this);\n    },\n    visit: function(visitor) {\n      visitor.visitRestParameter(this);\n    },\n    get type() {\n      return REST_PARAMETER;\n    }\n  }, {}, ParseTree);\n  var RETURN_STATEMENT = ParseTreeType.RETURN_STATEMENT;\n  var ReturnStatement = function ReturnStatement(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(ReturnStatement, {\n    transform: function(transformer) {\n      return transformer.transformReturnStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitReturnStatement(this);\n    },\n    get type() {\n      return RETURN_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var SET_ACCESSOR = ParseTreeType.SET_ACCESSOR;\n  var SetAccessor = function SetAccessor(location, isStatic, name, parameterList, annotations, body) {\n    this.location = location;\n    this.isStatic = isStatic;\n    this.name = name;\n    this.parameterList = parameterList;\n    this.annotations = annotations;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(SetAccessor, {\n    transform: function(transformer) {\n      return transformer.transformSetAccessor(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSetAccessor(this);\n    },\n    get type() {\n      return SET_ACCESSOR;\n    }\n  }, {}, ParseTree);\n  var SPREAD_EXPRESSION = ParseTreeType.SPREAD_EXPRESSION;\n  var SpreadExpression = function SpreadExpression(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(SpreadExpression, {\n    transform: function(transformer) {\n      return transformer.transformSpreadExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSpreadExpression(this);\n    },\n    get type() {\n      return SPREAD_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var SPREAD_PATTERN_ELEMENT = ParseTreeType.SPREAD_PATTERN_ELEMENT;\n  var SpreadPatternElement = function SpreadPatternElement(location, lvalue) {\n    this.location = location;\n    this.lvalue = lvalue;\n  };\n  ($traceurRuntime.createClass)(SpreadPatternElement, {\n    transform: function(transformer) {\n      return transformer.transformSpreadPatternElement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSpreadPatternElement(this);\n    },\n    get type() {\n      return SPREAD_PATTERN_ELEMENT;\n    }\n  }, {}, ParseTree);\n  var SUPER_EXPRESSION = ParseTreeType.SUPER_EXPRESSION;\n  var SuperExpression = function SuperExpression(location) {\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(SuperExpression, {\n    transform: function(transformer) {\n      return transformer.transformSuperExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSuperExpression(this);\n    },\n    get type() {\n      return SUPER_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var SWITCH_STATEMENT = ParseTreeType.SWITCH_STATEMENT;\n  var SwitchStatement = function SwitchStatement(location, expression, caseClauses) {\n    this.location = location;\n    this.expression = expression;\n    this.caseClauses = caseClauses;\n  };\n  ($traceurRuntime.createClass)(SwitchStatement, {\n    transform: function(transformer) {\n      return transformer.transformSwitchStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSwitchStatement(this);\n    },\n    get type() {\n      return SWITCH_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var SYNTAX_ERROR_TREE = ParseTreeType.SYNTAX_ERROR_TREE;\n  var SyntaxErrorTree = function SyntaxErrorTree(location, nextToken, message) {\n    this.location = location;\n    this.nextToken = nextToken;\n    this.message = message;\n  };\n  ($traceurRuntime.createClass)(SyntaxErrorTree, {\n    transform: function(transformer) {\n      return transformer.transformSyntaxErrorTree(this);\n    },\n    visit: function(visitor) {\n      visitor.visitSyntaxErrorTree(this);\n    },\n    get type() {\n      return SYNTAX_ERROR_TREE;\n    }\n  }, {}, ParseTree);\n  var TEMPLATE_LITERAL_EXPRESSION = ParseTreeType.TEMPLATE_LITERAL_EXPRESSION;\n  var TemplateLiteralExpression = function TemplateLiteralExpression(location, operand, elements) {\n    this.location = location;\n    this.operand = operand;\n    this.elements = elements;\n  };\n  ($traceurRuntime.createClass)(TemplateLiteralExpression, {\n    transform: function(transformer) {\n      return transformer.transformTemplateLiteralExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTemplateLiteralExpression(this);\n    },\n    get type() {\n      return TEMPLATE_LITERAL_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var TEMPLATE_LITERAL_PORTION = ParseTreeType.TEMPLATE_LITERAL_PORTION;\n  var TemplateLiteralPortion = function TemplateLiteralPortion(location, value) {\n    this.location = location;\n    this.value = value;\n  };\n  ($traceurRuntime.createClass)(TemplateLiteralPortion, {\n    transform: function(transformer) {\n      return transformer.transformTemplateLiteralPortion(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTemplateLiteralPortion(this);\n    },\n    get type() {\n      return TEMPLATE_LITERAL_PORTION;\n    }\n  }, {}, ParseTree);\n  var TEMPLATE_SUBSTITUTION = ParseTreeType.TEMPLATE_SUBSTITUTION;\n  var TemplateSubstitution = function TemplateSubstitution(location, expression) {\n    this.location = location;\n    this.expression = expression;\n  };\n  ($traceurRuntime.createClass)(TemplateSubstitution, {\n    transform: function(transformer) {\n      return transformer.transformTemplateSubstitution(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTemplateSubstitution(this);\n    },\n    get type() {\n      return TEMPLATE_SUBSTITUTION;\n    }\n  }, {}, ParseTree);\n  var THIS_EXPRESSION = ParseTreeType.THIS_EXPRESSION;\n  var ThisExpression = function ThisExpression(location) {\n    this.location = location;\n  };\n  ($traceurRuntime.createClass)(ThisExpression, {\n    transform: function(transformer) {\n      return transformer.transformThisExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitThisExpression(this);\n    },\n    get type() {\n      return THIS_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var THROW_STATEMENT = ParseTreeType.THROW_STATEMENT;\n  var ThrowStatement = function ThrowStatement(location, value) {\n    this.location = location;\n    this.value = value;\n  };\n  ($traceurRuntime.createClass)(ThrowStatement, {\n    transform: function(transformer) {\n      return transformer.transformThrowStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitThrowStatement(this);\n    },\n    get type() {\n      return THROW_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var TRY_STATEMENT = ParseTreeType.TRY_STATEMENT;\n  var TryStatement = function TryStatement(location, body, catchBlock, finallyBlock) {\n    this.location = location;\n    this.body = body;\n    this.catchBlock = catchBlock;\n    this.finallyBlock = finallyBlock;\n  };\n  ($traceurRuntime.createClass)(TryStatement, {\n    transform: function(transformer) {\n      return transformer.transformTryStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTryStatement(this);\n    },\n    get type() {\n      return TRY_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var TYPE_ARGUMENTS = ParseTreeType.TYPE_ARGUMENTS;\n  var TypeArguments = function TypeArguments(location, args) {\n    this.location = location;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(TypeArguments, {\n    transform: function(transformer) {\n      return transformer.transformTypeArguments(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTypeArguments(this);\n    },\n    get type() {\n      return TYPE_ARGUMENTS;\n    }\n  }, {}, ParseTree);\n  var TYPE_NAME = ParseTreeType.TYPE_NAME;\n  var TypeName = function TypeName(location, moduleName, name) {\n    this.location = location;\n    this.moduleName = moduleName;\n    this.name = name;\n  };\n  ($traceurRuntime.createClass)(TypeName, {\n    transform: function(transformer) {\n      return transformer.transformTypeName(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTypeName(this);\n    },\n    get type() {\n      return TYPE_NAME;\n    }\n  }, {}, ParseTree);\n  var TYPE_REFERENCE = ParseTreeType.TYPE_REFERENCE;\n  var TypeReference = function TypeReference(location, typeName, args) {\n    this.location = location;\n    this.typeName = typeName;\n    this.args = args;\n  };\n  ($traceurRuntime.createClass)(TypeReference, {\n    transform: function(transformer) {\n      return transformer.transformTypeReference(this);\n    },\n    visit: function(visitor) {\n      visitor.visitTypeReference(this);\n    },\n    get type() {\n      return TYPE_REFERENCE;\n    }\n  }, {}, ParseTree);\n  var UNARY_EXPRESSION = ParseTreeType.UNARY_EXPRESSION;\n  var UnaryExpression = function UnaryExpression(location, operator, operand) {\n    this.location = location;\n    this.operator = operator;\n    this.operand = operand;\n  };\n  ($traceurRuntime.createClass)(UnaryExpression, {\n    transform: function(transformer) {\n      return transformer.transformUnaryExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitUnaryExpression(this);\n    },\n    get type() {\n      return UNARY_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  var VARIABLE_DECLARATION = ParseTreeType.VARIABLE_DECLARATION;\n  var VariableDeclaration = function VariableDeclaration(location, lvalue, typeAnnotation, initializer) {\n    this.location = location;\n    this.lvalue = lvalue;\n    this.typeAnnotation = typeAnnotation;\n    this.initializer = initializer;\n  };\n  ($traceurRuntime.createClass)(VariableDeclaration, {\n    transform: function(transformer) {\n      return transformer.transformVariableDeclaration(this);\n    },\n    visit: function(visitor) {\n      visitor.visitVariableDeclaration(this);\n    },\n    get type() {\n      return VARIABLE_DECLARATION;\n    }\n  }, {}, ParseTree);\n  var VARIABLE_DECLARATION_LIST = ParseTreeType.VARIABLE_DECLARATION_LIST;\n  var VariableDeclarationList = function VariableDeclarationList(location, declarationType, declarations) {\n    this.location = location;\n    this.declarationType = declarationType;\n    this.declarations = declarations;\n  };\n  ($traceurRuntime.createClass)(VariableDeclarationList, {\n    transform: function(transformer) {\n      return transformer.transformVariableDeclarationList(this);\n    },\n    visit: function(visitor) {\n      visitor.visitVariableDeclarationList(this);\n    },\n    get type() {\n      return VARIABLE_DECLARATION_LIST;\n    }\n  }, {}, ParseTree);\n  var VARIABLE_STATEMENT = ParseTreeType.VARIABLE_STATEMENT;\n  var VariableStatement = function VariableStatement(location, declarations) {\n    this.location = location;\n    this.declarations = declarations;\n  };\n  ($traceurRuntime.createClass)(VariableStatement, {\n    transform: function(transformer) {\n      return transformer.transformVariableStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitVariableStatement(this);\n    },\n    get type() {\n      return VARIABLE_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var WHILE_STATEMENT = ParseTreeType.WHILE_STATEMENT;\n  var WhileStatement = function WhileStatement(location, condition, body) {\n    this.location = location;\n    this.condition = condition;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(WhileStatement, {\n    transform: function(transformer) {\n      return transformer.transformWhileStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitWhileStatement(this);\n    },\n    get type() {\n      return WHILE_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var WITH_STATEMENT = ParseTreeType.WITH_STATEMENT;\n  var WithStatement = function WithStatement(location, expression, body) {\n    this.location = location;\n    this.expression = expression;\n    this.body = body;\n  };\n  ($traceurRuntime.createClass)(WithStatement, {\n    transform: function(transformer) {\n      return transformer.transformWithStatement(this);\n    },\n    visit: function(visitor) {\n      visitor.visitWithStatement(this);\n    },\n    get type() {\n      return WITH_STATEMENT;\n    }\n  }, {}, ParseTree);\n  var YIELD_EXPRESSION = ParseTreeType.YIELD_EXPRESSION;\n  var YieldExpression = function YieldExpression(location, expression, isYieldFor) {\n    this.location = location;\n    this.expression = expression;\n    this.isYieldFor = isYieldFor;\n  };\n  ($traceurRuntime.createClass)(YieldExpression, {\n    transform: function(transformer) {\n      return transformer.transformYieldExpression(this);\n    },\n    visit: function(visitor) {\n      visitor.visitYieldExpression(this);\n    },\n    get type() {\n      return YIELD_EXPRESSION;\n    }\n  }, {}, ParseTree);\n  return {\n    get Annotation() {\n      return Annotation;\n    },\n    get AnonBlock() {\n      return AnonBlock;\n    },\n    get ArgumentList() {\n      return ArgumentList;\n    },\n    get ArrayComprehension() {\n      return ArrayComprehension;\n    },\n    get ArrayLiteralExpression() {\n      return ArrayLiteralExpression;\n    },\n    get ArrayPattern() {\n      return ArrayPattern;\n    },\n    get ArrowFunctionExpression() {\n      return ArrowFunctionExpression;\n    },\n    get AssignmentElement() {\n      return AssignmentElement;\n    },\n    get AwaitExpression() {\n      return AwaitExpression;\n    },\n    get BinaryExpression() {\n      return BinaryExpression;\n    },\n    get BindingElement() {\n      return BindingElement;\n    },\n    get BindingIdentifier() {\n      return BindingIdentifier;\n    },\n    get Block() {\n      return Block;\n    },\n    get BreakStatement() {\n      return BreakStatement;\n    },\n    get CallExpression() {\n      return CallExpression;\n    },\n    get CaseClause() {\n      return CaseClause;\n    },\n    get Catch() {\n      return Catch;\n    },\n    get ClassDeclaration() {\n      return ClassDeclaration;\n    },\n    get ClassExpression() {\n      return ClassExpression;\n    },\n    get CommaExpression() {\n      return CommaExpression;\n    },\n    get ComprehensionFor() {\n      return ComprehensionFor;\n    },\n    get ComprehensionIf() {\n      return ComprehensionIf;\n    },\n    get ComputedPropertyName() {\n      return ComputedPropertyName;\n    },\n    get ConditionalExpression() {\n      return ConditionalExpression;\n    },\n    get ContinueStatement() {\n      return ContinueStatement;\n    },\n    get CoverFormals() {\n      return CoverFormals;\n    },\n    get CoverInitializedName() {\n      return CoverInitializedName;\n    },\n    get DebuggerStatement() {\n      return DebuggerStatement;\n    },\n    get DefaultClause() {\n      return DefaultClause;\n    },\n    get DoWhileStatement() {\n      return DoWhileStatement;\n    },\n    get EmptyStatement() {\n      return EmptyStatement;\n    },\n    get ExportDeclaration() {\n      return ExportDeclaration;\n    },\n    get ExportDefault() {\n      return ExportDefault;\n    },\n    get ExportSpecifier() {\n      return ExportSpecifier;\n    },\n    get ExportSpecifierSet() {\n      return ExportSpecifierSet;\n    },\n    get ExportStar() {\n      return ExportStar;\n    },\n    get ExpressionStatement() {\n      return ExpressionStatement;\n    },\n    get Finally() {\n      return Finally;\n    },\n    get ForInStatement() {\n      return ForInStatement;\n    },\n    get ForOfStatement() {\n      return ForOfStatement;\n    },\n    get ForStatement() {\n      return ForStatement;\n    },\n    get FormalParameter() {\n      return FormalParameter;\n    },\n    get FormalParameterList() {\n      return FormalParameterList;\n    },\n    get FunctionBody() {\n      return FunctionBody;\n    },\n    get FunctionDeclaration() {\n      return FunctionDeclaration;\n    },\n    get FunctionExpression() {\n      return FunctionExpression;\n    },\n    get GeneratorComprehension() {\n      return GeneratorComprehension;\n    },\n    get GetAccessor() {\n      return GetAccessor;\n    },\n    get IdentifierExpression() {\n      return IdentifierExpression;\n    },\n    get IfStatement() {\n      return IfStatement;\n    },\n    get ImportedBinding() {\n      return ImportedBinding;\n    },\n    get ImportDeclaration() {\n      return ImportDeclaration;\n    },\n    get ImportSpecifier() {\n      return ImportSpecifier;\n    },\n    get ImportSpecifierSet() {\n      return ImportSpecifierSet;\n    },\n    get LabelledStatement() {\n      return LabelledStatement;\n    },\n    get LiteralExpression() {\n      return LiteralExpression;\n    },\n    get LiteralPropertyName() {\n      return LiteralPropertyName;\n    },\n    get MemberExpression() {\n      return MemberExpression;\n    },\n    get MemberLookupExpression() {\n      return MemberLookupExpression;\n    },\n    get Module() {\n      return Module;\n    },\n    get ModuleDeclaration() {\n      return ModuleDeclaration;\n    },\n    get ModuleSpecifier() {\n      return ModuleSpecifier;\n    },\n    get NamedExport() {\n      return NamedExport;\n    },\n    get NewExpression() {\n      return NewExpression;\n    },\n    get ObjectLiteralExpression() {\n      return ObjectLiteralExpression;\n    },\n    get ObjectPattern() {\n      return ObjectPattern;\n    },\n    get ObjectPatternField() {\n      return ObjectPatternField;\n    },\n    get ParenExpression() {\n      return ParenExpression;\n    },\n    get PostfixExpression() {\n      return PostfixExpression;\n    },\n    get PredefinedType() {\n      return PredefinedType;\n    },\n    get Script() {\n      return Script;\n    },\n    get PropertyMethodAssignment() {\n      return PropertyMethodAssignment;\n    },\n    get PropertyNameAssignment() {\n      return PropertyNameAssignment;\n    },\n    get PropertyNameShorthand() {\n      return PropertyNameShorthand;\n    },\n    get PropertyVariableDeclaration() {\n      return PropertyVariableDeclaration;\n    },\n    get RestParameter() {\n      return RestParameter;\n    },\n    get ReturnStatement() {\n      return ReturnStatement;\n    },\n    get SetAccessor() {\n      return SetAccessor;\n    },\n    get SpreadExpression() {\n      return SpreadExpression;\n    },\n    get SpreadPatternElement() {\n      return SpreadPatternElement;\n    },\n    get SuperExpression() {\n      return SuperExpression;\n    },\n    get SwitchStatement() {\n      return SwitchStatement;\n    },\n    get SyntaxErrorTree() {\n      return SyntaxErrorTree;\n    },\n    get TemplateLiteralExpression() {\n      return TemplateLiteralExpression;\n    },\n    get TemplateLiteralPortion() {\n      return TemplateLiteralPortion;\n    },\n    get TemplateSubstitution() {\n      return TemplateSubstitution;\n    },\n    get ThisExpression() {\n      return ThisExpression;\n    },\n    get ThrowStatement() {\n      return ThrowStatement;\n    },\n    get TryStatement() {\n      return TryStatement;\n    },\n    get TypeArguments() {\n      return TypeArguments;\n    },\n    get TypeName() {\n      return TypeName;\n    },\n    get TypeReference() {\n      return TypeReference;\n    },\n    get UnaryExpression() {\n      return UnaryExpression;\n    },\n    get VariableDeclaration() {\n      return VariableDeclaration;\n    },\n    get VariableDeclarationList() {\n      return VariableDeclarationList;\n    },\n    get VariableStatement() {\n      return VariableStatement;\n    },\n    get WhileStatement() {\n      return WhileStatement;\n    },\n    get WithStatement() {\n      return WithStatement;\n    },\n    get YieldExpression() {\n      return YieldExpression;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/util/assert\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/assert\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/assert\", path);\n  }\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  function assert(b) {\n    if (!b && options.debug)\n      throw Error('Assertion failed');\n  }\n  return {get assert() {\n      return assert;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/IdentifierToken\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/IdentifierToken\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/IdentifierToken\", path);\n  }\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var IDENTIFIER = System.get(\"traceur@0.0.74/src/syntax/TokenType\").IDENTIFIER;\n  var IdentifierToken = function IdentifierToken(location, value) {\n    this.location = location;\n    this.value = value;\n  };\n  ($traceurRuntime.createClass)(IdentifierToken, {\n    toString: function() {\n      return this.value;\n    },\n    get type() {\n      return IDENTIFIER;\n    }\n  }, {}, Token);\n  return {get IdentifierToken() {\n      return IdentifierToken;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/LiteralToken\", [], function() {\n  \"use strict\";\n  var $__3;\n  var __moduleName = \"traceur@0.0.74/src/syntax/LiteralToken\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/LiteralToken\", path);\n  }\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      NULL = $__1.NULL,\n      NUMBER = $__1.NUMBER,\n      STRING = $__1.STRING;\n  var StringParser = function StringParser(value) {\n    this.value = value;\n    this.index = 0;\n  };\n  ($traceurRuntime.createClass)(StringParser, ($__3 = {}, Object.defineProperty($__3, Symbol.iterator, {\n    value: function() {\n      return this;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__3, \"next\", {\n    value: function() {\n      if (++this.index >= this.value.length - 1)\n        return {\n          value: undefined,\n          done: true\n        };\n      return {\n        value: this.value[this.index],\n        done: false\n      };\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__3, \"parse\", {\n    value: function() {\n      if (this.value.indexOf('\\\\') === -1)\n        return this.value.slice(1, -1);\n      var result = '';\n      for (var $__4 = this[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__5; !($__5 = $__4.next()).done; ) {\n        var ch = $__5.value;\n        {\n          result += ch === '\\\\' ? this.parseEscapeSequence() : ch;\n        }\n      }\n      return result;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__3, \"parseEscapeSequence\", {\n    value: function() {\n      var ch = this.next().value;\n      switch (ch) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n          return '';\n        case '0':\n          return '\\0';\n        case 'b':\n          return '\\b';\n        case 'f':\n          return '\\f';\n        case 'n':\n          return '\\n';\n        case 'r':\n          return '\\r';\n        case 't':\n          return '\\t';\n        case 'v':\n          return '\\v';\n        case 'x':\n          return String.fromCharCode(parseInt(this.next().value + this.next().value, 16));\n        case 'u':\n          var nextValue = this.next().value;\n          if (nextValue === '{') {\n            var hexDigits = '';\n            while ((nextValue = this.next().value) !== '}') {\n              hexDigits += nextValue;\n            }\n            var codePoint = parseInt(hexDigits, 16);\n            if (codePoint <= 0xFFFF) {\n              return String.fromCharCode(codePoint);\n            }\n            var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;\n            var low = (codePoint - 0x10000) % 0x400 + 0xDC00;\n            return String.fromCharCode(high, low);\n          }\n          return String.fromCharCode(parseInt(nextValue + this.next().value + this.next().value + this.next().value, 16));\n        default:\n          if (Number(ch) < 8)\n            throw new Error('Octal literals are not supported');\n          return ch;\n      }\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), $__3), {});\n  var LiteralToken = function LiteralToken(type, value, location) {\n    this.type = type;\n    this.location = location;\n    this.value = value;\n  };\n  ($traceurRuntime.createClass)(LiteralToken, {\n    toString: function() {\n      return this.value;\n    },\n    get processedValue() {\n      switch (this.type) {\n        case NULL:\n          return null;\n        case NUMBER:\n          var value = this.value;\n          if (value.charCodeAt(0) === 48) {\n            switch (value.charCodeAt(1)) {\n              case 66:\n              case 98:\n                return parseInt(this.value.slice(2), 2);\n              case 79:\n              case 111:\n                return parseInt(this.value.slice(2), 8);\n            }\n          }\n          return Number(this.value);\n        case STRING:\n          var parser = new StringParser(this.value);\n          return parser.parse();\n        default:\n          throw new Error('Not implemented');\n      }\n    }\n  }, {}, Token);\n  return {get LiteralToken() {\n      return LiteralToken;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ParseTreeFactory\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\", path);\n  }\n  var IdentifierToken = System.get(\"traceur@0.0.74/src/syntax/IdentifierToken\").IdentifierToken;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTree\"),\n      ParseTree = $__2.ParseTree,\n      ParseTreeType = $__2.ParseTreeType;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      CALL = $__3.CALL,\n      CREATE = $__3.CREATE,\n      DEFINE_PROPERTY = $__3.DEFINE_PROPERTY,\n      FREEZE = $__3.FREEZE,\n      OBJECT = $__3.OBJECT,\n      UNDEFINED = $__3.UNDEFINED;\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      EQUAL = $__5.EQUAL,\n      FALSE = $__5.FALSE,\n      NULL = $__5.NULL,\n      NUMBER = $__5.NUMBER,\n      STRING = $__5.STRING,\n      TRUE = $__5.TRUE,\n      VOID = $__5.VOID;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var $__7 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      ArgumentList = $__7.ArgumentList,\n      ArrayLiteralExpression = $__7.ArrayLiteralExpression,\n      BinaryExpression = $__7.BinaryExpression,\n      BindingIdentifier = $__7.BindingIdentifier,\n      Block = $__7.Block,\n      BreakStatement = $__7.BreakStatement,\n      CallExpression = $__7.CallExpression,\n      CaseClause = $__7.CaseClause,\n      Catch = $__7.Catch,\n      ClassDeclaration = $__7.ClassDeclaration,\n      CommaExpression = $__7.CommaExpression,\n      ConditionalExpression = $__7.ConditionalExpression,\n      ContinueStatement = $__7.ContinueStatement,\n      DefaultClause = $__7.DefaultClause,\n      DoWhileStatement = $__7.DoWhileStatement,\n      EmptyStatement = $__7.EmptyStatement,\n      ExpressionStatement = $__7.ExpressionStatement,\n      Finally = $__7.Finally,\n      ForInStatement = $__7.ForInStatement,\n      ForOfStatement = $__7.ForOfStatement,\n      ForStatement = $__7.ForStatement,\n      FormalParameterList = $__7.FormalParameterList,\n      FunctionBody = $__7.FunctionBody,\n      FunctionExpression = $__7.FunctionExpression,\n      IdentifierExpression = $__7.IdentifierExpression,\n      IfStatement = $__7.IfStatement,\n      ImportedBinding = $__7.ImportedBinding,\n      LiteralExpression = $__7.LiteralExpression,\n      LiteralPropertyName = $__7.LiteralPropertyName,\n      MemberExpression = $__7.MemberExpression,\n      MemberLookupExpression = $__7.MemberLookupExpression,\n      NewExpression = $__7.NewExpression,\n      ObjectLiteralExpression = $__7.ObjectLiteralExpression,\n      ParenExpression = $__7.ParenExpression,\n      PostfixExpression = $__7.PostfixExpression,\n      Script = $__7.Script,\n      PropertyNameAssignment = $__7.PropertyNameAssignment,\n      RestParameter = $__7.RestParameter,\n      ReturnStatement = $__7.ReturnStatement,\n      SpreadExpression = $__7.SpreadExpression,\n      SwitchStatement = $__7.SwitchStatement,\n      ThisExpression = $__7.ThisExpression,\n      ThrowStatement = $__7.ThrowStatement,\n      TryStatement = $__7.TryStatement,\n      UnaryExpression = $__7.UnaryExpression,\n      VariableDeclaration = $__7.VariableDeclaration,\n      VariableDeclarationList = $__7.VariableDeclarationList,\n      VariableStatement = $__7.VariableStatement,\n      WhileStatement = $__7.WhileStatement,\n      WithStatement = $__7.WithStatement;\n  var slice = Array.prototype.slice.call.bind(Array.prototype.slice);\n  var map = Array.prototype.map.call.bind(Array.prototype.map);\n  function createOperatorToken(operator) {\n    return new Token(operator, null);\n  }\n  function createIdentifierToken(identifier) {\n    return new IdentifierToken(null, identifier);\n  }\n  function createStringLiteralToken(value) {\n    return new LiteralToken(STRING, JSON.stringify(value), null);\n  }\n  function createBooleanLiteralToken(value) {\n    return new Token(value ? TRUE : FALSE, null);\n  }\n  function createNullLiteralToken() {\n    return new LiteralToken(NULL, 'null', null);\n  }\n  function createNumberLiteralToken(value) {\n    return new LiteralToken(NUMBER, String(value), null);\n  }\n  function createEmptyParameterList() {\n    return new FormalParameterList(null, []);\n  }\n  function createArgumentList(list) {\n    return new ArgumentList(null, list);\n  }\n  function createEmptyArgumentList() {\n    return createArgumentList([]);\n  }\n  function createArrayLiteralExpression(list) {\n    return new ArrayLiteralExpression(null, list);\n  }\n  function createEmptyArrayLiteralExpression() {\n    return createArrayLiteralExpression([]);\n  }\n  function createAssignmentExpression(lhs, rhs) {\n    return new BinaryExpression(null, lhs, createOperatorToken(EQUAL), rhs);\n  }\n  function createBinaryExpression(left, operator, right) {\n    return new BinaryExpression(null, left, operator, right);\n  }\n  function createBindingIdentifier(identifier) {\n    if (typeof identifier === 'string')\n      identifier = createIdentifierToken(identifier);\n    else if (identifier.type === ParseTreeType.BINDING_IDENTIFIER)\n      return identifier;\n    else if (identifier.type === ParseTreeType.IDENTIFIER_EXPRESSION)\n      return new BindingIdentifier(identifier.location, identifier.identifierToken);\n    return new BindingIdentifier(null, identifier);\n  }\n  function createImportedBinding(name) {\n    var bindingIdentifier = createBindingIdentifier(name);\n    return new ImportedBinding(bindingIdentifier.location, bindingIdentifier);\n  }\n  function createEmptyStatement() {\n    return new EmptyStatement(null);\n  }\n  function createEmptyBlock() {\n    return createBlock([]);\n  }\n  function createBlock(statements) {\n    return new Block(null, statements);\n  }\n  function createFunctionBody(statements) {\n    return new FunctionBody(null, statements);\n  }\n  function createScopedExpression(body, scope) {\n    assert(body.type === 'FUNCTION_BODY');\n    return createCallCall(createParenExpression(createFunctionExpression(createEmptyParameterList(), body)), scope);\n  }\n  function createImmediatelyInvokedFunctionExpression(body) {\n    assert(body.type === 'FUNCTION_BODY');\n    return createCallExpression(createParenExpression(createFunctionExpression(createEmptyParameterList(), body)));\n  }\n  function createCallExpression(operand) {\n    var args = arguments[1] !== (void 0) ? arguments[1] : createEmptyArgumentList();\n    return new CallExpression(null, operand, args);\n  }\n  function createBreakStatement() {\n    var name = arguments[0] !== (void 0) ? arguments[0] : null;\n    return new BreakStatement(null, name);\n  }\n  function createCallCall(func, thisExpression) {\n    return createCallExpression(createMemberExpression(func, CALL), createArgumentList([thisExpression]));\n  }\n  function createCaseClause(expression, statements) {\n    return new CaseClause(null, expression, statements);\n  }\n  function createCatch(identifier, catchBody) {\n    identifier = createBindingIdentifier(identifier);\n    return new Catch(null, identifier, catchBody);\n  }\n  function createClassDeclaration(name, superClass, elements) {\n    return new ClassDeclaration(null, name, superClass, elements, []);\n  }\n  function createCommaExpression(expressions) {\n    return new CommaExpression(null, expressions);\n  }\n  function createConditionalExpression(condition, left, right) {\n    return new ConditionalExpression(null, condition, left, right);\n  }\n  function createContinueStatement() {\n    var name = arguments[0] !== (void 0) ? arguments[0] : null;\n    return new ContinueStatement(null, name);\n  }\n  function createDefaultClause(statements) {\n    return new DefaultClause(null, statements);\n  }\n  function createDoWhileStatement(body, condition) {\n    return new DoWhileStatement(null, body, condition);\n  }\n  function createAssignmentStatement(lhs, rhs) {\n    return createExpressionStatement(createAssignmentExpression(lhs, rhs));\n  }\n  function createCallStatement(operand) {\n    var args = arguments[1];\n    return createExpressionStatement(createCallExpression(operand, args));\n  }\n  function createExpressionStatement(expression) {\n    return new ExpressionStatement(null, expression);\n  }\n  function createFinally(block) {\n    return new Finally(null, block);\n  }\n  function createForOfStatement(initializer, collection, body) {\n    return new ForOfStatement(null, initializer, collection, body);\n  }\n  function createForInStatement(initializer, collection, body) {\n    return new ForInStatement(null, initializer, collection, body);\n  }\n  function createForStatement(variables, condition, increment, body) {\n    return new ForStatement(null, variables, condition, increment, body);\n  }\n  function createFunctionExpression(parameterList, body) {\n    assert(body.type === 'FUNCTION_BODY');\n    return new FunctionExpression(null, null, false, parameterList, null, [], body);\n  }\n  function createIdentifierExpression(identifier) {\n    if (typeof identifier == 'string')\n      identifier = createIdentifierToken(identifier);\n    else if (identifier instanceof BindingIdentifier)\n      identifier = identifier.identifierToken;\n    return new IdentifierExpression(null, identifier);\n  }\n  function createUndefinedExpression() {\n    return createIdentifierExpression(UNDEFINED);\n  }\n  function createIfStatement(condition, ifClause) {\n    var elseClause = arguments[2] !== (void 0) ? arguments[2] : null;\n    return new IfStatement(null, condition, ifClause, elseClause);\n  }\n  function createStringLiteral(value) {\n    return new LiteralExpression(null, createStringLiteralToken(value));\n  }\n  function createBooleanLiteral(value) {\n    return new LiteralExpression(null, createBooleanLiteralToken(value));\n  }\n  function createTrueLiteral() {\n    return createBooleanLiteral(true);\n  }\n  function createFalseLiteral() {\n    return createBooleanLiteral(false);\n  }\n  function createNullLiteral() {\n    return new LiteralExpression(null, createNullLiteralToken());\n  }\n  function createNumberLiteral(value) {\n    return new LiteralExpression(null, createNumberLiteralToken(value));\n  }\n  function createMemberExpression(operand, memberName, memberNames) {\n    if (typeof operand == 'string' || operand instanceof IdentifierToken)\n      operand = createIdentifierExpression(operand);\n    if (typeof memberName == 'string')\n      memberName = createIdentifierToken(memberName);\n    if (memberName instanceof LiteralToken)\n      memberName = new LiteralExpression(null, memberName);\n    var tree = memberName instanceof LiteralExpression ? new MemberLookupExpression(null, operand, memberName) : new MemberExpression(null, operand, memberName);\n    for (var i = 2; i < arguments.length; i++) {\n      tree = createMemberExpression(tree, arguments[i]);\n    }\n    return tree;\n  }\n  function createMemberLookupExpression(operand, memberExpression) {\n    return new MemberLookupExpression(null, operand, memberExpression);\n  }\n  function createThisExpression() {\n    return new ThisExpression(null);\n  }\n  function createNewExpression(operand, args) {\n    return new NewExpression(null, operand, args);\n  }\n  function createObjectFreeze(value) {\n    return createCallExpression(createMemberExpression(OBJECT, FREEZE), createArgumentList([value]));\n  }\n  function createObjectCreate(protoExpression, descriptors) {\n    var argumentList = [protoExpression];\n    if (descriptors)\n      argumentList.push(descriptors);\n    return createCallExpression(createMemberExpression(OBJECT, CREATE), createArgumentList(argumentList));\n  }\n  function createObjectLiteral(descr) {\n    var propertyNameAndValues = Object.keys(descr).map(function(name) {\n      var value = descr[name];\n      if (!(value instanceof ParseTree))\n        value = createBooleanLiteral(!!value);\n      return createPropertyNameAssignment(name, value);\n    });\n    return createObjectLiteralExpression(propertyNameAndValues);\n  }\n  function createDefineProperty(tree, name, descr) {\n    if (typeof name === 'string')\n      name = createStringLiteral(name);\n    return createCallExpression(createMemberExpression(OBJECT, DEFINE_PROPERTY), createArgumentList([tree, name, createObjectLiteral(descr)]));\n  }\n  function createObjectLiteralExpression(propertyNameAndValues) {\n    return new ObjectLiteralExpression(null, propertyNameAndValues);\n  }\n  function createParenExpression(expression) {\n    return new ParenExpression(null, expression);\n  }\n  function createPostfixExpression(operand, operator) {\n    return new PostfixExpression(null, operand, operator);\n  }\n  function createScript(scriptItemList) {\n    return new Script(null, scriptItemList);\n  }\n  function createPropertyNameAssignment(identifier, value) {\n    if (typeof identifier == 'string')\n      identifier = createLiteralPropertyName(identifier);\n    return new PropertyNameAssignment(null, identifier, value);\n  }\n  function createLiteralPropertyName(name) {\n    return new LiteralPropertyName(null, createIdentifierToken(name));\n  }\n  function createRestParameter(identifier) {\n    return new RestParameter(null, createBindingIdentifier(identifier));\n  }\n  function createReturnStatement(expression) {\n    return new ReturnStatement(null, expression);\n  }\n  function createSpreadExpression(expression) {\n    return new SpreadExpression(null, expression);\n  }\n  function createSwitchStatement(expression, caseClauses) {\n    return new SwitchStatement(null, expression, caseClauses);\n  }\n  function createThrowStatement(value) {\n    return new ThrowStatement(null, value);\n  }\n  function createTryStatement(body, catchBlock) {\n    var finallyBlock = arguments[2] !== (void 0) ? arguments[2] : null;\n    return new TryStatement(null, body, catchBlock, finallyBlock);\n  }\n  function createUnaryExpression(operator, operand) {\n    return new UnaryExpression(null, operator, operand);\n  }\n  function createUseStrictDirective() {\n    return createExpressionStatement(createStringLiteral('use strict'));\n  }\n  function createVariableDeclarationList(binding, identifierOrDeclarations, initializer) {\n    if (identifierOrDeclarations instanceof Array) {\n      var declarations = identifierOrDeclarations;\n      return new VariableDeclarationList(null, binding, declarations);\n    }\n    var identifier = identifierOrDeclarations;\n    return createVariableDeclarationList(binding, [createVariableDeclaration(identifier, initializer)]);\n  }\n  function createVariableDeclaration(identifier, initializer) {\n    if (!(identifier instanceof ParseTree) || identifier.type !== ParseTreeType.BINDING_IDENTIFIER && identifier.type !== ParseTreeType.OBJECT_PATTERN && identifier.type !== ParseTreeType.ARRAY_PATTERN) {\n      identifier = createBindingIdentifier(identifier);\n    }\n    return new VariableDeclaration(null, identifier, null, initializer);\n  }\n  function createVariableStatement(listOrBinding, identifier, initializer) {\n    if (listOrBinding instanceof VariableDeclarationList)\n      return new VariableStatement(null, listOrBinding);\n    var binding = listOrBinding;\n    var list = createVariableDeclarationList(binding, identifier, initializer);\n    return createVariableStatement(list);\n  }\n  function createVoid0() {\n    return createParenExpression(createUnaryExpression(createOperatorToken(VOID), createNumberLiteral(0)));\n  }\n  function createWhileStatement(condition, body) {\n    return new WhileStatement(null, condition, body);\n  }\n  function createWithStatement(expression, body) {\n    return new WithStatement(null, expression, body);\n  }\n  function createAssignStateStatement(state) {\n    return createAssignmentStatement(createMemberExpression('$ctx', 'state'), createNumberLiteral(state));\n  }\n  return {\n    get createOperatorToken() {\n      return createOperatorToken;\n    },\n    get createIdentifierToken() {\n      return createIdentifierToken;\n    },\n    get createStringLiteralToken() {\n      return createStringLiteralToken;\n    },\n    get createBooleanLiteralToken() {\n      return createBooleanLiteralToken;\n    },\n    get createNullLiteralToken() {\n      return createNullLiteralToken;\n    },\n    get createNumberLiteralToken() {\n      return createNumberLiteralToken;\n    },\n    get createEmptyParameterList() {\n      return createEmptyParameterList;\n    },\n    get createArgumentList() {\n      return createArgumentList;\n    },\n    get createEmptyArgumentList() {\n      return createEmptyArgumentList;\n    },\n    get createArrayLiteralExpression() {\n      return createArrayLiteralExpression;\n    },\n    get createEmptyArrayLiteralExpression() {\n      return createEmptyArrayLiteralExpression;\n    },\n    get createAssignmentExpression() {\n      return createAssignmentExpression;\n    },\n    get createBinaryExpression() {\n      return createBinaryExpression;\n    },\n    get createBindingIdentifier() {\n      return createBindingIdentifier;\n    },\n    get createImportedBinding() {\n      return createImportedBinding;\n    },\n    get createEmptyStatement() {\n      return createEmptyStatement;\n    },\n    get createEmptyBlock() {\n      return createEmptyBlock;\n    },\n    get createBlock() {\n      return createBlock;\n    },\n    get createFunctionBody() {\n      return createFunctionBody;\n    },\n    get createScopedExpression() {\n      return createScopedExpression;\n    },\n    get createImmediatelyInvokedFunctionExpression() {\n      return createImmediatelyInvokedFunctionExpression;\n    },\n    get createCallExpression() {\n      return createCallExpression;\n    },\n    get createBreakStatement() {\n      return createBreakStatement;\n    },\n    get createCaseClause() {\n      return createCaseClause;\n    },\n    get createCatch() {\n      return createCatch;\n    },\n    get createClassDeclaration() {\n      return createClassDeclaration;\n    },\n    get createCommaExpression() {\n      return createCommaExpression;\n    },\n    get createConditionalExpression() {\n      return createConditionalExpression;\n    },\n    get createContinueStatement() {\n      return createContinueStatement;\n    },\n    get createDefaultClause() {\n      return createDefaultClause;\n    },\n    get createDoWhileStatement() {\n      return createDoWhileStatement;\n    },\n    get createAssignmentStatement() {\n      return createAssignmentStatement;\n    },\n    get createCallStatement() {\n      return createCallStatement;\n    },\n    get createExpressionStatement() {\n      return createExpressionStatement;\n    },\n    get createFinally() {\n      return createFinally;\n    },\n    get createForOfStatement() {\n      return createForOfStatement;\n    },\n    get createForInStatement() {\n      return createForInStatement;\n    },\n    get createForStatement() {\n      return createForStatement;\n    },\n    get createFunctionExpression() {\n      return createFunctionExpression;\n    },\n    get createIdentifierExpression() {\n      return createIdentifierExpression;\n    },\n    get createUndefinedExpression() {\n      return createUndefinedExpression;\n    },\n    get createIfStatement() {\n      return createIfStatement;\n    },\n    get createStringLiteral() {\n      return createStringLiteral;\n    },\n    get createBooleanLiteral() {\n      return createBooleanLiteral;\n    },\n    get createTrueLiteral() {\n      return createTrueLiteral;\n    },\n    get createFalseLiteral() {\n      return createFalseLiteral;\n    },\n    get createNullLiteral() {\n      return createNullLiteral;\n    },\n    get createNumberLiteral() {\n      return createNumberLiteral;\n    },\n    get createMemberExpression() {\n      return createMemberExpression;\n    },\n    get createMemberLookupExpression() {\n      return createMemberLookupExpression;\n    },\n    get createThisExpression() {\n      return createThisExpression;\n    },\n    get createNewExpression() {\n      return createNewExpression;\n    },\n    get createObjectFreeze() {\n      return createObjectFreeze;\n    },\n    get createObjectCreate() {\n      return createObjectCreate;\n    },\n    get createObjectLiteral() {\n      return createObjectLiteral;\n    },\n    get createDefineProperty() {\n      return createDefineProperty;\n    },\n    get createObjectLiteralExpression() {\n      return createObjectLiteralExpression;\n    },\n    get createParenExpression() {\n      return createParenExpression;\n    },\n    get createPostfixExpression() {\n      return createPostfixExpression;\n    },\n    get createScript() {\n      return createScript;\n    },\n    get createPropertyNameAssignment() {\n      return createPropertyNameAssignment;\n    },\n    get createReturnStatement() {\n      return createReturnStatement;\n    },\n    get createSwitchStatement() {\n      return createSwitchStatement;\n    },\n    get createThrowStatement() {\n      return createThrowStatement;\n    },\n    get createTryStatement() {\n      return createTryStatement;\n    },\n    get createUnaryExpression() {\n      return createUnaryExpression;\n    },\n    get createUseStrictDirective() {\n      return createUseStrictDirective;\n    },\n    get createVariableDeclarationList() {\n      return createVariableDeclarationList;\n    },\n    get createVariableDeclaration() {\n      return createVariableDeclaration;\n    },\n    get createVariableStatement() {\n      return createVariableStatement;\n    },\n    get createVoid0() {\n      return createVoid0;\n    },\n    get createWhileStatement() {\n      return createWhileStatement;\n    },\n    get createWithStatement() {\n      return createWithStatement;\n    },\n    get createAssignStateStatement() {\n      return createAssignStateStatement;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/FindVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/FindVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/FindVisitor\", path);\n  }\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var FindVisitor = function FindVisitor(tree) {\n    var keepOnGoing = arguments[1];\n    this.found_ = false;\n    this.shouldContinue_ = true;\n    this.keepOnGoing_ = keepOnGoing;\n    this.visitAny(tree);\n  };\n  ($traceurRuntime.createClass)(FindVisitor, {\n    get found() {\n      return this.found_;\n    },\n    set found(v) {\n      if (v) {\n        this.found_ = true;\n        if (!this.keepOnGoing_)\n          this.shouldContinue_ = false;\n      }\n    },\n    visitAny: function(tree) {\n      this.shouldContinue_ && tree && tree.visit(this);\n    },\n    visitList: function(list) {\n      if (list) {\n        for (var i = 0; this.shouldContinue_ && i < list.length; i++) {\n          this.visitAny(list[i]);\n        }\n      }\n    }\n  }, {}, ParseTreeVisitor);\n  return {get FindVisitor() {\n      return FindVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/Keywords\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/Keywords\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/Keywords\", path);\n  }\n  var keywords = ['break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'enum', 'extends', 'null', 'true', 'false'];\n  var strictKeywords = ['implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];\n  var keywordsByName = Object.create(null);\n  var NORMAL_KEYWORD = 1;\n  var STRICT_KEYWORD = 2;\n  keywords.forEach((function(value) {\n    keywordsByName[value] = NORMAL_KEYWORD;\n  }));\n  strictKeywords.forEach((function(value) {\n    keywordsByName[value] = STRICT_KEYWORD;\n  }));\n  function getKeywordType(value) {\n    return keywordsByName[value];\n  }\n  function isStrictKeyword(value) {\n    return getKeywordType(value) === STRICT_KEYWORD;\n  }\n  return {\n    get NORMAL_KEYWORD() {\n      return NORMAL_KEYWORD;\n    },\n    get STRICT_KEYWORD() {\n      return STRICT_KEYWORD;\n    },\n    get getKeywordType() {\n      return getKeywordType;\n    },\n    get isStrictKeyword() {\n      return isStrictKeyword;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/staticsemantics/StrictParams\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/staticsemantics/StrictParams\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/staticsemantics/StrictParams\", path);\n  }\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var isStrictKeyword = System.get(\"traceur@0.0.74/src/syntax/Keywords\").isStrictKeyword;\n  var StrictParams = function StrictParams(errorReporter) {\n    $traceurRuntime.superConstructor($StrictParams).call(this);\n    this.errorReporter = errorReporter;\n  };\n  var $StrictParams = StrictParams;\n  ($traceurRuntime.createClass)(StrictParams, {visitBindingIdentifier: function(tree) {\n      var name = tree.identifierToken.toString();\n      if (isStrictKeyword(name)) {\n        this.errorReporter.reportError(tree.location.start, (name + \" is a reserved identifier\"));\n      }\n    }}, {visit: function(tree, errorReporter) {\n      new $StrictParams(errorReporter).visitAny(tree);\n    }}, ParseTreeVisitor);\n  return {get StrictParams() {\n      return StrictParams;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/SourceRange\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/SourceRange\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/SourceRange\", path);\n  }\n  var SourceRange = function SourceRange(start, end) {\n    this.start = start;\n    this.end = end;\n  };\n  ($traceurRuntime.createClass)(SourceRange, {toString: function() {\n      var str = this.start.source.contents;\n      return str.slice(this.start.offset, this.end.offset);\n    }}, {});\n  return {get SourceRange() {\n      return SourceRange;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/ErrorReporter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/ErrorReporter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/ErrorReporter\", path);\n  }\n  var ErrorReporter = function ErrorReporter() {\n    this.hadError_ = false;\n  };\n  ($traceurRuntime.createClass)(ErrorReporter, {\n    reportError: function(location, message) {\n      this.hadError_ = true;\n      this.reportMessageInternal(location, message);\n    },\n    reportMessageInternal: function(location, message) {\n      if (location)\n        message = (location + \": \" + message);\n      console.error(message);\n    },\n    hadError: function() {\n      return this.hadError_;\n    },\n    clearError: function() {\n      this.hadError_ = false;\n    }\n  }, {});\n  function format(location, text) {\n    var args = arguments[2];\n    var i = 0;\n    text = text.replace(/%./g, function(s) {\n      switch (s) {\n        case '%s':\n          return args && args[i++];\n        case '%%':\n          return '%';\n      }\n      return s;\n    });\n    if (location)\n      text = (location + \": \" + text);\n    return text;\n  }\n  ;\n  ErrorReporter.format = format;\n  return {\n    get ErrorReporter() {\n      return ErrorReporter;\n    },\n    get format() {\n      return format;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/util/SyntaxErrorReporter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/SyntaxErrorReporter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/SyntaxErrorReporter\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/util/ErrorReporter\"),\n      ErrorReporter = $__0.ErrorReporter,\n      format = $__0.format;\n  var SyntaxErrorReporter = function SyntaxErrorReporter() {\n    $traceurRuntime.superConstructor($SyntaxErrorReporter).apply(this, arguments);\n  };\n  var $SyntaxErrorReporter = SyntaxErrorReporter;\n  ($traceurRuntime.createClass)(SyntaxErrorReporter, {reportMessageInternal: function(location, message) {\n      var s = format(location, message);\n      throw new SyntaxError(s);\n    }}, {}, ErrorReporter);\n  return {get SyntaxErrorReporter() {\n      return SyntaxErrorReporter;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/KeywordToken\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/KeywordToken\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/KeywordToken\", path);\n  }\n  var STRICT_KEYWORD = System.get(\"traceur@0.0.74/src/syntax/Keywords\").STRICT_KEYWORD;\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var KeywordToken = function KeywordToken(type, keywordType, location) {\n    this.type = type;\n    this.location = location;\n    this.isStrictKeyword_ = keywordType === STRICT_KEYWORD;\n  };\n  ($traceurRuntime.createClass)(KeywordToken, {\n    isKeyword: function() {\n      return true;\n    },\n    isStrictKeyword: function() {\n      return this.isStrictKeyword_;\n    }\n  }, {}, Token);\n  return {get KeywordToken() {\n      return KeywordToken;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/unicode-tables\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/unicode-tables\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/unicode-tables\", path);\n  }\n  var idStartTable = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 442, 443, 443, 444, 447, 448, 451, 452, 659, 660, 660, 661, 687, 688, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 883, 884, 884, 886, 887, 890, 890, 891, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1599, 1600, 1600, 1601, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2417, 2418, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3653, 3654, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4348, 4349, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6210, 6211, 6211, 6212, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7287, 7288, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7467, 7468, 7530, 7531, 7543, 7544, 7544, 7545, 7578, 7579, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8472, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8494, 8494, 8495, 8500, 8501, 8504, 8505, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8578, 8579, 8580, 8581, 8584, 11264, 11310, 11312, 11358, 11360, 11387, 11388, 11389, 11390, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12293, 12294, 12294, 12295, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12347, 12347, 12348, 12348, 12353, 12438, 12443, 12444, 12445, 12446, 12447, 12447, 12449, 12538, 12540, 12542, 12543, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 40980, 40981, 40981, 40982, 42124, 42192, 42231, 42232, 42237, 42240, 42507, 42508, 42508, 42512, 42527, 42538, 42539, 42560, 42605, 42606, 42606, 42623, 42623, 42624, 42647, 42656, 42725, 42726, 42735, 42775, 42783, 42786, 42863, 42864, 42864, 42865, 42887, 42888, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43001, 43002, 43002, 43003, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43631, 43632, 43632, 43633, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43740, 43741, 43741, 43744, 43754, 43762, 43762, 43763, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65391, 65392, 65392, 65393, 65437, 65438, 65439, 65440, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66334, 66352, 66368, 66369, 66369, 66370, 66377, 66378, 66378, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66639, 66640, 66717, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68147, 68192, 68220, 68352, 68405, 68416, 68437, 68448, 68466, 68608, 68680, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 70019, 70066, 70081, 70084, 71296, 71338, 73728, 74606, 74752, 74850, 77824, 78894, 92160, 92728, 93952, 94020, 94032, 94032, 94099, 94111, 110592, 110593, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 194560, 195101];\n  var idContinueTable = [183, 183, 768, 879, 903, 903, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1552, 1562, 1611, 1631, 1632, 1641, 1648, 1648, 1750, 1756, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2276, 2302, 2304, 2306, 2307, 2307, 2362, 2362, 2363, 2363, 2364, 2364, 2366, 2368, 2369, 2376, 2377, 2380, 2381, 2381, 2382, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2433, 2434, 2435, 2492, 2492, 2494, 2496, 2497, 2500, 2503, 2504, 2507, 2508, 2509, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2562, 2563, 2563, 2620, 2620, 2622, 2624, 2625, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2671, 2672, 2673, 2677, 2677, 2689, 2690, 2691, 2691, 2748, 2748, 2750, 2752, 2753, 2757, 2759, 2760, 2761, 2761, 2763, 2764, 2765, 2765, 2786, 2787, 2790, 2799, 2817, 2817, 2818, 2819, 2876, 2876, 2878, 2878, 2879, 2879, 2880, 2880, 2881, 2884, 2887, 2888, 2891, 2892, 2893, 2893, 2902, 2902, 2903, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3007, 3008, 3008, 3009, 3010, 3014, 3016, 3018, 3020, 3021, 3021, 3031, 3031, 3046, 3055, 3073, 3075, 3134, 3136, 3137, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3202, 3203, 3260, 3260, 3262, 3262, 3263, 3263, 3264, 3268, 3270, 3270, 3271, 3272, 3274, 3275, 3276, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3330, 3331, 3390, 3392, 3393, 3396, 3398, 3400, 3402, 3404, 3405, 3405, 3415, 3415, 3426, 3427, 3430, 3439, 3458, 3459, 3530, 3530, 3535, 3537, 3538, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3903, 3953, 3966, 3967, 3967, 3968, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4139, 4140, 4141, 4144, 4145, 4145, 4146, 4151, 4152, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4160, 4169, 4182, 4183, 4184, 4185, 4190, 4192, 4194, 4196, 4199, 4205, 4209, 4212, 4226, 4226, 4227, 4228, 4229, 4230, 4231, 4236, 4237, 4237, 4239, 4239, 4240, 4249, 4250, 4252, 4253, 4253, 4957, 4959, 4969, 4977, 5906, 5908, 5938, 5940, 5970, 5971, 6002, 6003, 6068, 6069, 6070, 6070, 6071, 6077, 6078, 6085, 6086, 6086, 6087, 6088, 6089, 6099, 6109, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6313, 6313, 6432, 6434, 6435, 6438, 6439, 6440, 6441, 6443, 6448, 6449, 6450, 6450, 6451, 6456, 6457, 6459, 6470, 6479, 6576, 6592, 6600, 6601, 6608, 6617, 6618, 6618, 6679, 6680, 6681, 6683, 6741, 6741, 6742, 6742, 6743, 6743, 6744, 6750, 6752, 6752, 6753, 6753, 6754, 6754, 6755, 6756, 6757, 6764, 6765, 6770, 6771, 6780, 6783, 6783, 6784, 6793, 6800, 6809, 6912, 6915, 6916, 6916, 6964, 6964, 6965, 6965, 6966, 6970, 6971, 6971, 6972, 6972, 6973, 6977, 6978, 6978, 6979, 6980, 6992, 7001, 7019, 7027, 7040, 7041, 7042, 7042, 7073, 7073, 7074, 7077, 7078, 7079, 7080, 7081, 7082, 7082, 7083, 7083, 7084, 7085, 7088, 7097, 7142, 7142, 7143, 7143, 7144, 7145, 7146, 7148, 7149, 7149, 7150, 7150, 7151, 7153, 7154, 7155, 7204, 7211, 7212, 7219, 7220, 7221, 7222, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7392, 7393, 7393, 7394, 7400, 7405, 7405, 7410, 7411, 7412, 7412, 7616, 7654, 7676, 7679, 8255, 8256, 8276, 8276, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12333, 12334, 12335, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42655, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43043, 43044, 43045, 43046, 43047, 43047, 43136, 43137, 43188, 43203, 43204, 43204, 43216, 43225, 43232, 43249, 43264, 43273, 43302, 43309, 43335, 43345, 43346, 43347, 43392, 43394, 43395, 43395, 43443, 43443, 43444, 43445, 43446, 43449, 43450, 43451, 43452, 43452, 43453, 43456, 43472, 43481, 43561, 43566, 43567, 43568, 43569, 43570, 43571, 43572, 43573, 43574, 43587, 43587, 43596, 43596, 43597, 43597, 43600, 43609, 43643, 43643, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43755, 43755, 43756, 43757, 43758, 43759, 43765, 43765, 43766, 43766, 44003, 44004, 44005, 44005, 44006, 44007, 44008, 44008, 44009, 44010, 44012, 44012, 44013, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65296, 65305, 65343, 65343, 66045, 66045, 66720, 66729, 68097, 68099, 68101, 68102, 68108, 68111, 68152, 68154, 68159, 68159, 69632, 69632, 69633, 69633, 69634, 69634, 69688, 69702, 69734, 69743, 69760, 69761, 69762, 69762, 69808, 69810, 69811, 69814, 69815, 69816, 69817, 69818, 69872, 69881, 69888, 69890, 69927, 69931, 69932, 69932, 69933, 69940, 69942, 69951, 70016, 70017, 70018, 70018, 70067, 70069, 70070, 70078, 70079, 70080, 70096, 70105, 71339, 71339, 71340, 71340, 71341, 71341, 71342, 71343, 71344, 71349, 71350, 71350, 71351, 71351, 71360, 71369, 94033, 94078, 94095, 94098, 119141, 119142, 119143, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 120782, 120831, 917760, 917999];\n  return {\n    get idStartTable() {\n      return idStartTable;\n    },\n    get idContinueTable() {\n      return idContinueTable;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/Scanner\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/Scanner\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/Scanner\", path);\n  }\n  var IdentifierToken = System.get(\"traceur@0.0.74/src/syntax/IdentifierToken\").IdentifierToken;\n  var KeywordToken = System.get(\"traceur@0.0.74/src/syntax/KeywordToken\").KeywordToken;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var getKeywordType = System.get(\"traceur@0.0.74/src/syntax/Keywords\").getKeywordType;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/unicode-tables\"),\n      idContinueTable = $__5.idContinueTable,\n      idStartTable = $__5.idStartTable;\n  var $__6 = System.get(\"traceur@0.0.74/src/Options\"),\n      options = $__6.options,\n      parseOptions = $__6.parseOptions;\n  var $__7 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AMPERSAND = $__7.AMPERSAND,\n      AMPERSAND_EQUAL = $__7.AMPERSAND_EQUAL,\n      AND = $__7.AND,\n      ARROW = $__7.ARROW,\n      AT = $__7.AT,\n      BANG = $__7.BANG,\n      BAR = $__7.BAR,\n      BAR_EQUAL = $__7.BAR_EQUAL,\n      CARET = $__7.CARET,\n      CARET_EQUAL = $__7.CARET_EQUAL,\n      CLOSE_ANGLE = $__7.CLOSE_ANGLE,\n      CLOSE_CURLY = $__7.CLOSE_CURLY,\n      CLOSE_PAREN = $__7.CLOSE_PAREN,\n      CLOSE_SQUARE = $__7.CLOSE_SQUARE,\n      COLON = $__7.COLON,\n      COMMA = $__7.COMMA,\n      DOT_DOT_DOT = $__7.DOT_DOT_DOT,\n      END_OF_FILE = $__7.END_OF_FILE,\n      EQUAL = $__7.EQUAL,\n      EQUAL_EQUAL = $__7.EQUAL_EQUAL,\n      EQUAL_EQUAL_EQUAL = $__7.EQUAL_EQUAL_EQUAL,\n      ERROR = $__7.ERROR,\n      GREATER_EQUAL = $__7.GREATER_EQUAL,\n      LEFT_SHIFT = $__7.LEFT_SHIFT,\n      LEFT_SHIFT_EQUAL = $__7.LEFT_SHIFT_EQUAL,\n      LESS_EQUAL = $__7.LESS_EQUAL,\n      MINUS = $__7.MINUS,\n      MINUS_EQUAL = $__7.MINUS_EQUAL,\n      MINUS_MINUS = $__7.MINUS_MINUS,\n      NO_SUBSTITUTION_TEMPLATE = $__7.NO_SUBSTITUTION_TEMPLATE,\n      NOT_EQUAL = $__7.NOT_EQUAL,\n      NOT_EQUAL_EQUAL = $__7.NOT_EQUAL_EQUAL,\n      NUMBER = $__7.NUMBER,\n      OPEN_ANGLE = $__7.OPEN_ANGLE,\n      OPEN_CURLY = $__7.OPEN_CURLY,\n      OPEN_PAREN = $__7.OPEN_PAREN,\n      OPEN_SQUARE = $__7.OPEN_SQUARE,\n      OR = $__7.OR,\n      PERCENT = $__7.PERCENT,\n      PERCENT_EQUAL = $__7.PERCENT_EQUAL,\n      PERIOD = $__7.PERIOD,\n      PLUS = $__7.PLUS,\n      PLUS_EQUAL = $__7.PLUS_EQUAL,\n      PLUS_PLUS = $__7.PLUS_PLUS,\n      QUESTION = $__7.QUESTION,\n      REGULAR_EXPRESSION = $__7.REGULAR_EXPRESSION,\n      RIGHT_SHIFT = $__7.RIGHT_SHIFT,\n      RIGHT_SHIFT_EQUAL = $__7.RIGHT_SHIFT_EQUAL,\n      SEMI_COLON = $__7.SEMI_COLON,\n      SLASH = $__7.SLASH,\n      SLASH_EQUAL = $__7.SLASH_EQUAL,\n      STAR = $__7.STAR,\n      STAR_EQUAL = $__7.STAR_EQUAL,\n      STAR_STAR = $__7.STAR_STAR,\n      STAR_STAR_EQUAL = $__7.STAR_STAR_EQUAL,\n      STRING = $__7.STRING,\n      TEMPLATE_HEAD = $__7.TEMPLATE_HEAD,\n      TEMPLATE_MIDDLE = $__7.TEMPLATE_MIDDLE,\n      TEMPLATE_TAIL = $__7.TEMPLATE_TAIL,\n      TILDE = $__7.TILDE,\n      UNSIGNED_RIGHT_SHIFT = $__7.UNSIGNED_RIGHT_SHIFT,\n      UNSIGNED_RIGHT_SHIFT_EQUAL = $__7.UNSIGNED_RIGHT_SHIFT_EQUAL;\n  var isWhitespaceArray = [];\n  for (var i = 0; i < 128; i++) {\n    isWhitespaceArray[i] = i >= 9 && i <= 13 || i === 0x20;\n  }\n  var isWhitespaceArray = [];\n  for (var i = 0; i < 128; i++) {\n    isWhitespaceArray[i] = i >= 9 && i <= 13 || i === 0x20;\n  }\n  function isWhitespace(code) {\n    if (code < 128)\n      return isWhitespaceArray[code];\n    switch (code) {\n      case 0xA0:\n      case 0xFEFF:\n      case 0x2028:\n      case 0x2029:\n        return true;\n    }\n    return false;\n  }\n  function isLineTerminator(code) {\n    switch (code) {\n      case 10:\n      case 13:\n      case 0x2028:\n      case 0x2029:\n        return true;\n    }\n    return false;\n  }\n  function isDecimalDigit(code) {\n    return code >= 48 && code <= 57;\n  }\n  var isHexDigitArray = [];\n  for (var i = 0; i < 128; i++) {\n    isHexDigitArray[i] = i >= 48 && i <= 57 || i >= 65 && i <= 70 || i >= 97 && i <= 102;\n  }\n  function isHexDigit(code) {\n    return code < 128 && isHexDigitArray[code];\n  }\n  function isBinaryDigit(code) {\n    return code === 48 || code === 49;\n  }\n  function isOctalDigit(code) {\n    return code >= 48 && code <= 55;\n  }\n  var isIdentifierStartArray = [];\n  for (var i = 0; i < 128; i++) {\n    isIdentifierStartArray[i] = i === 36 || i >= 65 && i <= 90 || i === 95 || i >= 97 && i <= 122;\n  }\n  function isIdentifierStart(code) {\n    return code < 128 ? isIdentifierStartArray[code] : inTable(idStartTable, code);\n  }\n  var isIdentifierPartArray = [];\n  for (var i = 0; i < 128; i++) {\n    isIdentifierPartArray[i] = isIdentifierStart(i) || isDecimalDigit(i);\n  }\n  function isIdentifierPart(code) {\n    return code < 128 ? isIdentifierPartArray[code] : inTable(idStartTable, code) || inTable(idContinueTable, code) || code === 8204 || code === 8205;\n  }\n  function inTable(table, code) {\n    for (var i = 0; i < table.length; ) {\n      if (code < table[i++])\n        return false;\n      if (code <= table[i++])\n        return true;\n    }\n    return false;\n  }\n  function isRegularExpressionChar(code) {\n    switch (code) {\n      case 47:\n        return false;\n      case 91:\n      case 92:\n        return true;\n    }\n    return !isLineTerminator(code);\n  }\n  function isRegularExpressionFirstChar(code) {\n    return isRegularExpressionChar(code) && code !== 42;\n  }\n  var index,\n      input,\n      length,\n      token,\n      lastToken,\n      lookaheadToken,\n      currentCharCode,\n      lineNumberTable,\n      errorReporter,\n      currentParser;\n  var Scanner = function Scanner(reporter, file, parser) {\n    errorReporter = reporter;\n    lineNumberTable = file.lineNumberTable;\n    input = file.contents;\n    length = file.contents.length;\n    this.index = 0;\n    currentParser = parser;\n  };\n  ($traceurRuntime.createClass)(Scanner, {\n    get lastToken() {\n      return lastToken;\n    },\n    getPosition: function() {\n      return getPosition(getOffset());\n    },\n    nextRegularExpressionLiteralToken: function() {\n      lastToken = nextRegularExpressionLiteralToken();\n      token = scanToken();\n      return lastToken;\n    },\n    nextTemplateLiteralToken: function() {\n      var t = nextTemplateLiteralToken();\n      token = scanToken();\n      return t;\n    },\n    nextCloseAngle: function() {\n      switch (token.type) {\n        case GREATER_EQUAL:\n        case RIGHT_SHIFT:\n        case RIGHT_SHIFT_EQUAL:\n        case UNSIGNED_RIGHT_SHIFT:\n        case UNSIGNED_RIGHT_SHIFT_EQUAL:\n          this.index -= token.type.length - 1;\n          lastToken = createToken(CLOSE_ANGLE, index);\n          token = scanToken();\n          return lastToken;\n      }\n      return nextToken();\n    },\n    nextToken: function() {\n      return nextToken();\n    },\n    peekToken: function(opt_index) {\n      return opt_index ? peekTokenLookahead() : peekToken();\n    },\n    peekTokenNoLineTerminator: function() {\n      return peekTokenNoLineTerminator();\n    },\n    isAtEnd: function() {\n      return isAtEnd();\n    },\n    set index(i) {\n      index = i;\n      lastToken = null;\n      token = null;\n      lookaheadToken = null;\n      updateCurrentCharCode();\n    },\n    get index() {\n      return index;\n    }\n  }, {});\n  function getPosition(offset) {\n    return lineNumberTable.getSourcePosition(offset);\n  }\n  function getTokenRange(startOffset) {\n    return lineNumberTable.getSourceRange(startOffset, index);\n  }\n  function getOffset() {\n    return token ? token.location.start.offset : index;\n  }\n  function nextRegularExpressionLiteralToken() {\n    var beginIndex = index - token.toString().length;\n    if (!(token.type == SLASH_EQUAL && currentCharCode === 47) && !skipRegularExpressionBody()) {\n      return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex));\n    }\n    if (currentCharCode !== 47) {\n      reportError('Expected \\'/\\' in regular expression literal');\n      return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex));\n    }\n    next();\n    while (isIdentifierPart(currentCharCode)) {\n      next();\n    }\n    return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex));\n  }\n  function skipRegularExpressionBody() {\n    if (!isRegularExpressionFirstChar(currentCharCode)) {\n      reportError('Expected regular expression first char');\n      return false;\n    }\n    while (!isAtEnd() && isRegularExpressionChar(currentCharCode)) {\n      if (!skipRegularExpressionChar())\n        return false;\n    }\n    return true;\n  }\n  function skipRegularExpressionChar() {\n    switch (currentCharCode) {\n      case 92:\n        return skipRegularExpressionBackslashSequence();\n      case 91:\n        return skipRegularExpressionClass();\n      default:\n        next();\n        return true;\n    }\n  }\n  function skipRegularExpressionBackslashSequence() {\n    next();\n    if (isLineTerminator(currentCharCode) || isAtEnd()) {\n      reportError('New line not allowed in regular expression literal');\n      return false;\n    }\n    next();\n    return true;\n  }\n  function skipRegularExpressionClass() {\n    next();\n    while (!isAtEnd() && peekRegularExpressionClassChar()) {\n      if (!skipRegularExpressionClassChar()) {\n        return false;\n      }\n    }\n    if (currentCharCode !== 93) {\n      reportError('\\']\\' expected');\n      return false;\n    }\n    next();\n    return true;\n  }\n  function peekRegularExpressionClassChar() {\n    return currentCharCode !== 93 && !isLineTerminator(currentCharCode);\n  }\n  function skipRegularExpressionClassChar() {\n    if (currentCharCode === 92) {\n      return skipRegularExpressionBackslashSequence();\n    }\n    next();\n    return true;\n  }\n  function skipTemplateCharacter() {\n    while (!isAtEnd()) {\n      switch (currentCharCode) {\n        case 96:\n          return;\n        case 92:\n          skipStringLiteralEscapeSequence();\n          break;\n        case 36:\n          var code = input.charCodeAt(index + 1);\n          if (code === 123)\n            return;\n        default:\n          next();\n      }\n    }\n  }\n  function scanTemplateStart(beginIndex) {\n    if (isAtEnd()) {\n      reportError('Unterminated template literal');\n      return lastToken = createToken(END_OF_FILE, beginIndex);\n    }\n    return nextTemplateLiteralTokenShared(NO_SUBSTITUTION_TEMPLATE, TEMPLATE_HEAD);\n  }\n  function nextTemplateLiteralToken() {\n    if (isAtEnd()) {\n      reportError('Expected \\'}\\' after expression in template literal');\n      return createToken(END_OF_FILE, index);\n    }\n    if (token.type !== CLOSE_CURLY) {\n      reportError('Expected \\'}\\' after expression in template literal');\n      return createToken(ERROR, index);\n    }\n    return nextTemplateLiteralTokenShared(TEMPLATE_TAIL, TEMPLATE_MIDDLE);\n  }\n  function nextTemplateLiteralTokenShared(endType, middleType) {\n    var beginIndex = index;\n    skipTemplateCharacter();\n    if (isAtEnd()) {\n      reportError('Unterminated template literal');\n      return createToken(ERROR, beginIndex);\n    }\n    var value = getTokenString(beginIndex);\n    switch (currentCharCode) {\n      case 96:\n        next();\n        return lastToken = new LiteralToken(endType, value, getTokenRange(beginIndex - 1));\n      case 36:\n        next();\n        next();\n        return lastToken = new LiteralToken(middleType, value, getTokenRange(beginIndex - 1));\n    }\n  }\n  function nextToken() {\n    var t = peekToken();\n    token = lookaheadToken || scanToken();\n    lookaheadToken = null;\n    lastToken = t;\n    return t;\n  }\n  function peekTokenNoLineTerminator() {\n    var t = peekToken();\n    var start = lastToken.location.end.offset;\n    var end = t.location.start.offset;\n    for (var i = start; i < end; i++) {\n      var code = input.charCodeAt(i);\n      if (isLineTerminator(code))\n        return null;\n      if (code === 47) {\n        code = input.charCodeAt(++i);\n        if (code === 47)\n          return null;\n        i = input.indexOf('*/', i) + 2;\n      }\n    }\n    return t;\n  }\n  function peekToken() {\n    return token || (token = scanToken());\n  }\n  function peekTokenLookahead() {\n    if (!token)\n      token = scanToken();\n    if (!lookaheadToken)\n      lookaheadToken = scanToken();\n    return lookaheadToken;\n  }\n  function skipWhitespace() {\n    while (!isAtEnd() && peekWhitespace()) {\n      next();\n    }\n  }\n  function peekWhitespace() {\n    return isWhitespace(currentCharCode);\n  }\n  function skipComments() {\n    while (skipComment()) {}\n  }\n  function skipComment() {\n    skipWhitespace();\n    var code = currentCharCode;\n    if (code === 47) {\n      code = input.charCodeAt(index + 1);\n      switch (code) {\n        case 47:\n          skipSingleLineComment();\n          return true;\n        case 42:\n          skipMultiLineComment();\n          return true;\n      }\n    }\n    return false;\n  }\n  function commentCallback(start, index) {\n    if (options.commentCallback)\n      currentParser.handleComment(lineNumberTable.getSourceRange(start, index));\n  }\n  function skipSingleLineComment() {\n    var start = index;\n    index += 2;\n    while (!isAtEnd() && !isLineTerminator(input.charCodeAt(index++))) {}\n    updateCurrentCharCode();\n    commentCallback(start, index);\n  }\n  function skipMultiLineComment() {\n    var start = index;\n    var i = input.indexOf('*/', index + 2);\n    if (i !== -1)\n      index = i + 2;\n    else\n      index = length;\n    updateCurrentCharCode();\n    commentCallback(start, index);\n  }\n  function scanToken() {\n    skipComments();\n    var beginIndex = index;\n    if (isAtEnd())\n      return createToken(END_OF_FILE, beginIndex);\n    var code = currentCharCode;\n    next();\n    switch (code) {\n      case 123:\n        return createToken(OPEN_CURLY, beginIndex);\n      case 125:\n        return createToken(CLOSE_CURLY, beginIndex);\n      case 40:\n        return createToken(OPEN_PAREN, beginIndex);\n      case 41:\n        return createToken(CLOSE_PAREN, beginIndex);\n      case 91:\n        return createToken(OPEN_SQUARE, beginIndex);\n      case 93:\n        return createToken(CLOSE_SQUARE, beginIndex);\n      case 46:\n        switch (currentCharCode) {\n          case 46:\n            if (input.charCodeAt(index + 1) === 46) {\n              next();\n              next();\n              return createToken(DOT_DOT_DOT, beginIndex);\n            }\n            break;\n          default:\n            if (isDecimalDigit(currentCharCode))\n              return scanNumberPostPeriod(beginIndex);\n        }\n        return createToken(PERIOD, beginIndex);\n      case 59:\n        return createToken(SEMI_COLON, beginIndex);\n      case 44:\n        return createToken(COMMA, beginIndex);\n      case 126:\n        return createToken(TILDE, beginIndex);\n      case 63:\n        return createToken(QUESTION, beginIndex);\n      case 58:\n        return createToken(COLON, beginIndex);\n      case 60:\n        switch (currentCharCode) {\n          case 60:\n            next();\n            if (currentCharCode === 61) {\n              next();\n              return createToken(LEFT_SHIFT_EQUAL, beginIndex);\n            }\n            return createToken(LEFT_SHIFT, beginIndex);\n          case 61:\n            next();\n            return createToken(LESS_EQUAL, beginIndex);\n          default:\n            return createToken(OPEN_ANGLE, beginIndex);\n        }\n      case 62:\n        switch (currentCharCode) {\n          case 62:\n            next();\n            switch (currentCharCode) {\n              case 61:\n                next();\n                return createToken(RIGHT_SHIFT_EQUAL, beginIndex);\n              case 62:\n                next();\n                if (currentCharCode === 61) {\n                  next();\n                  return createToken(UNSIGNED_RIGHT_SHIFT_EQUAL, beginIndex);\n                }\n                return createToken(UNSIGNED_RIGHT_SHIFT, beginIndex);\n              default:\n                return createToken(RIGHT_SHIFT, beginIndex);\n            }\n          case 61:\n            next();\n            return createToken(GREATER_EQUAL, beginIndex);\n          default:\n            return createToken(CLOSE_ANGLE, beginIndex);\n        }\n      case 61:\n        if (currentCharCode === 61) {\n          next();\n          if (currentCharCode === 61) {\n            next();\n            return createToken(EQUAL_EQUAL_EQUAL, beginIndex);\n          }\n          return createToken(EQUAL_EQUAL, beginIndex);\n        }\n        if (currentCharCode === 62 && parseOptions.arrowFunctions) {\n          next();\n          return createToken(ARROW, beginIndex);\n        }\n        return createToken(EQUAL, beginIndex);\n      case 33:\n        if (currentCharCode === 61) {\n          next();\n          if (currentCharCode === 61) {\n            next();\n            return createToken(NOT_EQUAL_EQUAL, beginIndex);\n          }\n          return createToken(NOT_EQUAL, beginIndex);\n        }\n        return createToken(BANG, beginIndex);\n      case 42:\n        if (currentCharCode === 61) {\n          next();\n          return createToken(STAR_EQUAL, beginIndex);\n        }\n        if (currentCharCode === 42 && parseOptions.exponentiation) {\n          next();\n          if (currentCharCode === 61) {\n            next();\n            return createToken(STAR_STAR_EQUAL, beginIndex);\n          }\n          return createToken(STAR_STAR, beginIndex);\n        }\n        return createToken(STAR, beginIndex);\n      case 37:\n        if (currentCharCode === 61) {\n          next();\n          return createToken(PERCENT_EQUAL, beginIndex);\n        }\n        return createToken(PERCENT, beginIndex);\n      case 94:\n        if (currentCharCode === 61) {\n          next();\n          return createToken(CARET_EQUAL, beginIndex);\n        }\n        return createToken(CARET, beginIndex);\n      case 47:\n        if (currentCharCode === 61) {\n          next();\n          return createToken(SLASH_EQUAL, beginIndex);\n        }\n        return createToken(SLASH, beginIndex);\n      case 43:\n        switch (currentCharCode) {\n          case 43:\n            next();\n            return createToken(PLUS_PLUS, beginIndex);\n          case 61:\n            next();\n            return createToken(PLUS_EQUAL, beginIndex);\n          default:\n            return createToken(PLUS, beginIndex);\n        }\n      case 45:\n        switch (currentCharCode) {\n          case 45:\n            next();\n            return createToken(MINUS_MINUS, beginIndex);\n          case 61:\n            next();\n            return createToken(MINUS_EQUAL, beginIndex);\n          default:\n            return createToken(MINUS, beginIndex);\n        }\n      case 38:\n        switch (currentCharCode) {\n          case 38:\n            next();\n            return createToken(AND, beginIndex);\n          case 61:\n            next();\n            return createToken(AMPERSAND_EQUAL, beginIndex);\n          default:\n            return createToken(AMPERSAND, beginIndex);\n        }\n      case 124:\n        switch (currentCharCode) {\n          case 124:\n            next();\n            return createToken(OR, beginIndex);\n          case 61:\n            next();\n            return createToken(BAR_EQUAL, beginIndex);\n          default:\n            return createToken(BAR, beginIndex);\n        }\n      case 96:\n        return scanTemplateStart(beginIndex);\n      case 64:\n        return createToken(AT, beginIndex);\n      case 48:\n        return scanPostZero(beginIndex);\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        return scanPostDigit(beginIndex);\n      case 34:\n      case 39:\n        return scanStringLiteral(beginIndex, code);\n      default:\n        return scanIdentifierOrKeyword(beginIndex, code);\n    }\n  }\n  function scanNumberPostPeriod(beginIndex) {\n    skipDecimalDigits();\n    return scanExponentOfNumericLiteral(beginIndex);\n  }\n  function scanPostDigit(beginIndex) {\n    skipDecimalDigits();\n    return scanFractionalNumericLiteral(beginIndex);\n  }\n  function scanPostZero(beginIndex) {\n    switch (currentCharCode) {\n      case 46:\n        return scanFractionalNumericLiteral(beginIndex);\n      case 88:\n      case 120:\n        next();\n        if (!isHexDigit(currentCharCode)) {\n          reportError('Hex Integer Literal must contain at least one digit');\n        }\n        skipHexDigits();\n        return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));\n      case 66:\n      case 98:\n        if (!parseOptions.numericLiterals)\n          break;\n        next();\n        if (!isBinaryDigit(currentCharCode)) {\n          reportError('Binary Integer Literal must contain at least one digit');\n        }\n        skipBinaryDigits();\n        return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));\n      case 79:\n      case 111:\n        if (!parseOptions.numericLiterals)\n          break;\n        next();\n        if (!isOctalDigit(currentCharCode)) {\n          reportError('Octal Integer Literal must contain at least one digit');\n        }\n        skipOctalDigits();\n        return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));\n      case 48:\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        return scanPostDigit(beginIndex);\n    }\n    return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));\n  }\n  function createToken(type, beginIndex) {\n    return new Token(type, getTokenRange(beginIndex));\n  }\n  function readUnicodeEscapeSequence() {\n    var beginIndex = index;\n    if (currentCharCode === 117) {\n      next();\n      if (skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit()) {\n        return parseInt(getTokenString(beginIndex + 1), 16);\n      }\n    }\n    reportError('Invalid unicode escape sequence in identifier', beginIndex - 1);\n    return 0;\n  }\n  function scanIdentifierOrKeyword(beginIndex, code) {\n    var escapedCharCodes;\n    if (code === 92) {\n      code = readUnicodeEscapeSequence();\n      escapedCharCodes = [code];\n    }\n    if (!isIdentifierStart(code)) {\n      reportError((\"Character code '\" + code + \"' is not a valid identifier start char\"), beginIndex);\n      return createToken(ERROR, beginIndex);\n    }\n    for (; ; ) {\n      code = currentCharCode;\n      if (isIdentifierPart(code)) {\n        next();\n      } else if (code === 92) {\n        next();\n        code = readUnicodeEscapeSequence();\n        if (!escapedCharCodes)\n          escapedCharCodes = [];\n        escapedCharCodes.push(code);\n        if (!isIdentifierPart(code))\n          return createToken(ERROR, beginIndex);\n      } else {\n        break;\n      }\n    }\n    var value = input.slice(beginIndex, index);\n    var keywordType = getKeywordType(value);\n    if (keywordType)\n      return new KeywordToken(value, keywordType, getTokenRange(beginIndex));\n    if (escapedCharCodes) {\n      var i = 0;\n      value = value.replace(/\\\\u..../g, function(s) {\n        return String.fromCharCode(escapedCharCodes[i++]);\n      });\n    }\n    return new IdentifierToken(getTokenRange(beginIndex), value);\n  }\n  function scanStringLiteral(beginIndex, terminator) {\n    while (peekStringLiteralChar(terminator)) {\n      if (!skipStringLiteralChar()) {\n        return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));\n      }\n    }\n    if (currentCharCode !== terminator) {\n      reportError('Unterminated String Literal', beginIndex);\n    } else {\n      next();\n    }\n    return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));\n  }\n  function getTokenString(beginIndex) {\n    return input.substring(beginIndex, index);\n  }\n  function peekStringLiteralChar(terminator) {\n    return !isAtEnd() && currentCharCode !== terminator && !isLineTerminator(currentCharCode);\n  }\n  function skipStringLiteralChar() {\n    if (currentCharCode === 92) {\n      return skipStringLiteralEscapeSequence();\n    }\n    next();\n    return true;\n  }\n  function skipStringLiteralEscapeSequence() {\n    next();\n    if (isAtEnd()) {\n      reportError('Unterminated string literal escape sequence');\n      return false;\n    }\n    if (isLineTerminator(currentCharCode)) {\n      skipLineTerminator();\n      return true;\n    }\n    var code = currentCharCode;\n    next();\n    switch (code) {\n      case 39:\n      case 34:\n      case 92:\n      case 98:\n      case 102:\n      case 110:\n      case 114:\n      case 116:\n      case 118:\n      case 48:\n        return true;\n      case 120:\n        return skipHexDigit() && skipHexDigit();\n      case 117:\n        return skipUnicodeEscapeSequence();\n      default:\n        return true;\n    }\n  }\n  function skipUnicodeEscapeSequence() {\n    if (currentCharCode === 123 && parseOptions.unicodeEscapeSequences) {\n      next();\n      var beginIndex = index;\n      if (!isHexDigit(currentCharCode)) {\n        reportError('Hex digit expected');\n        return false;\n      }\n      skipHexDigits();\n      if (currentCharCode !== 125) {\n        reportError('Hex digit expected');\n        return false;\n      }\n      var codePoint = getTokenString(beginIndex, index);\n      if (parseInt(codePoint, 16) > 0x10FFFF) {\n        reportError('The code point in a Unicode escape sequence cannot exceed 10FFFF');\n        return false;\n      }\n      next();\n      return true;\n    }\n    return skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit();\n  }\n  function skipHexDigit() {\n    if (!isHexDigit(currentCharCode)) {\n      reportError('Hex digit expected');\n      return false;\n    }\n    next();\n    return true;\n  }\n  function skipLineTerminator() {\n    var first = currentCharCode;\n    next();\n    if (first === 13 && currentCharCode === 10) {\n      next();\n    }\n  }\n  function scanFractionalNumericLiteral(beginIndex) {\n    if (currentCharCode === 46) {\n      next();\n      skipDecimalDigits();\n    }\n    return scanExponentOfNumericLiteral(beginIndex);\n  }\n  function scanExponentOfNumericLiteral(beginIndex) {\n    switch (currentCharCode) {\n      case 101:\n      case 69:\n        next();\n        switch (currentCharCode) {\n          case 43:\n          case 45:\n            next();\n            break;\n        }\n        if (!isDecimalDigit(currentCharCode)) {\n          reportError('Exponent part must contain at least one digit');\n        }\n        skipDecimalDigits();\n        break;\n      default:\n        break;\n    }\n    return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));\n  }\n  function skipDecimalDigits() {\n    while (isDecimalDigit(currentCharCode)) {\n      next();\n    }\n  }\n  function skipHexDigits() {\n    while (isHexDigit(currentCharCode)) {\n      next();\n    }\n  }\n  function skipBinaryDigits() {\n    while (isBinaryDigit(currentCharCode)) {\n      next();\n    }\n  }\n  function skipOctalDigits() {\n    while (isOctalDigit(currentCharCode)) {\n      next();\n    }\n  }\n  function isAtEnd() {\n    return index === length;\n  }\n  function next() {\n    index++;\n    updateCurrentCharCode();\n  }\n  function updateCurrentCharCode() {\n    currentCharCode = input.charCodeAt(index);\n  }\n  function reportError(message) {\n    var indexArg = arguments[1] !== (void 0) ? arguments[1] : index;\n    var position = getPosition(indexArg);\n    errorReporter.reportError(position, message);\n  }\n  return {\n    get isWhitespace() {\n      return isWhitespace;\n    },\n    get isLineTerminator() {\n      return isLineTerminator;\n    },\n    get isIdentifierPart() {\n      return isIdentifierPart;\n    },\n    get Scanner() {\n      return Scanner;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/Parser\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/Parser\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/Parser\", path);\n  }\n  var FindVisitor = System.get(\"traceur@0.0.74/src/codegeneration/FindVisitor\").FindVisitor;\n  var IdentifierToken = System.get(\"traceur@0.0.74/src/syntax/IdentifierToken\").IdentifierToken;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARRAY_LITERAL_EXPRESSION = $__2.ARRAY_LITERAL_EXPRESSION,\n      BINDING_IDENTIFIER = $__2.BINDING_IDENTIFIER,\n      CALL_EXPRESSION = $__2.CALL_EXPRESSION,\n      COMPUTED_PROPERTY_NAME = $__2.COMPUTED_PROPERTY_NAME,\n      COVER_FORMALS = $__2.COVER_FORMALS,\n      FORMAL_PARAMETER_LIST = $__2.FORMAL_PARAMETER_LIST,\n      IDENTIFIER_EXPRESSION = $__2.IDENTIFIER_EXPRESSION,\n      LITERAL_PROPERTY_NAME = $__2.LITERAL_PROPERTY_NAME,\n      OBJECT_LITERAL_EXPRESSION = $__2.OBJECT_LITERAL_EXPRESSION,\n      REST_PARAMETER = $__2.REST_PARAMETER,\n      SYNTAX_ERROR_TREE = $__2.SYNTAX_ERROR_TREE;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      AS = $__3.AS,\n      ASYNC = $__3.ASYNC,\n      AWAIT = $__3.AWAIT,\n      FROM = $__3.FROM,\n      GET = $__3.GET,\n      OF = $__3.OF,\n      SET = $__3.SET;\n  var SyntaxErrorReporter = System.get(\"traceur@0.0.74/src/util/SyntaxErrorReporter\").SyntaxErrorReporter;\n  var Scanner = System.get(\"traceur@0.0.74/src/syntax/Scanner\").Scanner;\n  var SourceRange = System.get(\"traceur@0.0.74/src/util/SourceRange\").SourceRange;\n  var StrictParams = System.get(\"traceur@0.0.74/src/staticsemantics/StrictParams\").StrictParams;\n  var $__8 = System.get(\"traceur@0.0.74/src/syntax/Token\"),\n      Token = $__8.Token,\n      isAssignmentOperator = $__8.isAssignmentOperator;\n  var getKeywordType = System.get(\"traceur@0.0.74/src/syntax/Keywords\").getKeywordType;\n  var traceurOptions = System.get(\"traceur@0.0.74/src/Options\").options;\n  var $__11 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AMPERSAND = $__11.AMPERSAND,\n      AND = $__11.AND,\n      ARROW = $__11.ARROW,\n      AT = $__11.AT,\n      BANG = $__11.BANG,\n      BAR = $__11.BAR,\n      BREAK = $__11.BREAK,\n      CARET = $__11.CARET,\n      CASE = $__11.CASE,\n      CATCH = $__11.CATCH,\n      CLASS = $__11.CLASS,\n      CLOSE_ANGLE = $__11.CLOSE_ANGLE,\n      CLOSE_CURLY = $__11.CLOSE_CURLY,\n      CLOSE_PAREN = $__11.CLOSE_PAREN,\n      CLOSE_SQUARE = $__11.CLOSE_SQUARE,\n      COLON = $__11.COLON,\n      COMMA = $__11.COMMA,\n      CONST = $__11.CONST,\n      CONTINUE = $__11.CONTINUE,\n      DEBUGGER = $__11.DEBUGGER,\n      DEFAULT = $__11.DEFAULT,\n      DELETE = $__11.DELETE,\n      DO = $__11.DO,\n      DOT_DOT_DOT = $__11.DOT_DOT_DOT,\n      ELSE = $__11.ELSE,\n      END_OF_FILE = $__11.END_OF_FILE,\n      EQUAL = $__11.EQUAL,\n      EQUAL_EQUAL = $__11.EQUAL_EQUAL,\n      EQUAL_EQUAL_EQUAL = $__11.EQUAL_EQUAL_EQUAL,\n      ERROR = $__11.ERROR,\n      EXPORT = $__11.EXPORT,\n      EXTENDS = $__11.EXTENDS,\n      FALSE = $__11.FALSE,\n      FINALLY = $__11.FINALLY,\n      FOR = $__11.FOR,\n      FUNCTION = $__11.FUNCTION,\n      GREATER_EQUAL = $__11.GREATER_EQUAL,\n      IDENTIFIER = $__11.IDENTIFIER,\n      IF = $__11.IF,\n      IMPLEMENTS = $__11.IMPLEMENTS,\n      IMPORT = $__11.IMPORT,\n      IN = $__11.IN,\n      INSTANCEOF = $__11.INSTANCEOF,\n      INTERFACE = $__11.INTERFACE,\n      LEFT_SHIFT = $__11.LEFT_SHIFT,\n      LESS_EQUAL = $__11.LESS_EQUAL,\n      LET = $__11.LET,\n      MINUS = $__11.MINUS,\n      MINUS_MINUS = $__11.MINUS_MINUS,\n      NEW = $__11.NEW,\n      NO_SUBSTITUTION_TEMPLATE = $__11.NO_SUBSTITUTION_TEMPLATE,\n      NOT_EQUAL = $__11.NOT_EQUAL,\n      NOT_EQUAL_EQUAL = $__11.NOT_EQUAL_EQUAL,\n      NULL = $__11.NULL,\n      NUMBER = $__11.NUMBER,\n      OPEN_ANGLE = $__11.OPEN_ANGLE,\n      OPEN_CURLY = $__11.OPEN_CURLY,\n      OPEN_PAREN = $__11.OPEN_PAREN,\n      OPEN_SQUARE = $__11.OPEN_SQUARE,\n      OR = $__11.OR,\n      PACKAGE = $__11.PACKAGE,\n      PERCENT = $__11.PERCENT,\n      PERIOD = $__11.PERIOD,\n      PLUS = $__11.PLUS,\n      PLUS_PLUS = $__11.PLUS_PLUS,\n      PRIVATE = $__11.PRIVATE,\n      PROTECTED = $__11.PROTECTED,\n      PUBLIC = $__11.PUBLIC,\n      QUESTION = $__11.QUESTION,\n      RETURN = $__11.RETURN,\n      RIGHT_SHIFT = $__11.RIGHT_SHIFT,\n      SEMI_COLON = $__11.SEMI_COLON,\n      SLASH = $__11.SLASH,\n      SLASH_EQUAL = $__11.SLASH_EQUAL,\n      STAR = $__11.STAR,\n      STAR_STAR = $__11.STAR_STAR,\n      STATIC = $__11.STATIC,\n      STRING = $__11.STRING,\n      SUPER = $__11.SUPER,\n      SWITCH = $__11.SWITCH,\n      TEMPLATE_HEAD = $__11.TEMPLATE_HEAD,\n      TEMPLATE_TAIL = $__11.TEMPLATE_TAIL,\n      THIS = $__11.THIS,\n      THROW = $__11.THROW,\n      TILDE = $__11.TILDE,\n      TRUE = $__11.TRUE,\n      TRY = $__11.TRY,\n      TYPEOF = $__11.TYPEOF,\n      UNSIGNED_RIGHT_SHIFT = $__11.UNSIGNED_RIGHT_SHIFT,\n      VAR = $__11.VAR,\n      VOID = $__11.VOID,\n      WHILE = $__11.WHILE,\n      WITH = $__11.WITH,\n      YIELD = $__11.YIELD;\n  var $__12 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      ArgumentList = $__12.ArgumentList,\n      ArrayComprehension = $__12.ArrayComprehension,\n      ArrayLiteralExpression = $__12.ArrayLiteralExpression,\n      ArrayPattern = $__12.ArrayPattern,\n      ArrowFunctionExpression = $__12.ArrowFunctionExpression,\n      AssignmentElement = $__12.AssignmentElement,\n      AwaitExpression = $__12.AwaitExpression,\n      BinaryExpression = $__12.BinaryExpression,\n      BindingElement = $__12.BindingElement,\n      BindingIdentifier = $__12.BindingIdentifier,\n      Block = $__12.Block,\n      BreakStatement = $__12.BreakStatement,\n      CallExpression = $__12.CallExpression,\n      CaseClause = $__12.CaseClause,\n      Catch = $__12.Catch,\n      ClassDeclaration = $__12.ClassDeclaration,\n      ClassExpression = $__12.ClassExpression,\n      CommaExpression = $__12.CommaExpression,\n      ComprehensionFor = $__12.ComprehensionFor,\n      ComprehensionIf = $__12.ComprehensionIf,\n      ComputedPropertyName = $__12.ComputedPropertyName,\n      ConditionalExpression = $__12.ConditionalExpression,\n      ContinueStatement = $__12.ContinueStatement,\n      CoverFormals = $__12.CoverFormals,\n      CoverInitializedName = $__12.CoverInitializedName,\n      DebuggerStatement = $__12.DebuggerStatement,\n      Annotation = $__12.Annotation,\n      DefaultClause = $__12.DefaultClause,\n      DoWhileStatement = $__12.DoWhileStatement,\n      EmptyStatement = $__12.EmptyStatement,\n      ExportDeclaration = $__12.ExportDeclaration,\n      ExportDefault = $__12.ExportDefault,\n      ExportSpecifier = $__12.ExportSpecifier,\n      ExportSpecifierSet = $__12.ExportSpecifierSet,\n      ExportStar = $__12.ExportStar,\n      ExpressionStatement = $__12.ExpressionStatement,\n      Finally = $__12.Finally,\n      ForInStatement = $__12.ForInStatement,\n      ForOfStatement = $__12.ForOfStatement,\n      ForStatement = $__12.ForStatement,\n      FormalParameter = $__12.FormalParameter,\n      FormalParameterList = $__12.FormalParameterList,\n      FunctionBody = $__12.FunctionBody,\n      FunctionDeclaration = $__12.FunctionDeclaration,\n      FunctionExpression = $__12.FunctionExpression,\n      GeneratorComprehension = $__12.GeneratorComprehension,\n      GetAccessor = $__12.GetAccessor,\n      IdentifierExpression = $__12.IdentifierExpression,\n      IfStatement = $__12.IfStatement,\n      ImportDeclaration = $__12.ImportDeclaration,\n      ImportSpecifier = $__12.ImportSpecifier,\n      ImportSpecifierSet = $__12.ImportSpecifierSet,\n      ImportedBinding = $__12.ImportedBinding,\n      LabelledStatement = $__12.LabelledStatement,\n      LiteralExpression = $__12.LiteralExpression,\n      LiteralPropertyName = $__12.LiteralPropertyName,\n      MemberExpression = $__12.MemberExpression,\n      MemberLookupExpression = $__12.MemberLookupExpression,\n      Module = $__12.Module,\n      ModuleDeclaration = $__12.ModuleDeclaration,\n      ModuleSpecifier = $__12.ModuleSpecifier,\n      NamedExport = $__12.NamedExport,\n      NewExpression = $__12.NewExpression,\n      ObjectLiteralExpression = $__12.ObjectLiteralExpression,\n      ObjectPattern = $__12.ObjectPattern,\n      ObjectPatternField = $__12.ObjectPatternField,\n      ParenExpression = $__12.ParenExpression,\n      PostfixExpression = $__12.PostfixExpression,\n      PredefinedType = $__12.PredefinedType,\n      Script = $__12.Script,\n      PropertyMethodAssignment = $__12.PropertyMethodAssignment,\n      PropertyNameAssignment = $__12.PropertyNameAssignment,\n      PropertyNameShorthand = $__12.PropertyNameShorthand,\n      PropertyVariableDeclaration = $__12.PropertyVariableDeclaration,\n      RestParameter = $__12.RestParameter,\n      ReturnStatement = $__12.ReturnStatement,\n      SetAccessor = $__12.SetAccessor,\n      SpreadExpression = $__12.SpreadExpression,\n      SpreadPatternElement = $__12.SpreadPatternElement,\n      SuperExpression = $__12.SuperExpression,\n      SwitchStatement = $__12.SwitchStatement,\n      SyntaxErrorTree = $__12.SyntaxErrorTree,\n      TemplateLiteralExpression = $__12.TemplateLiteralExpression,\n      TemplateLiteralPortion = $__12.TemplateLiteralPortion,\n      TemplateSubstitution = $__12.TemplateSubstitution,\n      ThisExpression = $__12.ThisExpression,\n      ThrowStatement = $__12.ThrowStatement,\n      TryStatement = $__12.TryStatement,\n      TypeArguments = $__12.TypeArguments,\n      TypeName = $__12.TypeName,\n      TypeReference = $__12.TypeReference,\n      UnaryExpression = $__12.UnaryExpression,\n      VariableDeclaration = $__12.VariableDeclaration,\n      VariableDeclarationList = $__12.VariableDeclarationList,\n      VariableStatement = $__12.VariableStatement,\n      WhileStatement = $__12.WhileStatement,\n      WithStatement = $__12.WithStatement,\n      YieldExpression = $__12.YieldExpression;\n  var Expression = {\n    NO_IN: 'NO_IN',\n    NORMAL: 'NORMAL'\n  };\n  var DestructuringInitializer = {\n    REQUIRED: 'REQUIRED',\n    OPTIONAL: 'OPTIONAL'\n  };\n  var Initializer = {\n    ALLOWED: 'ALLOWED',\n    REQUIRED: 'REQUIRED'\n  };\n  var ValidateObjectLiteral = function ValidateObjectLiteral(tree) {\n    this.errorToken = null;\n    $traceurRuntime.superConstructor($ValidateObjectLiteral).call(this, tree);\n  };\n  var $ValidateObjectLiteral = ValidateObjectLiteral;\n  ($traceurRuntime.createClass)(ValidateObjectLiteral, {visitCoverInitializedName: function(tree) {\n      this.errorToken = tree.equalToken;\n      this.found = true;\n    }}, {}, FindVisitor);\n  function containsInitializer(declarations) {\n    return declarations.some((function(v) {\n      return v.initializer;\n    }));\n  }\n  var Parser = function Parser(file) {\n    var errorReporter = arguments[1] !== (void 0) ? arguments[1] : new SyntaxErrorReporter();\n    var options = arguments[2] !== (void 0) ? arguments[2] : traceurOptions;\n    this.errorReporter_ = errorReporter;\n    this.scanner_ = new Scanner(errorReporter, file, this);\n    this.options_ = options;\n    this.allowYield = false;\n    this.allowAwait = false;\n    this.coverInitializedNameCount_ = 0;\n    this.strictMode_ = false;\n    this.annotations_ = [];\n  };\n  ($traceurRuntime.createClass)(Parser, {\n    parseScript: function() {\n      this.strictMode_ = false;\n      var start = this.getTreeStartLocation_();\n      var scriptItemList = this.parseStatementList_(true);\n      this.eat_(END_OF_FILE);\n      return new Script(this.getTreeLocation_(start), scriptItemList);\n    },\n    parseStatementList_: function(checkUseStrictDirective) {\n      var result = [];\n      var type;\n      while ((type = this.peekType_()) !== CLOSE_CURLY && type !== END_OF_FILE) {\n        var statement = this.parseStatementListItem_(type);\n        if (checkUseStrictDirective) {\n          if (!statement.isDirectivePrologue()) {\n            checkUseStrictDirective = false;\n          } else if (statement.isUseStrictDirective()) {\n            this.strictMode_ = true;\n            checkUseStrictDirective = false;\n          }\n        }\n        result.push(statement);\n      }\n      return result;\n    },\n    parseStatementListItem_: function(type) {\n      return this.parseStatementWithType_(type);\n    },\n    parseModule: function() {\n      var start = this.getTreeStartLocation_();\n      var scriptItemList = this.parseModuleItemList_();\n      this.eat_(END_OF_FILE);\n      return new Module(this.getTreeLocation_(start), scriptItemList, null);\n    },\n    parseModuleItemList_: function() {\n      this.strictMode_ = true;\n      var result = [];\n      var type;\n      while ((type = this.peekType_()) !== END_OF_FILE) {\n        var statement = this.parseModuleItem_(type);\n        result.push(statement);\n      }\n      return result;\n    },\n    parseModuleItem_: function(type) {\n      switch (type) {\n        case IMPORT:\n          return this.parseImportDeclaration_();\n        case EXPORT:\n          return this.parseExportDeclaration_();\n        case AT:\n          if (this.options_.annotations)\n            return this.parseAnnotatedDeclarations_(true);\n          break;\n      }\n      return this.parseStatementListItem_(type);\n    },\n    parseModuleSpecifier_: function() {\n      var start = this.getTreeStartLocation_();\n      var token = this.eat_(STRING);\n      return new ModuleSpecifier(this.getTreeLocation_(start), token);\n    },\n    parseImportDeclaration_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(IMPORT);\n      if (this.peek_(STAR)) {\n        this.eat_(STAR);\n        this.eatId_(AS);\n        var binding = this.parseImportedBinding_();\n        this.eatId_(FROM);\n        var moduleSpecifier = this.parseModuleSpecifier_();\n        this.eatPossibleImplicitSemiColon_();\n        return new ModuleDeclaration(this.getTreeLocation_(start), binding, moduleSpecifier);\n      }\n      var importClause = null;\n      if (this.peekImportClause_(this.peekType_())) {\n        importClause = this.parseImportClause_();\n        this.eatId_(FROM);\n      }\n      var moduleSpecifier = this.parseModuleSpecifier_();\n      this.eatPossibleImplicitSemiColon_();\n      return new ImportDeclaration(this.getTreeLocation_(start), importClause, moduleSpecifier);\n    },\n    peekImportClause_: function(type) {\n      return type === OPEN_CURLY || this.peekBindingIdentifier_(type);\n    },\n    parseImportClause_: function() {\n      var start = this.getTreeStartLocation_();\n      if (this.eatIf_(OPEN_CURLY)) {\n        var specifiers = [];\n        while (!this.peek_(CLOSE_CURLY) && !this.isAtEnd()) {\n          specifiers.push(this.parseImportSpecifier_());\n          if (!this.eatIf_(COMMA))\n            break;\n        }\n        this.eat_(CLOSE_CURLY);\n        return new ImportSpecifierSet(this.getTreeLocation_(start), specifiers);\n      }\n      return this.parseImportedBinding_();\n    },\n    parseImportedBinding_: function() {\n      var start = this.getTreeStartLocation_();\n      var binding = this.parseBindingIdentifier_();\n      return new ImportedBinding(this.getTreeLocation_(start), binding);\n    },\n    parseImportSpecifier_: function() {\n      var start = this.getTreeStartLocation_();\n      var token = this.peekToken_();\n      var isKeyword = token.isKeyword();\n      var binding;\n      var name = this.eatIdName_();\n      if (isKeyword || this.peekPredefinedString_(AS)) {\n        this.eatId_(AS);\n        binding = this.parseImportedBinding_();\n      } else {\n        binding = new ImportedBinding(name.location, new BindingIdentifier(name.location, name));\n        name = null;\n      }\n      return new ImportSpecifier(this.getTreeLocation_(start), binding, name);\n    },\n    parseExportDeclaration_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(EXPORT);\n      var exportTree;\n      var annotations = this.popAnnotations_();\n      var type = this.peekType_();\n      switch (type) {\n        case CONST:\n        case LET:\n        case VAR:\n          exportTree = this.parseVariableStatement_();\n          break;\n        case FUNCTION:\n          exportTree = this.parseFunctionDeclaration_();\n          break;\n        case CLASS:\n          exportTree = this.parseClassDeclaration_();\n          break;\n        case DEFAULT:\n          exportTree = this.parseExportDefault_();\n          break;\n        case OPEN_CURLY:\n        case STAR:\n          exportTree = this.parseNamedExport_();\n          break;\n        case IDENTIFIER:\n          if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) {\n            var asyncToken = this.eatId_();\n            exportTree = this.parseAsyncFunctionDeclaration_(asyncToken);\n            break;\n          }\n        default:\n          return this.parseUnexpectedToken_(type);\n      }\n      return new ExportDeclaration(this.getTreeLocation_(start), exportTree, annotations);\n    },\n    parseExportDefault_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DEFAULT);\n      var exportValue;\n      switch (this.peekType_()) {\n        case FUNCTION:\n          var tree = this.parseFunctionExpression_();\n          if (tree.name) {\n            tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);\n          }\n          exportValue = tree;\n          break;\n        case CLASS:\n          if (this.options_.classes) {\n            var tree = this.parseClassExpression_();\n            if (tree.name) {\n              tree = new ClassDeclaration(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations);\n            }\n            exportValue = tree;\n            break;\n          }\n        default:\n          exportValue = this.parseAssignmentExpression();\n          this.eatPossibleImplicitSemiColon_();\n      }\n      return new ExportDefault(this.getTreeLocation_(start), exportValue);\n    },\n    parseNamedExport_: function() {\n      var start = this.getTreeStartLocation_();\n      var specifierSet,\n          expression = null;\n      if (this.peek_(OPEN_CURLY)) {\n        specifierSet = this.parseExportSpecifierSet_();\n        if (this.peekPredefinedString_(FROM)) {\n          this.eatId_(FROM);\n          expression = this.parseModuleSpecifier_();\n        } else {\n          this.validateExportSpecifierSet_(specifierSet);\n        }\n      } else {\n        this.eat_(STAR);\n        specifierSet = new ExportStar(this.getTreeLocation_(start));\n        this.eatId_(FROM);\n        expression = this.parseModuleSpecifier_();\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new NamedExport(this.getTreeLocation_(start), expression, specifierSet);\n    },\n    parseExportSpecifierSet_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_CURLY);\n      var specifiers = [this.parseExportSpecifier_()];\n      while (this.eatIf_(COMMA)) {\n        if (this.peek_(CLOSE_CURLY))\n          break;\n        specifiers.push(this.parseExportSpecifier_());\n      }\n      this.eat_(CLOSE_CURLY);\n      return new ExportSpecifierSet(this.getTreeLocation_(start), specifiers);\n    },\n    parseExportSpecifier_: function() {\n      var start = this.getTreeStartLocation_();\n      var lhs = this.eatIdName_();\n      var rhs = null;\n      if (this.peekPredefinedString_(AS)) {\n        this.eatId_();\n        rhs = this.eatIdName_();\n      }\n      return new ExportSpecifier(this.getTreeLocation_(start), lhs, rhs);\n    },\n    validateExportSpecifierSet_: function(tree) {\n      for (var i = 0; i < tree.specifiers.length; i++) {\n        var specifier = tree.specifiers[i];\n        if (getKeywordType(specifier.lhs.value)) {\n          this.reportError_(specifier.lhs.location, (\"Unexpected token \" + specifier.lhs.value));\n        }\n      }\n    },\n    peekId_: function(type) {\n      if (type === IDENTIFIER)\n        return true;\n      if (this.strictMode_)\n        return false;\n      return this.peekToken_().isStrictKeyword();\n    },\n    peekIdName_: function(token) {\n      return token.type === IDENTIFIER || token.isKeyword();\n    },\n    parseClassShared_: function(constr) {\n      var start = this.getTreeStartLocation_();\n      var strictMode = this.strictMode_;\n      this.strictMode_ = true;\n      this.eat_(CLASS);\n      var name = null;\n      var annotations = [];\n      if (constr == ClassDeclaration || !this.peek_(EXTENDS) && !this.peek_(OPEN_CURLY)) {\n        name = this.parseBindingIdentifier_();\n        annotations = this.popAnnotations_();\n      }\n      var superClass = null;\n      if (this.eatIf_(EXTENDS)) {\n        superClass = this.parseAssignmentExpression();\n      }\n      this.eat_(OPEN_CURLY);\n      var elements = this.parseClassElements_();\n      this.eat_(CLOSE_CURLY);\n      this.strictMode_ = strictMode;\n      return new constr(this.getTreeLocation_(start), name, superClass, elements, annotations);\n    },\n    parseClassDeclaration_: function() {\n      return this.parseClassShared_(ClassDeclaration);\n    },\n    parseClassExpression_: function() {\n      return this.parseClassShared_(ClassExpression);\n    },\n    parseClassElements_: function() {\n      var result = [];\n      while (true) {\n        var type = this.peekType_();\n        if (type === SEMI_COLON) {\n          this.nextToken_();\n        } else if (this.peekClassElement_(this.peekType_())) {\n          result.push(this.parseClassElement_());\n        } else {\n          break;\n        }\n      }\n      return result;\n    },\n    peekClassElement_: function(type) {\n      return this.peekPropertyName_(type) || type === STAR && this.options_.generators || type === AT && this.options_.annotations;\n    },\n    parsePropertyName_: function() {\n      if (this.peek_(OPEN_SQUARE))\n        return this.parseComputedPropertyName_();\n      return this.parseLiteralPropertyName_();\n    },\n    parseLiteralPropertyName_: function() {\n      var start = this.getTreeStartLocation_();\n      var token = this.nextToken_();\n      return new LiteralPropertyName(this.getTreeLocation_(start), token);\n    },\n    parseComputedPropertyName_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_SQUARE);\n      var expression = this.parseAssignmentExpression();\n      this.eat_(CLOSE_SQUARE);\n      return new ComputedPropertyName(this.getTreeLocation_(start), expression);\n    },\n    parseStatement: function() {\n      return this.parseModuleItem_(this.peekType_());\n    },\n    parseStatements: function() {\n      return this.parseModuleItemList_();\n    },\n    parseStatement_: function() {\n      return this.parseStatementWithType_(this.peekType_());\n    },\n    parseStatementWithType_: function(type) {\n      switch (type) {\n        case RETURN:\n          return this.parseReturnStatement_();\n        case CONST:\n        case LET:\n          if (!this.options_.blockBinding)\n            break;\n        case VAR:\n          return this.parseVariableStatement_();\n        case IF:\n          return this.parseIfStatement_();\n        case FOR:\n          return this.parseForStatement_();\n        case BREAK:\n          return this.parseBreakStatement_();\n        case SWITCH:\n          return this.parseSwitchStatement_();\n        case THROW:\n          return this.parseThrowStatement_();\n        case WHILE:\n          return this.parseWhileStatement_();\n        case FUNCTION:\n          return this.parseFunctionDeclaration_();\n        case AT:\n          if (this.options_.annotations)\n            return this.parseAnnotatedDeclarations_(false);\n          break;\n        case CLASS:\n          if (this.options_.classes)\n            return this.parseClassDeclaration_();\n          break;\n        case CONTINUE:\n          return this.parseContinueStatement_();\n        case DEBUGGER:\n          return this.parseDebuggerStatement_();\n        case DO:\n          return this.parseDoWhileStatement_();\n        case OPEN_CURLY:\n          return this.parseBlock_();\n        case SEMI_COLON:\n          return this.parseEmptyStatement_();\n        case TRY:\n          return this.parseTryStatement_();\n        case WITH:\n          return this.parseWithStatement_();\n      }\n      return this.parseFallThroughStatement_();\n    },\n    parseFunctionDeclaration_: function() {\n      return this.parseFunction_(FunctionDeclaration);\n    },\n    parseFunctionExpression_: function() {\n      return this.parseFunction_(FunctionExpression);\n    },\n    parseAsyncFunctionDeclaration_: function(asyncToken) {\n      return this.parseAsyncFunction_(asyncToken, FunctionDeclaration);\n    },\n    parseAsyncFunctionExpression_: function(asyncToken) {\n      return this.parseAsyncFunction_(asyncToken, FunctionExpression);\n    },\n    parseAsyncFunction_: function(asyncToken, ctor) {\n      var start = asyncToken.location.start;\n      this.eat_(FUNCTION);\n      return this.parseFunction2_(start, asyncToken, ctor);\n    },\n    parseFunction_: function(ctor) {\n      var start = this.getTreeStartLocation_();\n      this.eat_(FUNCTION);\n      var functionKind = null;\n      if (this.options_.generators && this.peek_(STAR))\n        functionKind = this.eat_(STAR);\n      return this.parseFunction2_(start, functionKind, ctor);\n    },\n    parseFunction2_: function(start, functionKind, ctor) {\n      var name = null;\n      var annotations = [];\n      if (ctor === FunctionDeclaration || this.peekBindingIdentifier_(this.peekType_())) {\n        name = this.parseBindingIdentifier_();\n        annotations = this.popAnnotations_();\n      }\n      this.eat_(OPEN_PAREN);\n      var parameters = this.parseFormalParameters_();\n      this.eat_(CLOSE_PAREN);\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      var body = this.parseFunctionBody_(functionKind, parameters);\n      return new ctor(this.getTreeLocation_(start), name, functionKind, parameters, typeAnnotation, annotations, body);\n    },\n    peekRest_: function(type) {\n      return type === DOT_DOT_DOT && this.options_.restParameters;\n    },\n    parseFormalParameters_: function() {\n      var start = this.getTreeStartLocation_();\n      var formals = [];\n      this.pushAnnotations_();\n      var type = this.peekType_();\n      if (this.peekRest_(type)) {\n        formals.push(this.parseFormalRestParameter_());\n      } else {\n        if (this.peekFormalParameter_(this.peekType_()))\n          formals.push(this.parseFormalParameter_());\n        while (this.eatIf_(COMMA)) {\n          this.pushAnnotations_();\n          if (this.peekRest_(this.peekType_())) {\n            formals.push(this.parseFormalRestParameter_());\n            break;\n          }\n          formals.push(this.parseFormalParameter_());\n        }\n      }\n      return new FormalParameterList(this.getTreeLocation_(start), formals);\n    },\n    peekFormalParameter_: function(type) {\n      return this.peekBindingElement_(type);\n    },\n    parseFormalParameter_: function() {\n      var initializerAllowed = arguments[0];\n      var start = this.getTreeStartLocation_();\n      var binding = this.parseBindingElementBinding_();\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      var initializer = this.parseBindingElementInitializer_(initializerAllowed);\n      return new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, initializer), typeAnnotation, this.popAnnotations_());\n    },\n    parseFormalRestParameter_: function() {\n      var start = this.getTreeStartLocation_();\n      var restParameter = this.parseRestParameter_();\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      return new FormalParameter(this.getTreeLocation_(start), restParameter, typeAnnotation, this.popAnnotations_());\n    },\n    parseRestParameter_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DOT_DOT_DOT);\n      var id = this.parseBindingIdentifier_();\n      return new RestParameter(this.getTreeLocation_(start), id);\n    },\n    parseFunctionBody_: function(functionKind, params) {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_CURLY);\n      var allowYield = this.allowYield;\n      var allowAwait = this.allowAwait;\n      var strictMode = this.strictMode_;\n      this.allowYield = functionKind && functionKind.type === STAR;\n      this.allowAwait = functionKind && functionKind.type === IDENTIFIER && functionKind.value === ASYNC;\n      var result = this.parseStatementList_(!strictMode);\n      if (!strictMode && this.strictMode_ && params)\n        StrictParams.visit(params, this.errorReporter_);\n      this.strictMode_ = strictMode;\n      this.allowYield = allowYield;\n      this.allowAwait = allowAwait;\n      this.eat_(CLOSE_CURLY);\n      return new FunctionBody(this.getTreeLocation_(start), result);\n    },\n    parseSpreadExpression_: function() {\n      if (!this.options_.spread)\n        return this.parseUnexpectedToken_(DOT_DOT_DOT);\n      var start = this.getTreeStartLocation_();\n      this.eat_(DOT_DOT_DOT);\n      var operand = this.parseAssignmentExpression();\n      return new SpreadExpression(this.getTreeLocation_(start), operand);\n    },\n    parseBlock_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_CURLY);\n      var result = this.parseStatementList_(false);\n      this.eat_(CLOSE_CURLY);\n      return new Block(this.getTreeLocation_(start), result);\n    },\n    parseVariableStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      var declarations = this.parseVariableDeclarationList_();\n      this.checkInitializers_(declarations);\n      this.eatPossibleImplicitSemiColon_();\n      return new VariableStatement(this.getTreeLocation_(start), declarations);\n    },\n    parseVariableDeclarationList_: function() {\n      var expressionIn = arguments[0] !== (void 0) ? arguments[0] : Expression.NORMAL;\n      var initializer = arguments[1] !== (void 0) ? arguments[1] : DestructuringInitializer.REQUIRED;\n      var type = this.peekType_();\n      switch (type) {\n        case CONST:\n        case LET:\n          if (!this.options_.blockBinding)\n            debugger;\n        case VAR:\n          this.nextToken_();\n          break;\n        default:\n          throw Error('unreachable');\n      }\n      var start = this.getTreeStartLocation_();\n      var declarations = [];\n      declarations.push(this.parseVariableDeclaration_(type, expressionIn, initializer));\n      while (this.eatIf_(COMMA)) {\n        declarations.push(this.parseVariableDeclaration_(type, expressionIn, initializer));\n      }\n      return new VariableDeclarationList(this.getTreeLocation_(start), type, declarations);\n    },\n    parseVariableDeclaration_: function(binding, expressionIn) {\n      var initializer = arguments[2] !== (void 0) ? arguments[2] : DestructuringInitializer.REQUIRED;\n      var initRequired = initializer !== DestructuringInitializer.OPTIONAL;\n      var start = this.getTreeStartLocation_();\n      var lvalue;\n      var typeAnnotation;\n      if (this.peekPattern_(this.peekType_())) {\n        lvalue = this.parseBindingPattern_();\n        typeAnnotation = null;\n      } else {\n        lvalue = this.parseBindingIdentifier_();\n        typeAnnotation = this.parseTypeAnnotationOpt_();\n      }\n      var initializer = null;\n      if (this.peek_(EQUAL))\n        initializer = this.parseInitializer_(expressionIn);\n      else if (lvalue.isPattern() && initRequired)\n        this.reportError_('destructuring must have an initializer');\n      return new VariableDeclaration(this.getTreeLocation_(start), lvalue, typeAnnotation, initializer);\n    },\n    parseInitializer_: function(expressionIn) {\n      this.eat_(EQUAL);\n      return this.parseAssignmentExpression(expressionIn);\n    },\n    parseInitializerOpt_: function(expressionIn) {\n      if (this.eatIf_(EQUAL))\n        return this.parseAssignmentExpression(expressionIn);\n      return null;\n    },\n    parseEmptyStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(SEMI_COLON);\n      return new EmptyStatement(this.getTreeLocation_(start));\n    },\n    parseFallThroughStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      var expression;\n      if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC) && this.peek_(FUNCTION, 1)) {\n        var asyncToken = this.eatId_();\n        var functionToken = this.peekTokenNoLineTerminator_();\n        if (functionToken !== null)\n          return this.parseAsyncFunctionDeclaration_(asyncToken);\n        expression = new IdentifierExpression(this.getTreeLocation_(start), asyncToken);\n      } else {\n        expression = this.parseExpression();\n      }\n      if (expression.type === IDENTIFIER_EXPRESSION) {\n        if (this.eatIf_(COLON)) {\n          var nameToken = expression.identifierToken;\n          var statement = this.parseStatement_();\n          return new LabelledStatement(this.getTreeLocation_(start), nameToken, statement);\n        }\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new ExpressionStatement(this.getTreeLocation_(start), expression);\n    },\n    parseIfStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(IF);\n      this.eat_(OPEN_PAREN);\n      var condition = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      var ifClause = this.parseStatement_();\n      var elseClause = null;\n      if (this.eatIf_(ELSE)) {\n        elseClause = this.parseStatement_();\n      }\n      return new IfStatement(this.getTreeLocation_(start), condition, ifClause, elseClause);\n    },\n    parseDoWhileStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DO);\n      var body = this.parseStatement_();\n      this.eat_(WHILE);\n      this.eat_(OPEN_PAREN);\n      var condition = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      this.eatPossibleImplicitSemiColon_();\n      return new DoWhileStatement(this.getTreeLocation_(start), body, condition);\n    },\n    parseWhileStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(WHILE);\n      this.eat_(OPEN_PAREN);\n      var condition = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseStatement_();\n      return new WhileStatement(this.getTreeLocation_(start), condition, body);\n    },\n    parseForStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(FOR);\n      this.eat_(OPEN_PAREN);\n      var type = this.peekType_();\n      if (this.peekVariableDeclarationList_(type)) {\n        var variables = this.parseVariableDeclarationList_(Expression.NO_IN, DestructuringInitializer.OPTIONAL);\n        var declarations = variables.declarations;\n        if (declarations.length > 1 || containsInitializer(declarations)) {\n          return this.parseForStatement2_(start, variables);\n        }\n        type = this.peekType_();\n        if (type === IN) {\n          return this.parseForInStatement_(start, variables);\n        } else if (this.peekOf_(type)) {\n          return this.parseForOfStatement_(start, variables);\n        } else {\n          this.checkInitializers_(variables);\n          return this.parseForStatement2_(start, variables);\n        }\n      }\n      if (type === SEMI_COLON) {\n        return this.parseForStatement2_(start, null);\n      }\n      var coverInitializedNameCount = this.coverInitializedNameCount_;\n      var initializer = this.parseExpressionAllowPattern_(Expression.NO_IN);\n      type = this.peekType_();\n      if (initializer.isLeftHandSideExpression() && (type === IN || this.peekOf_(type))) {\n        initializer = this.transformLeftHandSideExpression_(initializer);\n        if (this.peekOf_(type))\n          return this.parseForOfStatement_(start, initializer);\n        return this.parseForInStatement_(start, initializer);\n      }\n      this.ensureNoCoverInitializedNames_(initializer, coverInitializedNameCount);\n      return this.parseForStatement2_(start, initializer);\n    },\n    peekOf_: function(type) {\n      return type === IDENTIFIER && this.options_.forOf && this.peekToken_().value === OF;\n    },\n    parseForOfStatement_: function(start, initializer) {\n      this.eatId_();\n      var collection = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseStatement_();\n      return new ForOfStatement(this.getTreeLocation_(start), initializer, collection, body);\n    },\n    checkInitializers_: function(variables) {\n      if (this.options_.blockBinding && variables.declarationType == CONST) {\n        var type = variables.declarationType;\n        for (var i = 0; i < variables.declarations.length; i++) {\n          if (!this.checkInitializer_(type, variables.declarations[i])) {\n            break;\n          }\n        }\n      }\n    },\n    checkInitializer_: function(type, declaration) {\n      if (this.options_.blockBinding && type == CONST && declaration.initializer == null) {\n        this.reportError_('const variables must have an initializer');\n        return false;\n      }\n      return true;\n    },\n    peekVariableDeclarationList_: function(type) {\n      switch (type) {\n        case VAR:\n          return true;\n        case CONST:\n        case LET:\n          return this.options_.blockBinding;\n        default:\n          return false;\n      }\n    },\n    parseForStatement2_: function(start, initializer) {\n      this.eat_(SEMI_COLON);\n      var condition = null;\n      if (!this.peek_(SEMI_COLON)) {\n        condition = this.parseExpression();\n      }\n      this.eat_(SEMI_COLON);\n      var increment = null;\n      if (!this.peek_(CLOSE_PAREN)) {\n        increment = this.parseExpression();\n      }\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseStatement_();\n      return new ForStatement(this.getTreeLocation_(start), initializer, condition, increment, body);\n    },\n    parseForInStatement_: function(start, initializer) {\n      this.eat_(IN);\n      var collection = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseStatement_();\n      return new ForInStatement(this.getTreeLocation_(start), initializer, collection, body);\n    },\n    parseContinueStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(CONTINUE);\n      var name = null;\n      if (!this.peekImplicitSemiColon_(this.peekType_())) {\n        name = this.eatIdOpt_();\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new ContinueStatement(this.getTreeLocation_(start), name);\n    },\n    parseBreakStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(BREAK);\n      var name = null;\n      if (!this.peekImplicitSemiColon_(this.peekType_())) {\n        name = this.eatIdOpt_();\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new BreakStatement(this.getTreeLocation_(start), name);\n    },\n    parseReturnStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(RETURN);\n      var expression = null;\n      if (!this.peekImplicitSemiColon_(this.peekType_())) {\n        expression = this.parseExpression();\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new ReturnStatement(this.getTreeLocation_(start), expression);\n    },\n    parseYieldExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(YIELD);\n      var expression = null;\n      var isYieldFor = false;\n      if (!this.peekImplicitSemiColon_(this.peekType_())) {\n        isYieldFor = this.eatIf_(STAR);\n        expression = this.parseAssignmentExpression();\n      }\n      return new YieldExpression(this.getTreeLocation_(start), expression, isYieldFor);\n    },\n    parseWithStatement_: function() {\n      if (this.strictMode_)\n        this.reportError_('Strict mode code may not include a with statement');\n      var start = this.getTreeStartLocation_();\n      this.eat_(WITH);\n      this.eat_(OPEN_PAREN);\n      var expression = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseStatement_();\n      return new WithStatement(this.getTreeLocation_(start), expression, body);\n    },\n    parseSwitchStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(SWITCH);\n      this.eat_(OPEN_PAREN);\n      var expression = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      this.eat_(OPEN_CURLY);\n      var caseClauses = this.parseCaseClauses_();\n      this.eat_(CLOSE_CURLY);\n      return new SwitchStatement(this.getTreeLocation_(start), expression, caseClauses);\n    },\n    parseCaseClauses_: function() {\n      var foundDefaultClause = false;\n      var result = [];\n      while (true) {\n        var start = this.getTreeStartLocation_();\n        switch (this.peekType_()) {\n          case CASE:\n            this.nextToken_();\n            var expression = this.parseExpression();\n            this.eat_(COLON);\n            var statements = this.parseCaseStatementsOpt_();\n            result.push(new CaseClause(this.getTreeLocation_(start), expression, statements));\n            break;\n          case DEFAULT:\n            if (foundDefaultClause) {\n              this.reportError_('Switch statements may have at most one default clause');\n            } else {\n              foundDefaultClause = true;\n            }\n            this.nextToken_();\n            this.eat_(COLON);\n            result.push(new DefaultClause(this.getTreeLocation_(start), this.parseCaseStatementsOpt_()));\n            break;\n          default:\n            return result;\n        }\n      }\n    },\n    parseCaseStatementsOpt_: function() {\n      var result = [];\n      var type;\n      while (true) {\n        switch (type = this.peekType_()) {\n          case CASE:\n          case DEFAULT:\n          case CLOSE_CURLY:\n          case END_OF_FILE:\n            return result;\n        }\n        result.push(this.parseStatementWithType_(type));\n      }\n    },\n    parseThrowStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(THROW);\n      var value = null;\n      if (!this.peekImplicitSemiColon_(this.peekType_())) {\n        value = this.parseExpression();\n      }\n      this.eatPossibleImplicitSemiColon_();\n      return new ThrowStatement(this.getTreeLocation_(start), value);\n    },\n    parseTryStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(TRY);\n      var body = this.parseBlock_();\n      var catchBlock = null;\n      if (this.peek_(CATCH)) {\n        catchBlock = this.parseCatch_();\n      }\n      var finallyBlock = null;\n      if (this.peek_(FINALLY)) {\n        finallyBlock = this.parseFinallyBlock_();\n      }\n      if (catchBlock == null && finallyBlock == null) {\n        this.reportError_(\"'catch' or 'finally' expected.\");\n      }\n      return new TryStatement(this.getTreeLocation_(start), body, catchBlock, finallyBlock);\n    },\n    parseCatch_: function() {\n      var start = this.getTreeStartLocation_();\n      var catchBlock;\n      this.eat_(CATCH);\n      this.eat_(OPEN_PAREN);\n      var binding;\n      if (this.peekPattern_(this.peekType_()))\n        binding = this.parseBindingPattern_();\n      else\n        binding = this.parseBindingIdentifier_();\n      this.eat_(CLOSE_PAREN);\n      var catchBody = this.parseBlock_();\n      catchBlock = new Catch(this.getTreeLocation_(start), binding, catchBody);\n      return catchBlock;\n    },\n    parseFinallyBlock_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(FINALLY);\n      var finallyBlock = this.parseBlock_();\n      return new Finally(this.getTreeLocation_(start), finallyBlock);\n    },\n    parseDebuggerStatement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DEBUGGER);\n      this.eatPossibleImplicitSemiColon_();\n      return new DebuggerStatement(this.getTreeLocation_(start));\n    },\n    parsePrimaryExpression_: function() {\n      switch (this.peekType_()) {\n        case CLASS:\n          return this.options_.classes ? this.parseClassExpression_() : this.parseSyntaxError_('Unexpected reserved word');\n        case THIS:\n          return this.parseThisExpression_();\n        case IDENTIFIER:\n          var identifier = this.parseIdentifierExpression_();\n          if (this.options_.asyncFunctions && identifier.identifierToken.value === ASYNC) {\n            var token = this.peekTokenNoLineTerminator_();\n            if (token && token.type === FUNCTION) {\n              var asyncToken = identifier.identifierToken;\n              return this.parseAsyncFunctionExpression_(asyncToken);\n            }\n          }\n          return identifier;\n        case NUMBER:\n        case STRING:\n        case TRUE:\n        case FALSE:\n        case NULL:\n          return this.parseLiteralExpression_();\n        case OPEN_SQUARE:\n          return this.parseArrayLiteral_();\n        case OPEN_CURLY:\n          return this.parseObjectLiteral_();\n        case OPEN_PAREN:\n          return this.parsePrimaryExpressionStartingWithParen_();\n        case SLASH:\n        case SLASH_EQUAL:\n          return this.parseRegularExpressionLiteral_();\n        case NO_SUBSTITUTION_TEMPLATE:\n        case TEMPLATE_HEAD:\n          return this.parseTemplateLiteral_(null);\n        case IMPLEMENTS:\n        case INTERFACE:\n        case PACKAGE:\n        case PRIVATE:\n        case PROTECTED:\n        case PUBLIC:\n        case STATIC:\n        case YIELD:\n          if (!this.strictMode_)\n            return this.parseIdentifierExpression_();\n          this.reportReservedIdentifier_(this.nextToken_());\n        case END_OF_FILE:\n          return this.parseSyntaxError_('Unexpected end of input');\n        default:\n          return this.parseUnexpectedToken_(this.peekToken_());\n      }\n    },\n    parseSuperExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(SUPER);\n      return new SuperExpression(this.getTreeLocation_(start));\n    },\n    parseThisExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(THIS);\n      return new ThisExpression(this.getTreeLocation_(start));\n    },\n    peekBindingIdentifier_: function(type) {\n      return this.peekId_(type);\n    },\n    parseBindingIdentifier_: function() {\n      var start = this.getTreeStartLocation_();\n      var identifier = this.eatId_();\n      return new BindingIdentifier(this.getTreeLocation_(start), identifier);\n    },\n    parseIdentifierExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var identifier = this.eatId_();\n      return new IdentifierExpression(this.getTreeLocation_(start), identifier);\n    },\n    parseIdentifierNameExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var identifier = this.eatIdName_();\n      return new IdentifierExpression(this.getTreeLocation_(start), identifier);\n    },\n    parseLiteralExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var literal = this.nextLiteralToken_();\n      return new LiteralExpression(this.getTreeLocation_(start), literal);\n    },\n    nextLiteralToken_: function() {\n      return this.nextToken_();\n    },\n    parseRegularExpressionLiteral_: function() {\n      var start = this.getTreeStartLocation_();\n      var literal = this.nextRegularExpressionLiteralToken_();\n      return new LiteralExpression(this.getTreeLocation_(start), literal);\n    },\n    peekSpread_: function(type) {\n      return type === DOT_DOT_DOT && this.options_.spread;\n    },\n    parseArrayLiteral_: function() {\n      var start = this.getTreeStartLocation_();\n      var expression;\n      var elements = [];\n      this.eat_(OPEN_SQUARE);\n      var type = this.peekType_();\n      if (type === FOR && this.options_.arrayComprehension)\n        return this.parseArrayComprehension_(start);\n      while (true) {\n        type = this.peekType_();\n        if (type === COMMA) {\n          expression = null;\n        } else if (this.peekSpread_(type)) {\n          expression = this.parseSpreadExpression_();\n        } else if (this.peekAssignmentExpression_(type)) {\n          expression = this.parseAssignmentExpression();\n        } else {\n          break;\n        }\n        elements.push(expression);\n        type = this.peekType_();\n        if (type !== CLOSE_SQUARE)\n          this.eat_(COMMA);\n      }\n      this.eat_(CLOSE_SQUARE);\n      return new ArrayLiteralExpression(this.getTreeLocation_(start), elements);\n    },\n    parseArrayComprehension_: function(start) {\n      var list = this.parseComprehensionList_();\n      var expression = this.parseAssignmentExpression();\n      this.eat_(CLOSE_SQUARE);\n      return new ArrayComprehension(this.getTreeLocation_(start), list, expression);\n    },\n    parseComprehensionList_: function() {\n      var list = [this.parseComprehensionFor_()];\n      while (true) {\n        var type = this.peekType_();\n        switch (type) {\n          case FOR:\n            list.push(this.parseComprehensionFor_());\n            break;\n          case IF:\n            list.push(this.parseComprehensionIf_());\n            break;\n          default:\n            return list;\n        }\n      }\n    },\n    parseComprehensionFor_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(FOR);\n      this.eat_(OPEN_PAREN);\n      var left = this.parseForBinding_();\n      this.eatId_(OF);\n      var iterator = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      return new ComprehensionFor(this.getTreeLocation_(start), left, iterator);\n    },\n    parseComprehensionIf_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(IF);\n      this.eat_(OPEN_PAREN);\n      var expression = this.parseExpression();\n      this.eat_(CLOSE_PAREN);\n      return new ComprehensionIf(this.getTreeLocation_(start), expression);\n    },\n    parseObjectLiteral_: function() {\n      var start = this.getTreeStartLocation_();\n      var result = [];\n      this.eat_(OPEN_CURLY);\n      while (this.peekPropertyDefinition_(this.peekType_())) {\n        var propertyDefinition = this.parsePropertyDefinition();\n        result.push(propertyDefinition);\n        if (!this.eatIf_(COMMA))\n          break;\n      }\n      this.eat_(CLOSE_CURLY);\n      return new ObjectLiteralExpression(this.getTreeLocation_(start), result);\n    },\n    parsePropertyDefinition: function() {\n      var start = this.getTreeStartLocation_();\n      var functionKind = null;\n      var isStatic = false;\n      if (this.options_.generators && this.options_.propertyMethods && this.peek_(STAR)) {\n        return this.parseGeneratorMethod_(start, isStatic, []);\n      }\n      var token = this.peekToken_();\n      var name = this.parsePropertyName_();\n      if (this.options_.propertyMethods && this.peek_(OPEN_PAREN))\n        return this.parseMethod_(start, isStatic, functionKind, name, []);\n      if (this.eatIf_(COLON)) {\n        var value = this.parseAssignmentExpression();\n        return new PropertyNameAssignment(this.getTreeLocation_(start), name, value);\n      }\n      var type = this.peekType_();\n      if (name.type === LITERAL_PROPERTY_NAME) {\n        var nameLiteral = name.literalToken;\n        if (nameLiteral.value === GET && this.peekPropertyName_(type)) {\n          return this.parseGetAccessor_(start, isStatic, []);\n        }\n        if (nameLiteral.value === SET && this.peekPropertyName_(type)) {\n          return this.parseSetAccessor_(start, isStatic, []);\n        }\n        if (this.options_.asyncFunctions && nameLiteral.value === ASYNC && this.peekPropertyName_(type)) {\n          var async = nameLiteral;\n          var name = this.parsePropertyName_();\n          return this.parseMethod_(start, isStatic, async, name, []);\n        }\n        if (this.options_.propertyNameShorthand && nameLiteral.type === IDENTIFIER || !this.strictMode_ && nameLiteral.type === YIELD) {\n          if (this.peek_(EQUAL)) {\n            token = this.nextToken_();\n            var coverInitializedNameCount = this.coverInitializedNameCount_;\n            var expr = this.parseAssignmentExpression();\n            this.ensureNoCoverInitializedNames_(expr, coverInitializedNameCount);\n            this.coverInitializedNameCount_++;\n            return new CoverInitializedName(this.getTreeLocation_(start), nameLiteral, token, expr);\n          }\n          if (nameLiteral.type === YIELD)\n            nameLiteral = new IdentifierToken(nameLiteral.location, YIELD);\n          return new PropertyNameShorthand(this.getTreeLocation_(start), nameLiteral);\n        }\n        if (this.strictMode_ && nameLiteral.isStrictKeyword())\n          this.reportReservedIdentifier_(nameLiteral);\n      }\n      if (name.type === COMPUTED_PROPERTY_NAME)\n        token = this.peekToken_();\n      return this.parseUnexpectedToken_(token);\n    },\n    parseClassElement_: function() {\n      var start = this.getTreeStartLocation_();\n      var annotations = this.parseAnnotations_();\n      var type = this.peekType_();\n      var isStatic = false,\n          functionKind = null;\n      switch (type) {\n        case STATIC:\n          var staticToken = this.nextToken_();\n          type = this.peekType_();\n          switch (type) {\n            case OPEN_PAREN:\n              var name = new LiteralPropertyName(start, staticToken);\n              return this.parseMethod_(start, isStatic, functionKind, name, annotations);\n            default:\n              isStatic = true;\n              if (type === STAR && this.options_.generators)\n                return this.parseGeneratorMethod_(start, true, annotations);\n              return this.parseClassElement2_(start, isStatic, annotations);\n          }\n          break;\n        case STAR:\n          return this.parseGeneratorMethod_(start, isStatic, annotations);\n        default:\n          return this.parseClassElement2_(start, isStatic, annotations);\n      }\n    },\n    parseGeneratorMethod_: function(start, isStatic, annotations) {\n      var functionKind = this.eat_(STAR);\n      var name = this.parsePropertyName_();\n      return this.parseMethod_(start, isStatic, functionKind, name, annotations);\n    },\n    parseMethod_: function(start, isStatic, functionKind, name, annotations) {\n      this.eat_(OPEN_PAREN);\n      var parameterList = this.parseFormalParameters_();\n      this.eat_(CLOSE_PAREN);\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      var body = this.parseFunctionBody_(functionKind, parameterList);\n      return new PropertyMethodAssignment(this.getTreeLocation_(start), isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body);\n    },\n    parsePropertyVariableDeclaration_: function(start, isStatic, name, annotations) {\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      this.eat_(SEMI_COLON);\n      return new PropertyVariableDeclaration(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations);\n    },\n    parseClassElement2_: function(start, isStatic, annotations) {\n      var functionKind = null;\n      var name = this.parsePropertyName_();\n      var type = this.peekType_();\n      if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === GET && this.peekPropertyName_(type)) {\n        return this.parseGetAccessor_(start, isStatic, annotations);\n      }\n      if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === SET && this.peekPropertyName_(type)) {\n        return this.parseSetAccessor_(start, isStatic, annotations);\n      }\n      if (this.options_.asyncFunctions && name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === ASYNC && this.peekPropertyName_(type)) {\n        var async = name.literalToken;\n        var name = this.parsePropertyName_();\n        return this.parseMethod_(start, isStatic, async, name, annotations);\n      }\n      if (!this.options_.memberVariables || type === OPEN_PAREN) {\n        return this.parseMethod_(start, isStatic, functionKind, name, annotations);\n      }\n      return this.parsePropertyVariableDeclaration_(start, isStatic, name, annotations);\n    },\n    parseGetAccessor_: function(start, isStatic, annotations) {\n      var functionKind = null;\n      var name = this.parsePropertyName_();\n      this.eat_(OPEN_PAREN);\n      this.eat_(CLOSE_PAREN);\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      var body = this.parseFunctionBody_(functionKind, null);\n      return new GetAccessor(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations, body);\n    },\n    parseSetAccessor_: function(start, isStatic, annotations) {\n      var functionKind = null;\n      var name = this.parsePropertyName_();\n      this.eat_(OPEN_PAREN);\n      var parameterList = this.parsePropertySetParameterList_();\n      this.eat_(CLOSE_PAREN);\n      var body = this.parseFunctionBody_(functionKind, parameterList);\n      return new SetAccessor(this.getTreeLocation_(start), isStatic, name, parameterList, annotations, body);\n    },\n    peekPropertyDefinition_: function(type) {\n      return this.peekPropertyName_(type) || type == STAR && this.options_.propertyMethods && this.options_.generators;\n    },\n    peekPropertyName_: function(type) {\n      switch (type) {\n        case IDENTIFIER:\n        case STRING:\n        case NUMBER:\n          return true;\n        case OPEN_SQUARE:\n          return this.options_.computedPropertyNames;\n        default:\n          return this.peekToken_().isKeyword();\n      }\n    },\n    peekPredefinedString_: function(string) {\n      var token = this.peekToken_();\n      return token.type === IDENTIFIER && token.value === string;\n    },\n    parsePropertySetParameterList_: function() {\n      var start = this.getTreeStartLocation_();\n      var binding;\n      this.pushAnnotations_();\n      if (this.peekPattern_(this.peekType_()))\n        binding = this.parseBindingPattern_();\n      else\n        binding = this.parseBindingIdentifier_();\n      var typeAnnotation = this.parseTypeAnnotationOpt_();\n      var parameter = new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, null), typeAnnotation, this.popAnnotations_());\n      return new FormalParameterList(parameter.location, [parameter]);\n    },\n    parsePrimaryExpressionStartingWithParen_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_PAREN);\n      if (this.peek_(FOR) && this.options_.generatorComprehension)\n        return this.parseGeneratorComprehension_(start);\n      return this.parseCoverFormals_(start);\n    },\n    parseSyntaxError_: function(message) {\n      var start = this.getTreeStartLocation_();\n      this.reportError_(message);\n      var token = this.nextToken_();\n      return new SyntaxErrorTree(this.getTreeLocation_(start), token, message);\n    },\n    parseUnexpectedToken_: function(name) {\n      return this.parseSyntaxError_((\"Unexpected token \" + name));\n    },\n    peekExpression_: function(type) {\n      switch (type) {\n        case NO_SUBSTITUTION_TEMPLATE:\n        case TEMPLATE_HEAD:\n          return this.options_.templateLiterals;\n        case BANG:\n        case CLASS:\n        case DELETE:\n        case FALSE:\n        case FUNCTION:\n        case IDENTIFIER:\n        case MINUS:\n        case MINUS_MINUS:\n        case NEW:\n        case NULL:\n        case NUMBER:\n        case OPEN_CURLY:\n        case OPEN_PAREN:\n        case OPEN_SQUARE:\n        case PLUS:\n        case PLUS_PLUS:\n        case SLASH:\n        case SLASH_EQUAL:\n        case STRING:\n        case SUPER:\n        case THIS:\n        case TILDE:\n        case TRUE:\n        case TYPEOF:\n        case VOID:\n        case YIELD:\n          return true;\n        default:\n          return false;\n      }\n    },\n    parseExpression: function() {\n      var expressionIn = arguments[0] !== (void 0) ? arguments[0] : Expression.IN;\n      var coverInitializedNameCount = this.coverInitializedNameCount_;\n      var expression = this.parseExpressionAllowPattern_(expressionIn);\n      this.ensureNoCoverInitializedNames_(expression, coverInitializedNameCount);\n      return expression;\n    },\n    parseExpressionAllowPattern_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var expression = this.parseAssignmentExpression(expressionIn);\n      if (this.peek_(COMMA)) {\n        var expressions = [expression];\n        while (this.eatIf_(COMMA)) {\n          expressions.push(this.parseAssignmentExpression(expressionIn));\n        }\n        return new CommaExpression(this.getTreeLocation_(start), expressions);\n      }\n      return expression;\n    },\n    peekAssignmentExpression_: function(type) {\n      return this.peekExpression_(type);\n    },\n    parseAssignmentExpression: function() {\n      var expressionIn = arguments[0] !== (void 0) ? arguments[0] : Expression.NORMAL;\n      if (this.allowYield && this.peek_(YIELD))\n        return this.parseYieldExpression_();\n      var start = this.getTreeStartLocation_();\n      var validAsyncParen = false;\n      if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) {\n        var asyncToken = this.peekToken_();\n        var maybeOpenParenToken = this.peekToken_(1);\n        validAsyncParen = maybeOpenParenToken.type === OPEN_PAREN && asyncToken.location.end.line === maybeOpenParenToken.location.start.line;\n      }\n      var left = this.parseConditional_(expressionIn);\n      var type = this.peekType_();\n      if (this.options_.asyncFunctions && left.type === IDENTIFIER_EXPRESSION && left.identifierToken.value === ASYNC && type === IDENTIFIER) {\n        if (this.peekTokenNoLineTerminator_() !== null) {\n          var bindingIdentifier = this.parseBindingIdentifier_();\n          var asyncToken = left.IdentifierToken;\n          return this.parseArrowFunction_(start, bindingIdentifier, asyncToken);\n        }\n      }\n      if (type === ARROW) {\n        if (left.type === COVER_FORMALS || left.type === IDENTIFIER_EXPRESSION)\n          return this.parseArrowFunction_(start, left, null);\n        if (validAsyncParen && left.type === CALL_EXPRESSION) {\n          var arrowToken = this.peekTokenNoLineTerminator_();\n          if (arrowToken !== null) {\n            var asyncToken = left.operand.identifierToken;\n            return this.parseArrowFunction_(start, left.args, asyncToken);\n          }\n        }\n      }\n      left = this.coverFormalsToParenExpression_(left);\n      if (this.peekAssignmentOperator_(type)) {\n        if (type === EQUAL)\n          left = this.transformLeftHandSideExpression_(left);\n        if (!left.isLeftHandSideExpression() && !left.isPattern()) {\n          this.reportError_('Left hand side of assignment must be new, call, member, function, primary expressions or destructuring pattern');\n        }\n        var operator = this.nextToken_();\n        var right = this.parseAssignmentExpression(expressionIn);\n        return new BinaryExpression(this.getTreeLocation_(start), left, operator, right);\n      }\n      return left;\n    },\n    transformLeftHandSideExpression_: function(tree) {\n      switch (tree.type) {\n        case ARRAY_LITERAL_EXPRESSION:\n        case OBJECT_LITERAL_EXPRESSION:\n          this.scanner_.index = tree.location.start.offset;\n          return this.parseAssignmentPattern_();\n      }\n      return tree;\n    },\n    peekAssignmentOperator_: function(type) {\n      return isAssignmentOperator(type);\n    },\n    parseConditional_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var condition = this.parseLogicalOR_(expressionIn);\n      if (this.eatIf_(QUESTION)) {\n        condition = this.toPrimaryExpression_(condition);\n        var left = this.parseAssignmentExpression();\n        this.eat_(COLON);\n        var right = this.parseAssignmentExpression(expressionIn);\n        return new ConditionalExpression(this.getTreeLocation_(start), condition, left, right);\n      }\n      return condition;\n    },\n    newBinaryExpression_: function(start, left, operator, right) {\n      left = this.toPrimaryExpression_(left);\n      right = this.toPrimaryExpression_(right);\n      return new BinaryExpression(this.getTreeLocation_(start), left, operator, right);\n    },\n    parseLogicalOR_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseLogicalAND_(expressionIn);\n      var operator;\n      while (operator = this.eatOpt_(OR)) {\n        var right = this.parseLogicalAND_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseLogicalAND_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseBitwiseOR_(expressionIn);\n      var operator;\n      while (operator = this.eatOpt_(AND)) {\n        var right = this.parseBitwiseOR_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseBitwiseOR_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseBitwiseXOR_(expressionIn);\n      var operator;\n      while (operator = this.eatOpt_(BAR)) {\n        var right = this.parseBitwiseXOR_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseBitwiseXOR_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseBitwiseAND_(expressionIn);\n      var operator;\n      while (operator = this.eatOpt_(CARET)) {\n        var right = this.parseBitwiseAND_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseBitwiseAND_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseEquality_(expressionIn);\n      var operator;\n      while (operator = this.eatOpt_(AMPERSAND)) {\n        var right = this.parseEquality_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseEquality_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseRelational_(expressionIn);\n      while (this.peekEqualityOperator_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var right = this.parseRelational_(expressionIn);\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    peekEqualityOperator_: function(type) {\n      switch (type) {\n        case EQUAL_EQUAL:\n        case NOT_EQUAL:\n        case EQUAL_EQUAL_EQUAL:\n        case NOT_EQUAL_EQUAL:\n          return true;\n      }\n      return false;\n    },\n    parseRelational_: function(expressionIn) {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseShiftExpression_();\n      while (this.peekRelationalOperator_(expressionIn)) {\n        var operator = this.nextToken_();\n        var right = this.parseShiftExpression_();\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    peekRelationalOperator_: function(expressionIn) {\n      switch (this.peekType_()) {\n        case OPEN_ANGLE:\n        case CLOSE_ANGLE:\n        case GREATER_EQUAL:\n        case LESS_EQUAL:\n        case INSTANCEOF:\n          return true;\n        case IN:\n          return expressionIn == Expression.NORMAL;\n        default:\n          return false;\n      }\n    },\n    parseShiftExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseAdditiveExpression_();\n      while (this.peekShiftOperator_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var right = this.parseAdditiveExpression_();\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    peekShiftOperator_: function(type) {\n      switch (type) {\n        case LEFT_SHIFT:\n        case RIGHT_SHIFT:\n        case UNSIGNED_RIGHT_SHIFT:\n          return true;\n        default:\n          return false;\n      }\n    },\n    parseAdditiveExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseMultiplicativeExpression_();\n      while (this.peekAdditiveOperator_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var right = this.parseMultiplicativeExpression_();\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    peekAdditiveOperator_: function(type) {\n      switch (type) {\n        case PLUS:\n        case MINUS:\n          return true;\n        default:\n          return false;\n      }\n    },\n    parseMultiplicativeExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseExponentiationExpression_();\n      while (this.peekMultiplicativeOperator_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var right = this.parseExponentiationExpression_();\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    parseExponentiationExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var left = this.parseUnaryExpression_();\n      while (this.peekExponentiationExpression_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var right = this.parseExponentiationExpression_();\n        left = this.newBinaryExpression_(start, left, operator, right);\n      }\n      return left;\n    },\n    peekMultiplicativeOperator_: function(type) {\n      switch (type) {\n        case STAR:\n        case SLASH:\n        case PERCENT:\n          return true;\n        default:\n          return false;\n      }\n    },\n    peekExponentiationExpression_: function(type) {\n      return type === STAR_STAR;\n    },\n    parseUnaryExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      if (this.allowAwait && this.peekPredefinedString_(AWAIT)) {\n        this.eatId_();\n        var operand = this.parseUnaryExpression_();\n        operand = this.toPrimaryExpression_(operand);\n        return new AwaitExpression(this.getTreeLocation_(start), operand);\n      }\n      if (this.peekUnaryOperator_(this.peekType_())) {\n        var operator = this.nextToken_();\n        var operand = this.parseUnaryExpression_();\n        operand = this.toPrimaryExpression_(operand);\n        return new UnaryExpression(this.getTreeLocation_(start), operator, operand);\n      }\n      return this.parsePostfixExpression_();\n    },\n    peekUnaryOperator_: function(type) {\n      switch (type) {\n        case DELETE:\n        case VOID:\n        case TYPEOF:\n        case PLUS_PLUS:\n        case MINUS_MINUS:\n        case PLUS:\n        case MINUS:\n        case TILDE:\n        case BANG:\n          return true;\n        default:\n          return false;\n      }\n    },\n    parsePostfixExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var operand = this.parseLeftHandSideExpression_();\n      while (this.peekPostfixOperator_(this.peekType_())) {\n        operand = this.toPrimaryExpression_(operand);\n        var operator = this.nextToken_();\n        operand = new PostfixExpression(this.getTreeLocation_(start), operand, operator);\n      }\n      return operand;\n    },\n    peekPostfixOperator_: function(type) {\n      switch (type) {\n        case PLUS_PLUS:\n        case MINUS_MINUS:\n          var token = this.peekTokenNoLineTerminator_();\n          return token !== null;\n      }\n      return false;\n    },\n    parseLeftHandSideExpression_: function() {\n      var start = this.getTreeStartLocation_();\n      var operand = this.parseNewExpression_();\n      if (!(operand instanceof NewExpression) || operand.args != null) {\n        loop: while (true) {\n          switch (this.peekType_()) {\n            case OPEN_PAREN:\n              operand = this.toPrimaryExpression_(operand);\n              operand = this.parseCallExpression_(start, operand);\n              break;\n            case OPEN_SQUARE:\n              operand = this.toPrimaryExpression_(operand);\n              operand = this.parseMemberLookupExpression_(start, operand);\n              break;\n            case PERIOD:\n              operand = this.toPrimaryExpression_(operand);\n              operand = this.parseMemberExpression_(start, operand);\n              break;\n            case NO_SUBSTITUTION_TEMPLATE:\n            case TEMPLATE_HEAD:\n              if (!this.options_.templateLiterals)\n                break loop;\n              operand = this.toPrimaryExpression_(operand);\n              operand = this.parseTemplateLiteral_(operand);\n              break;\n            default:\n              break loop;\n          }\n        }\n      }\n      return operand;\n    },\n    parseMemberExpressionNoNew_: function() {\n      var start = this.getTreeStartLocation_();\n      var operand;\n      if (this.peekType_() === FUNCTION) {\n        operand = this.parseFunctionExpression_();\n      } else {\n        operand = this.parsePrimaryExpression_();\n      }\n      loop: while (true) {\n        switch (this.peekType_()) {\n          case OPEN_SQUARE:\n            operand = this.toPrimaryExpression_(operand);\n            operand = this.parseMemberLookupExpression_(start, operand);\n            break;\n          case PERIOD:\n            operand = this.toPrimaryExpression_(operand);\n            operand = this.parseMemberExpression_(start, operand);\n            break;\n          case NO_SUBSTITUTION_TEMPLATE:\n          case TEMPLATE_HEAD:\n            if (!this.options_.templateLiterals)\n              break loop;\n            operand = this.toPrimaryExpression_(operand);\n            operand = this.parseTemplateLiteral_(operand);\n            break;\n          default:\n            break loop;\n        }\n      }\n      return operand;\n    },\n    parseMemberExpression_: function(start, operand) {\n      this.nextToken_();\n      var name = this.eatIdName_();\n      return new MemberExpression(this.getTreeLocation_(start), operand, name);\n    },\n    parseMemberLookupExpression_: function(start, operand) {\n      this.nextToken_();\n      var member = this.parseExpression();\n      this.eat_(CLOSE_SQUARE);\n      return new MemberLookupExpression(this.getTreeLocation_(start), operand, member);\n    },\n    parseCallExpression_: function(start, operand) {\n      var args = this.parseArguments_();\n      return new CallExpression(this.getTreeLocation_(start), operand, args);\n    },\n    parseNewExpression_: function() {\n      var operand;\n      switch (this.peekType_()) {\n        case NEW:\n          var start = this.getTreeStartLocation_();\n          this.eat_(NEW);\n          if (this.peek_(SUPER))\n            operand = this.parseSuperExpression_();\n          else\n            operand = this.toPrimaryExpression_(this.parseNewExpression_());\n          var args = null;\n          if (this.peek_(OPEN_PAREN)) {\n            args = this.parseArguments_();\n          }\n          return new NewExpression(this.getTreeLocation_(start), operand, args);\n        case SUPER:\n          operand = this.parseSuperExpression_();\n          var type = this.peekType_();\n          switch (type) {\n            case OPEN_SQUARE:\n              return this.parseMemberLookupExpression_(start, operand);\n            case PERIOD:\n              return this.parseMemberExpression_(start, operand);\n            case OPEN_PAREN:\n              return this.parseCallExpression_(start, operand);\n            default:\n              return this.parseUnexpectedToken_(type);\n          }\n          break;\n        default:\n          return this.parseMemberExpressionNoNew_();\n      }\n    },\n    parseArguments_: function() {\n      var start = this.getTreeStartLocation_();\n      var args = [];\n      this.eat_(OPEN_PAREN);\n      if (!this.peek_(CLOSE_PAREN)) {\n        args.push(this.parseArgument_());\n        while (this.eatIf_(COMMA)) {\n          args.push(this.parseArgument_());\n        }\n      }\n      this.eat_(CLOSE_PAREN);\n      return new ArgumentList(this.getTreeLocation_(start), args);\n    },\n    parseArgument_: function() {\n      if (this.peekSpread_(this.peekType_()))\n        return this.parseSpreadExpression_();\n      return this.parseAssignmentExpression();\n    },\n    parseArrowFunction_: function(start, tree, asyncToken) {\n      var formals;\n      switch (tree.type) {\n        case IDENTIFIER_EXPRESSION:\n          tree = new BindingIdentifier(tree.location, tree.identifierToken);\n        case BINDING_IDENTIFIER:\n          formals = new FormalParameterList(this.getTreeLocation_(start), [new FormalParameter(tree.location, new BindingElement(tree.location, tree, null), null, [])]);\n          break;\n        case FORMAL_PARAMETER_LIST:\n          formals = tree;\n          break;\n        default:\n          formals = this.toFormalParameters_(start, tree, asyncToken);\n      }\n      this.eat_(ARROW);\n      var body = this.parseConciseBody_(asyncToken);\n      return new ArrowFunctionExpression(this.getTreeLocation_(start), asyncToken, formals, body);\n    },\n    parseCoverFormals_: function(start) {\n      var expressions = [];\n      if (!this.peek_(CLOSE_PAREN)) {\n        do {\n          var type = this.peekType_();\n          if (this.peekRest_(type)) {\n            expressions.push(this.parseRestParameter_());\n            break;\n          } else {\n            expressions.push(this.parseAssignmentExpression());\n          }\n          if (this.eatIf_(COMMA))\n            continue;\n        } while (!this.peek_(CLOSE_PAREN) && !this.isAtEnd());\n      }\n      this.eat_(CLOSE_PAREN);\n      return new CoverFormals(this.getTreeLocation_(start), expressions);\n    },\n    ensureNoCoverInitializedNames_: function(tree, coverInitializedNameCount) {\n      if (coverInitializedNameCount === this.coverInitializedNameCount_)\n        return;\n      var finder = new ValidateObjectLiteral(tree);\n      if (finder.found) {\n        var token = finder.errorToken;\n        this.reportError_(token.location, (\"Unexpected token \" + token));\n      }\n    },\n    toPrimaryExpression_: function(tree) {\n      if (tree.type === COVER_FORMALS)\n        return this.coverFormalsToParenExpression_(tree);\n      return tree;\n    },\n    validateCoverFormalsAsParenExpression_: function(tree) {\n      for (var i = 0; i < tree.expressions.length; i++) {\n        if (tree.expressions[i].type === REST_PARAMETER) {\n          var token = new Token(DOT_DOT_DOT, tree.expressions[i].location);\n          this.reportError_(token.location, (\"Unexpected token \" + token));\n          return;\n        }\n      }\n    },\n    coverFormalsToParenExpression_: function(tree) {\n      if (tree.type === COVER_FORMALS) {\n        var expressions = tree.expressions;\n        if (expressions.length === 0) {\n          var message = 'Unexpected token )';\n          this.reportError_(tree.location, message);\n        } else {\n          this.validateCoverFormalsAsParenExpression_(tree);\n          var expression;\n          if (expressions.length > 1)\n            expression = new CommaExpression(expressions[0].location, expressions);\n          else\n            expression = expressions[0];\n          return new ParenExpression(tree.location, expression);\n        }\n      }\n      return tree;\n    },\n    toFormalParameters_: function(start, tree, asyncToken) {\n      this.scanner_.index = start.offset;\n      return this.parseArrowFormalParameters_(asyncToken);\n    },\n    parseArrowFormalParameters_: function(asyncToken) {\n      if (asyncToken)\n        this.eat_(IDENTIFIER);\n      this.eat_(OPEN_PAREN);\n      var parameters = this.parseFormalParameters_();\n      this.eat_(CLOSE_PAREN);\n      return parameters;\n    },\n    peekArrow_: function(type) {\n      return type === ARROW && this.options_.arrowFunctions;\n    },\n    parseConciseBody_: function(asyncToken) {\n      if (this.peek_(OPEN_CURLY))\n        return this.parseFunctionBody_(asyncToken);\n      var allowAwait = this.allowAwait;\n      this.allowAwait = asyncToken !== null;\n      var expression = this.parseAssignmentExpression();\n      this.allowAwait = allowAwait;\n      return expression;\n    },\n    parseGeneratorComprehension_: function(start) {\n      var comprehensionList = this.parseComprehensionList_();\n      var expression = this.parseAssignmentExpression();\n      this.eat_(CLOSE_PAREN);\n      return new GeneratorComprehension(this.getTreeLocation_(start), comprehensionList, expression);\n    },\n    parseForBinding_: function() {\n      if (this.peekPattern_(this.peekType_()))\n        return this.parseBindingPattern_();\n      return this.parseBindingIdentifier_();\n    },\n    peekPattern_: function(type) {\n      return this.options_.destructuring && (this.peekObjectPattern_(type) || this.peekArrayPattern_(type));\n    },\n    peekArrayPattern_: function(type) {\n      return type === OPEN_SQUARE;\n    },\n    peekObjectPattern_: function(type) {\n      return type === OPEN_CURLY;\n    },\n    parseBindingPattern_: function() {\n      return this.parsePattern_(true);\n    },\n    parsePattern_: function(useBinding) {\n      if (this.peekArrayPattern_(this.peekType_()))\n        return this.parseArrayPattern_(useBinding);\n      return this.parseObjectPattern_(useBinding);\n    },\n    parseArrayBindingPattern_: function() {\n      return this.parseArrayPattern_(true);\n    },\n    parsePatternElement_: function(useBinding) {\n      return useBinding ? this.parseBindingElement_() : this.parseAssignmentElement_();\n    },\n    parsePatternRestElement_: function(useBinding) {\n      return useBinding ? this.parseBindingRestElement_() : this.parseAssignmentRestElement_();\n    },\n    parseArrayPattern_: function(useBinding) {\n      var start = this.getTreeStartLocation_();\n      var elements = [];\n      this.eat_(OPEN_SQUARE);\n      var type;\n      while ((type = this.peekType_()) !== CLOSE_SQUARE && type !== END_OF_FILE) {\n        this.parseElisionOpt_(elements);\n        if (this.peekRest_(this.peekType_())) {\n          elements.push(this.parsePatternRestElement_(useBinding));\n          break;\n        } else {\n          elements.push(this.parsePatternElement_(useBinding));\n          if (this.peek_(COMMA) && !this.peek_(CLOSE_SQUARE, 1)) {\n            this.nextToken_();\n          }\n        }\n      }\n      this.eat_(CLOSE_SQUARE);\n      return new ArrayPattern(this.getTreeLocation_(start), elements);\n    },\n    parseBindingElementList_: function(elements) {\n      this.parseElisionOpt_(elements);\n      elements.push(this.parseBindingElement_());\n      while (this.eatIf_(COMMA)) {\n        this.parseElisionOpt_(elements);\n        elements.push(this.parseBindingElement_());\n      }\n    },\n    parseElisionOpt_: function(elements) {\n      while (this.eatIf_(COMMA)) {\n        elements.push(null);\n      }\n    },\n    peekBindingElement_: function(type) {\n      return this.peekBindingIdentifier_(type) || this.peekPattern_(type);\n    },\n    parseBindingElement_: function() {\n      var initializer = arguments[0] !== (void 0) ? arguments[0] : Initializer.OPTIONAL;\n      var start = this.getTreeStartLocation_();\n      var binding = this.parseBindingElementBinding_();\n      var initializer = this.parseBindingElementInitializer_(initializer);\n      return new BindingElement(this.getTreeLocation_(start), binding, initializer);\n    },\n    parseBindingElementBinding_: function() {\n      if (this.peekPattern_(this.peekType_()))\n        return this.parseBindingPattern_();\n      return this.parseBindingIdentifier_();\n    },\n    parseBindingElementInitializer_: function() {\n      var initializer = arguments[0] !== (void 0) ? arguments[0] : Initializer.OPTIONAL;\n      if (this.peek_(EQUAL) || initializer === Initializer.REQUIRED) {\n        return this.parseInitializer_();\n      }\n      return null;\n    },\n    parseBindingRestElement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DOT_DOT_DOT);\n      var identifier = this.parseBindingIdentifier_();\n      return new SpreadPatternElement(this.getTreeLocation_(start), identifier);\n    },\n    parseObjectPattern_: function(useBinding) {\n      var start = this.getTreeStartLocation_();\n      var elements = [];\n      this.eat_(OPEN_CURLY);\n      var type;\n      while ((type = this.peekType_()) !== CLOSE_CURLY && type !== END_OF_FILE) {\n        elements.push(this.parsePatternProperty_(useBinding));\n        if (!this.eatIf_(COMMA))\n          break;\n      }\n      this.eat_(CLOSE_CURLY);\n      return new ObjectPattern(this.getTreeLocation_(start), elements);\n    },\n    parsePatternProperty_: function(useBinding) {\n      var start = this.getTreeStartLocation_();\n      var name = this.parsePropertyName_();\n      var requireColon = name.type !== LITERAL_PROPERTY_NAME || !name.literalToken.isStrictKeyword() && name.literalToken.type !== IDENTIFIER;\n      if (requireColon || this.peek_(COLON)) {\n        this.eat_(COLON);\n        var element = this.parsePatternElement_(useBinding);\n        return new ObjectPatternField(this.getTreeLocation_(start), name, element);\n      }\n      var token = name.literalToken;\n      if (this.strictMode_ && token.isStrictKeyword())\n        this.reportReservedIdentifier_(token);\n      if (useBinding) {\n        var binding = new BindingIdentifier(name.location, token);\n        var initializer = this.parseInitializerOpt_(Expression.NORMAL);\n        return new BindingElement(this.getTreeLocation_(start), binding, initializer);\n      }\n      var assignment = new IdentifierExpression(name.location, token);\n      var initializer = this.parseInitializerOpt_(Expression.NORMAL);\n      return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer);\n    },\n    parseAssignmentPattern_: function() {\n      return this.parsePattern_(false);\n    },\n    parseArrayAssignmentPattern_: function() {\n      return this.parseArrayPattern_(false);\n    },\n    parseAssignmentElement_: function() {\n      var start = this.getTreeStartLocation_();\n      var assignment = this.parseDestructuringAssignmentTarget_();\n      var initializer = this.parseInitializerOpt_(Expression.NORMAL);\n      return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer);\n    },\n    parseDestructuringAssignmentTarget_: function() {\n      switch (this.peekType_()) {\n        case OPEN_SQUARE:\n          return this.parseArrayAssignmentPattern_();\n        case OPEN_CURLY:\n          return this.parseObjectAssignmentPattern_();\n      }\n      var expression = this.parseLeftHandSideExpression_();\n      return this.coverFormalsToParenExpression_(expression);\n    },\n    parseAssignmentRestElement_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(DOT_DOT_DOT);\n      var id = this.parseDestructuringAssignmentTarget_();\n      return new SpreadPatternElement(this.getTreeLocation_(start), id);\n    },\n    parseObjectAssignmentPattern_: function() {\n      return this.parseObjectPattern_(false);\n    },\n    parseAssignmentProperty_: function() {\n      return this.parsePatternProperty_(false);\n    },\n    parseTemplateLiteral_: function(operand) {\n      if (!this.options_.templateLiterals)\n        return this.parseUnexpectedToken_('`');\n      var start = operand ? operand.location.start : this.getTreeStartLocation_();\n      var token = this.nextToken_();\n      var elements = [new TemplateLiteralPortion(token.location, token)];\n      if (token.type === NO_SUBSTITUTION_TEMPLATE) {\n        return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements);\n      }\n      var expression = this.parseExpression();\n      elements.push(new TemplateSubstitution(expression.location, expression));\n      while (expression.type !== SYNTAX_ERROR_TREE) {\n        token = this.nextTemplateLiteralToken_();\n        if (token.type === ERROR || token.type === END_OF_FILE)\n          break;\n        elements.push(new TemplateLiteralPortion(token.location, token));\n        if (token.type === TEMPLATE_TAIL)\n          break;\n        expression = this.parseExpression();\n        elements.push(new TemplateSubstitution(expression.location, expression));\n      }\n      return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements);\n    },\n    parseTypeAnnotationOpt_: function() {\n      if (this.options_.types && this.eatOpt_(COLON)) {\n        return this.parseType_();\n      }\n      return null;\n    },\n    parseType_: function() {\n      var start = this.getTreeStartLocation_();\n      var elementType;\n      switch (this.peekType_()) {\n        case VOID:\n          var token = this.nextToken_();\n          return new PredefinedType(this.getTreeLocation_(start), token);\n        case IDENTIFIER:\n          switch (this.peekToken_().value) {\n            case 'any':\n            case 'boolean':\n            case 'number':\n            case 'string':\n            case 'symbol':\n              var token = this.nextToken_();\n              return new PredefinedType(this.getTreeLocation_(start), token);\n          }\n          return this.parseTypeReference_(start);\n        case NEW:\n          elementType = this.parseConstructorType_();\n          break;\n        case OPEN_CURLY:\n          elementType = this.parseObjectType_();\n          break;\n        case OPEN_PAREN:\n          elementType = this.parseFunctionType_();\n          break;\n        case TYPEOF:\n          return this.parseTypeQuery_(start);\n        default:\n          return this.parseUnexpectedToken_(this.peekToken_());\n      }\n      return this.parseArrayTypeSuffix_(start, elementType);\n    },\n    peekTypeAnnotation_: function() {\n      switch (this.peekType_()) {\n        case IDENTIFIER:\n        case NEW:\n        case OPEN_CURLY:\n        case OPEN_PAREN:\n        case TYPEOF:\n        case VOID:\n          return true;\n      }\n      return false;\n    },\n    parseTypeReference_: function() {\n      var start = this.getTreeStartLocation_();\n      var typeName = this.parseTypeName_();\n      var args = null;\n      if (this.peek_(OPEN_ANGLE)) {\n        var args = this.parseTypeArguments_();\n        return new TypeReference(this.getTreeLocation_(start), typeName, args);\n      }\n      return typeName;\n    },\n    parseArrayTypeSuffix_: function(start, elementType) {\n      return elementType;\n    },\n    parseTypeArguments_: function() {\n      var start = this.getTreeStartLocation_();\n      this.eat_(OPEN_ANGLE);\n      var args = [this.parseType_()];\n      while (this.peek_(COMMA)) {\n        this.eat_(COMMA);\n        args.push(this.parseType_());\n      }\n      var token = this.nextCloseAngle_();\n      if (token.type !== CLOSE_ANGLE) {\n        return this.parseUnexpectedToken_(token.type);\n      }\n      return new TypeArguments(this.getTreeLocation_(start), args);\n    },\n    parseConstructorType_: function() {\n      throw 'NYI';\n    },\n    parseObjectType_: function() {\n      throw 'NYI';\n    },\n    parseFunctionType_: function() {\n      throw 'NYI';\n    },\n    parseTypeQuery_: function(start) {\n      throw 'NYI';\n    },\n    parseNamedOrPredefinedType_: function() {\n      var start = this.getTreeStartLocation_();\n      switch (this.peekToken_().value) {\n        case 'any':\n        case 'number':\n        case 'boolean':\n        case 'string':\n          var token = this.nextToken_();\n          return new PredefinedType(this.getTreeLocation_(start), token);\n        default:\n          return this.parseTypeName_();\n      }\n    },\n    parseTypeName_: function() {\n      var start = this.getTreeStartLocation_();\n      var id = this.eatId_();\n      var typeName = new TypeName(this.getTreeLocation_(start), null, id);\n      while (this.eatIf_(PERIOD)) {\n        var memberName = this.eatIdName_();\n        typeName = new TypeName(this.getTreeLocation_(start), typeName, memberName);\n      }\n      return typeName;\n    },\n    parseAnnotatedDeclarations_: function(parsingModuleItem) {\n      this.pushAnnotations_();\n      var declaration;\n      var type = this.peekType_();\n      if (parsingModuleItem) {\n        declaration = this.parseModuleItem_(type);\n      } else {\n        declaration = this.parseStatementListItem_(type);\n      }\n      if (this.annotations_.length > 0) {\n        return this.parseSyntaxError_('Unsupported annotated expression');\n      }\n      return declaration;\n    },\n    parseAnnotations_: function() {\n      var annotations = [];\n      while (this.eatIf_(AT)) {\n        annotations.push(this.parseAnnotation_());\n      }\n      return annotations;\n    },\n    pushAnnotations_: function() {\n      this.annotations_ = this.parseAnnotations_();\n    },\n    popAnnotations_: function() {\n      var annotations = this.annotations_;\n      this.annotations_ = [];\n      return annotations;\n    },\n    parseAnnotation_: function() {\n      var start = this.getTreeStartLocation_();\n      var expression = this.parseMemberExpressionNoNew_();\n      var args = null;\n      if (this.peek_(OPEN_PAREN))\n        args = this.parseArguments_();\n      return new Annotation(this.getTreeLocation_(start), expression, args);\n    },\n    eatPossibleImplicitSemiColon_: function() {\n      var token = this.peekTokenNoLineTerminator_();\n      if (!token)\n        return;\n      switch (token.type) {\n        case SEMI_COLON:\n          this.nextToken_();\n          return;\n        case END_OF_FILE:\n        case CLOSE_CURLY:\n          return;\n      }\n      this.reportError_('Semi-colon expected');\n    },\n    peekImplicitSemiColon_: function() {\n      switch (this.peekType_()) {\n        case SEMI_COLON:\n        case CLOSE_CURLY:\n        case END_OF_FILE:\n          return true;\n      }\n      var token = this.peekTokenNoLineTerminator_();\n      return token === null;\n    },\n    eatOpt_: function(expectedTokenType) {\n      if (this.peek_(expectedTokenType))\n        return this.nextToken_();\n      return null;\n    },\n    eatIdOpt_: function() {\n      return this.peek_(IDENTIFIER) ? this.eatId_() : null;\n    },\n    eatId_: function() {\n      var expected = arguments[0];\n      var token = this.nextToken_();\n      if (!token) {\n        if (expected)\n          this.reportError_(this.peekToken_(), (\"expected '\" + expected + \"'\"));\n        return null;\n      }\n      if (token.type === IDENTIFIER) {\n        if (expected && token.value !== expected)\n          this.reportExpectedError_(token, expected);\n        return token;\n      }\n      if (token.isStrictKeyword()) {\n        if (this.strictMode_) {\n          this.reportReservedIdentifier_(token);\n        } else {\n          return new IdentifierToken(token.location, token.type);\n        }\n      } else {\n        this.reportExpectedError_(token, expected || 'identifier');\n      }\n      return token;\n    },\n    eatIdName_: function() {\n      var t = this.nextToken_();\n      if (t.type != IDENTIFIER) {\n        if (!t.isKeyword()) {\n          this.reportExpectedError_(t, 'identifier');\n          return null;\n        }\n        return new IdentifierToken(t.location, t.type);\n      }\n      return t;\n    },\n    eat_: function(expectedTokenType) {\n      var token = this.nextToken_();\n      if (token.type != expectedTokenType) {\n        this.reportExpectedError_(token, expectedTokenType);\n        return null;\n      }\n      return token;\n    },\n    eatIf_: function(expectedTokenType) {\n      if (this.peek_(expectedTokenType)) {\n        this.nextToken_();\n        return true;\n      }\n      return false;\n    },\n    reportExpectedError_: function(token, expected) {\n      this.reportError_(token, (\"Unexpected token \" + token));\n    },\n    getTreeStartLocation_: function() {\n      return this.peekToken_().location.start;\n    },\n    getTreeEndLocation_: function() {\n      return this.scanner_.lastToken.location.end;\n    },\n    getTreeLocation_: function(start) {\n      return new SourceRange(start, this.getTreeEndLocation_());\n    },\n    handleComment: function(range) {},\n    nextToken_: function() {\n      return this.scanner_.nextToken();\n    },\n    nextRegularExpressionLiteralToken_: function() {\n      return this.scanner_.nextRegularExpressionLiteralToken();\n    },\n    nextTemplateLiteralToken_: function() {\n      return this.scanner_.nextTemplateLiteralToken();\n    },\n    nextCloseAngle_: function() {\n      return this.scanner_.nextCloseAngle();\n    },\n    isAtEnd: function() {\n      return this.scanner_.isAtEnd();\n    },\n    peek_: function(expectedType, opt_index) {\n      return this.peekToken_(opt_index).type === expectedType;\n    },\n    peekType_: function() {\n      return this.peekToken_().type;\n    },\n    peekToken_: function(opt_index) {\n      return this.scanner_.peekToken(opt_index);\n    },\n    peekTokenNoLineTerminator_: function() {\n      return this.scanner_.peekTokenNoLineTerminator();\n    },\n    reportError_: function() {\n      for (var args = [],\n          $__14 = 0; $__14 < arguments.length; $__14++)\n        args[$__14] = arguments[$__14];\n      if (args.length == 1) {\n        this.errorReporter_.reportError(this.scanner_.getPosition(), args[0]);\n      } else {\n        var location = args[0];\n        if (location instanceof Token) {\n          location = location.location;\n        }\n        this.errorReporter_.reportError(location.start, args[1]);\n      }\n    },\n    reportReservedIdentifier_: function(token) {\n      this.reportError_(token, (token.type + \" is a reserved identifier\"));\n    }\n  }, {});\n  return {get Parser() {\n      return Parser;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/SourcePosition\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/SourcePosition\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/SourcePosition\", path);\n  }\n  var SourcePosition = function SourcePosition(source, offset) {\n    this.source = source;\n    this.offset = offset;\n    this.line_ = -1;\n    this.column_ = -1;\n  };\n  ($traceurRuntime.createClass)(SourcePosition, {\n    get line() {\n      if (this.line_ === -1)\n        this.line_ = this.source.lineNumberTable.getLine(this.offset);\n      return this.line_;\n    },\n    get column() {\n      if (this.column_ === -1)\n        this.column_ = this.source.lineNumberTable.getColumn(this.offset);\n      return this.column_;\n    },\n    toString: function() {\n      var name = this.source ? this.source.name : '';\n      return (name + \":\" + (this.line + 1) + \":\" + (this.column + 1));\n    }\n  }, {});\n  return {get SourcePosition() {\n      return SourcePosition;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/LineNumberTable\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/LineNumberTable\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/LineNumberTable\", path);\n  }\n  var SourcePosition = System.get(\"traceur@0.0.74/src/util/SourcePosition\").SourcePosition;\n  var SourceRange = System.get(\"traceur@0.0.74/src/util/SourceRange\").SourceRange;\n  var isLineTerminator = System.get(\"traceur@0.0.74/src/syntax/Scanner\").isLineTerminator;\n  var MAX_INT_REPRESENTATION = 9007199254740992;\n  function computeLineStartOffsets(source) {\n    var lineStartOffsets = [0];\n    var k = 1;\n    for (var index = 0; index < source.length; index++) {\n      var code = source.charCodeAt(index);\n      if (isLineTerminator(code)) {\n        if (code === 13 && source.charCodeAt(index + 1) === 10) {\n          index++;\n        }\n        lineStartOffsets[k++] = index + 1;\n      }\n    }\n    lineStartOffsets[k++] = MAX_INT_REPRESENTATION;\n    return lineStartOffsets;\n  }\n  var LineNumberTable = function LineNumberTable(sourceFile) {\n    this.sourceFile_ = sourceFile;\n    this.lineStartOffsets_ = null;\n    this.lastLine_ = 0;\n    this.lastOffset_ = -1;\n  };\n  ($traceurRuntime.createClass)(LineNumberTable, {\n    ensureLineStartOffsets_: function() {\n      if (!this.lineStartOffsets_) {\n        this.lineStartOffsets_ = computeLineStartOffsets(this.sourceFile_.contents);\n      }\n    },\n    getSourcePosition: function(offset) {\n      return new SourcePosition(this.sourceFile_, offset);\n    },\n    getLine: function(offset) {\n      if (offset === this.lastOffset_)\n        return this.lastLine_;\n      this.ensureLineStartOffsets_();\n      if (offset < 0)\n        return 0;\n      var line;\n      if (offset < this.lastOffset_) {\n        for (var i = this.lastLine_; i >= 0; i--) {\n          if (this.lineStartOffsets_[i] <= offset) {\n            line = i;\n            break;\n          }\n        }\n      } else {\n        for (var i = this.lastLine_; true; i++) {\n          if (this.lineStartOffsets_[i] > offset) {\n            line = i - 1;\n            break;\n          }\n        }\n      }\n      this.lastLine_ = line;\n      this.lastOffset_ = offset;\n      return line;\n    },\n    offsetOfLine: function(line) {\n      this.ensureLineStartOffsets_();\n      return this.lineStartOffsets_[line];\n    },\n    getColumn: function(offset) {\n      var line = this.getLine(offset);\n      return offset - this.lineStartOffsets_[line];\n    },\n    getSourceRange: function(startOffset, endOffset) {\n      return new SourceRange(this.getSourcePosition(startOffset), this.getSourcePosition(endOffset));\n    }\n  }, {});\n  return {get LineNumberTable() {\n      return LineNumberTable;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/SourceFile\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/SourceFile\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/SourceFile\", path);\n  }\n  var LineNumberTable = System.get(\"traceur@0.0.74/src/syntax/LineNumberTable\").LineNumberTable;\n  var SourceFile = function SourceFile(name, contents) {\n    this.name = name;\n    this.contents = contents;\n    this.lineNumberTable = new LineNumberTable(this);\n  };\n  ($traceurRuntime.createClass)(SourceFile, {}, {});\n  return {get SourceFile() {\n      return SourceFile;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/CollectingErrorReporter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/CollectingErrorReporter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/CollectingErrorReporter\", path);\n  }\n  var ErrorReporter = System.get(\"traceur@0.0.74/src/util/ErrorReporter\").ErrorReporter;\n  var MultipleErrors = function MultipleErrors(errors) {\n    this.message = errors ? errors.join('\\n') + '' : '';\n    this.name = errors && (errors.length > 1) ? 'MultipleErrors' : '';\n    this.errors = errors;\n  };\n  ($traceurRuntime.createClass)(MultipleErrors, {}, {}, Error);\n  var CollectingErrorReporter = function CollectingErrorReporter() {\n    $traceurRuntime.superConstructor($CollectingErrorReporter).call(this);\n    this.errors = [];\n  };\n  var $CollectingErrorReporter = CollectingErrorReporter;\n  ($traceurRuntime.createClass)(CollectingErrorReporter, {\n    reportMessageInternal: function(location, message) {\n      if (location)\n        message = (location + \": \" + message);\n      this.errors.push(message);\n    },\n    errorsAsString: function() {\n      return this.toError().message;\n    },\n    toError: function() {\n      return new MultipleErrors(this.errors);\n    }\n  }, {}, ErrorReporter);\n  return {\n    get MultipleErrors() {\n      return MultipleErrors;\n    },\n    get CollectingErrorReporter() {\n      return CollectingErrorReporter;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      Annotation = $__0.Annotation,\n      AnonBlock = $__0.AnonBlock,\n      ArgumentList = $__0.ArgumentList,\n      ArrayComprehension = $__0.ArrayComprehension,\n      ArrayLiteralExpression = $__0.ArrayLiteralExpression,\n      ArrayPattern = $__0.ArrayPattern,\n      ArrowFunctionExpression = $__0.ArrowFunctionExpression,\n      AssignmentElement = $__0.AssignmentElement,\n      AwaitExpression = $__0.AwaitExpression,\n      BinaryExpression = $__0.BinaryExpression,\n      BindingElement = $__0.BindingElement,\n      BindingIdentifier = $__0.BindingIdentifier,\n      Block = $__0.Block,\n      BreakStatement = $__0.BreakStatement,\n      CallExpression = $__0.CallExpression,\n      CaseClause = $__0.CaseClause,\n      Catch = $__0.Catch,\n      ClassDeclaration = $__0.ClassDeclaration,\n      ClassExpression = $__0.ClassExpression,\n      CommaExpression = $__0.CommaExpression,\n      ComprehensionFor = $__0.ComprehensionFor,\n      ComprehensionIf = $__0.ComprehensionIf,\n      ComputedPropertyName = $__0.ComputedPropertyName,\n      ConditionalExpression = $__0.ConditionalExpression,\n      ContinueStatement = $__0.ContinueStatement,\n      CoverFormals = $__0.CoverFormals,\n      CoverInitializedName = $__0.CoverInitializedName,\n      DebuggerStatement = $__0.DebuggerStatement,\n      DefaultClause = $__0.DefaultClause,\n      DoWhileStatement = $__0.DoWhileStatement,\n      EmptyStatement = $__0.EmptyStatement,\n      ExportDeclaration = $__0.ExportDeclaration,\n      ExportDefault = $__0.ExportDefault,\n      ExportSpecifier = $__0.ExportSpecifier,\n      ExportSpecifierSet = $__0.ExportSpecifierSet,\n      ExportStar = $__0.ExportStar,\n      ExpressionStatement = $__0.ExpressionStatement,\n      Finally = $__0.Finally,\n      ForInStatement = $__0.ForInStatement,\n      ForOfStatement = $__0.ForOfStatement,\n      ForStatement = $__0.ForStatement,\n      FormalParameter = $__0.FormalParameter,\n      FormalParameterList = $__0.FormalParameterList,\n      FunctionBody = $__0.FunctionBody,\n      FunctionDeclaration = $__0.FunctionDeclaration,\n      FunctionExpression = $__0.FunctionExpression,\n      GeneratorComprehension = $__0.GeneratorComprehension,\n      GetAccessor = $__0.GetAccessor,\n      IdentifierExpression = $__0.IdentifierExpression,\n      IfStatement = $__0.IfStatement,\n      ImportedBinding = $__0.ImportedBinding,\n      ImportDeclaration = $__0.ImportDeclaration,\n      ImportSpecifier = $__0.ImportSpecifier,\n      ImportSpecifierSet = $__0.ImportSpecifierSet,\n      LabelledStatement = $__0.LabelledStatement,\n      LiteralExpression = $__0.LiteralExpression,\n      LiteralPropertyName = $__0.LiteralPropertyName,\n      MemberExpression = $__0.MemberExpression,\n      MemberLookupExpression = $__0.MemberLookupExpression,\n      Module = $__0.Module,\n      ModuleDeclaration = $__0.ModuleDeclaration,\n      ModuleSpecifier = $__0.ModuleSpecifier,\n      NamedExport = $__0.NamedExport,\n      NewExpression = $__0.NewExpression,\n      ObjectLiteralExpression = $__0.ObjectLiteralExpression,\n      ObjectPattern = $__0.ObjectPattern,\n      ObjectPatternField = $__0.ObjectPatternField,\n      ParenExpression = $__0.ParenExpression,\n      PostfixExpression = $__0.PostfixExpression,\n      PredefinedType = $__0.PredefinedType,\n      Script = $__0.Script,\n      PropertyMethodAssignment = $__0.PropertyMethodAssignment,\n      PropertyNameAssignment = $__0.PropertyNameAssignment,\n      PropertyNameShorthand = $__0.PropertyNameShorthand,\n      PropertyVariableDeclaration = $__0.PropertyVariableDeclaration,\n      RestParameter = $__0.RestParameter,\n      ReturnStatement = $__0.ReturnStatement,\n      SetAccessor = $__0.SetAccessor,\n      SpreadExpression = $__0.SpreadExpression,\n      SpreadPatternElement = $__0.SpreadPatternElement,\n      SuperExpression = $__0.SuperExpression,\n      SwitchStatement = $__0.SwitchStatement,\n      SyntaxErrorTree = $__0.SyntaxErrorTree,\n      TemplateLiteralExpression = $__0.TemplateLiteralExpression,\n      TemplateLiteralPortion = $__0.TemplateLiteralPortion,\n      TemplateSubstitution = $__0.TemplateSubstitution,\n      ThisExpression = $__0.ThisExpression,\n      ThrowStatement = $__0.ThrowStatement,\n      TryStatement = $__0.TryStatement,\n      TypeArguments = $__0.TypeArguments,\n      TypeName = $__0.TypeName,\n      TypeReference = $__0.TypeReference,\n      UnaryExpression = $__0.UnaryExpression,\n      VariableDeclaration = $__0.VariableDeclaration,\n      VariableDeclarationList = $__0.VariableDeclarationList,\n      VariableStatement = $__0.VariableStatement,\n      WhileStatement = $__0.WhileStatement,\n      WithStatement = $__0.WithStatement,\n      YieldExpression = $__0.YieldExpression;\n  var ParseTreeTransformer = function ParseTreeTransformer() {};\n  ($traceurRuntime.createClass)(ParseTreeTransformer, {\n    transformAny: function(tree) {\n      return tree && tree.transform(this);\n    },\n    transformList: function(list) {\n      var $__2;\n      var builder = null;\n      for (var index = 0; index < list.length; index++) {\n        var element = list[index];\n        var transformed = this.transformAny(element);\n        if (builder != null || element != transformed) {\n          if (builder == null) {\n            builder = list.slice(0, index);\n          }\n          if (transformed instanceof AnonBlock)\n            ($__2 = builder).push.apply($__2, $traceurRuntime.spread(transformed.statements));\n          else\n            builder.push(transformed);\n        }\n      }\n      return builder || list;\n    },\n    transformStateMachine: function(tree) {\n      throw Error('State machines should not live outside of the GeneratorTransformer.');\n    },\n    transformToBlockOrStatement: function(tree) {\n      var transformed = this.transformAny(tree);\n      if (transformed instanceof AnonBlock) {\n        return new Block(transformed.location, transformed.statements);\n      }\n      return transformed;\n    },\n    transformAnnotation: function(tree) {\n      var name = this.transformAny(tree.name);\n      var args = this.transformAny(tree.args);\n      if (name === tree.name && args === tree.args) {\n        return tree;\n      }\n      return new Annotation(tree.location, name, args);\n    },\n    transformAnonBlock: function(tree) {\n      var statements = this.transformList(tree.statements);\n      if (statements === tree.statements) {\n        return tree;\n      }\n      return new AnonBlock(tree.location, statements);\n    },\n    transformArgumentList: function(tree) {\n      var args = this.transformList(tree.args);\n      if (args === tree.args) {\n        return tree;\n      }\n      return new ArgumentList(tree.location, args);\n    },\n    transformArrayComprehension: function(tree) {\n      var comprehensionList = this.transformList(tree.comprehensionList);\n      var expression = this.transformAny(tree.expression);\n      if (comprehensionList === tree.comprehensionList && expression === tree.expression) {\n        return tree;\n      }\n      return new ArrayComprehension(tree.location, comprehensionList, expression);\n    },\n    transformArrayLiteralExpression: function(tree) {\n      var elements = this.transformList(tree.elements);\n      if (elements === tree.elements) {\n        return tree;\n      }\n      return new ArrayLiteralExpression(tree.location, elements);\n    },\n    transformArrayPattern: function(tree) {\n      var elements = this.transformList(tree.elements);\n      if (elements === tree.elements) {\n        return tree;\n      }\n      return new ArrayPattern(tree.location, elements);\n    },\n    transformArrowFunctionExpression: function(tree) {\n      var parameterList = this.transformAny(tree.parameterList);\n      var body = this.transformAny(tree.body);\n      if (parameterList === tree.parameterList && body === tree.body) {\n        return tree;\n      }\n      return new ArrowFunctionExpression(tree.location, tree.functionKind, parameterList, body);\n    },\n    transformAssignmentElement: function(tree) {\n      var assignment = this.transformAny(tree.assignment);\n      var initializer = this.transformAny(tree.initializer);\n      if (assignment === tree.assignment && initializer === tree.initializer) {\n        return tree;\n      }\n      return new AssignmentElement(tree.location, assignment, initializer);\n    },\n    transformAwaitExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new AwaitExpression(tree.location, expression);\n    },\n    transformBinaryExpression: function(tree) {\n      var left = this.transformAny(tree.left);\n      var right = this.transformAny(tree.right);\n      if (left === tree.left && right === tree.right) {\n        return tree;\n      }\n      return new BinaryExpression(tree.location, left, tree.operator, right);\n    },\n    transformBindingElement: function(tree) {\n      var binding = this.transformAny(tree.binding);\n      var initializer = this.transformAny(tree.initializer);\n      if (binding === tree.binding && initializer === tree.initializer) {\n        return tree;\n      }\n      return new BindingElement(tree.location, binding, initializer);\n    },\n    transformBindingIdentifier: function(tree) {\n      return tree;\n    },\n    transformBlock: function(tree) {\n      var statements = this.transformList(tree.statements);\n      if (statements === tree.statements) {\n        return tree;\n      }\n      return new Block(tree.location, statements);\n    },\n    transformBreakStatement: function(tree) {\n      return tree;\n    },\n    transformCallExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var args = this.transformAny(tree.args);\n      if (operand === tree.operand && args === tree.args) {\n        return tree;\n      }\n      return new CallExpression(tree.location, operand, args);\n    },\n    transformCaseClause: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      var statements = this.transformList(tree.statements);\n      if (expression === tree.expression && statements === tree.statements) {\n        return tree;\n      }\n      return new CaseClause(tree.location, expression, statements);\n    },\n    transformCatch: function(tree) {\n      var binding = this.transformAny(tree.binding);\n      var catchBody = this.transformAny(tree.catchBody);\n      if (binding === tree.binding && catchBody === tree.catchBody) {\n        return tree;\n      }\n      return new Catch(tree.location, binding, catchBody);\n    },\n    transformClassDeclaration: function(tree) {\n      var name = this.transformAny(tree.name);\n      var superClass = this.transformAny(tree.superClass);\n      var elements = this.transformList(tree.elements);\n      var annotations = this.transformList(tree.annotations);\n      if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations) {\n        return tree;\n      }\n      return new ClassDeclaration(tree.location, name, superClass, elements, annotations);\n    },\n    transformClassExpression: function(tree) {\n      var name = this.transformAny(tree.name);\n      var superClass = this.transformAny(tree.superClass);\n      var elements = this.transformList(tree.elements);\n      var annotations = this.transformList(tree.annotations);\n      if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations) {\n        return tree;\n      }\n      return new ClassExpression(tree.location, name, superClass, elements, annotations);\n    },\n    transformCommaExpression: function(tree) {\n      var expressions = this.transformList(tree.expressions);\n      if (expressions === tree.expressions) {\n        return tree;\n      }\n      return new CommaExpression(tree.location, expressions);\n    },\n    transformComprehensionFor: function(tree) {\n      var left = this.transformAny(tree.left);\n      var iterator = this.transformAny(tree.iterator);\n      if (left === tree.left && iterator === tree.iterator) {\n        return tree;\n      }\n      return new ComprehensionFor(tree.location, left, iterator);\n    },\n    transformComprehensionIf: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ComprehensionIf(tree.location, expression);\n    },\n    transformComputedPropertyName: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ComputedPropertyName(tree.location, expression);\n    },\n    transformConditionalExpression: function(tree) {\n      var condition = this.transformAny(tree.condition);\n      var left = this.transformAny(tree.left);\n      var right = this.transformAny(tree.right);\n      if (condition === tree.condition && left === tree.left && right === tree.right) {\n        return tree;\n      }\n      return new ConditionalExpression(tree.location, condition, left, right);\n    },\n    transformContinueStatement: function(tree) {\n      return tree;\n    },\n    transformCoverFormals: function(tree) {\n      var expressions = this.transformList(tree.expressions);\n      if (expressions === tree.expressions) {\n        return tree;\n      }\n      return new CoverFormals(tree.location, expressions);\n    },\n    transformCoverInitializedName: function(tree) {\n      var initializer = this.transformAny(tree.initializer);\n      if (initializer === tree.initializer) {\n        return tree;\n      }\n      return new CoverInitializedName(tree.location, tree.name, tree.equalToken, initializer);\n    },\n    transformDebuggerStatement: function(tree) {\n      return tree;\n    },\n    transformDefaultClause: function(tree) {\n      var statements = this.transformList(tree.statements);\n      if (statements === tree.statements) {\n        return tree;\n      }\n      return new DefaultClause(tree.location, statements);\n    },\n    transformDoWhileStatement: function(tree) {\n      var body = this.transformToBlockOrStatement(tree.body);\n      var condition = this.transformAny(tree.condition);\n      if (body === tree.body && condition === tree.condition) {\n        return tree;\n      }\n      return new DoWhileStatement(tree.location, body, condition);\n    },\n    transformEmptyStatement: function(tree) {\n      return tree;\n    },\n    transformExportDeclaration: function(tree) {\n      var declaration = this.transformAny(tree.declaration);\n      var annotations = this.transformList(tree.annotations);\n      if (declaration === tree.declaration && annotations === tree.annotations) {\n        return tree;\n      }\n      return new ExportDeclaration(tree.location, declaration, annotations);\n    },\n    transformExportDefault: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ExportDefault(tree.location, expression);\n    },\n    transformExportSpecifier: function(tree) {\n      return tree;\n    },\n    transformExportSpecifierSet: function(tree) {\n      var specifiers = this.transformList(tree.specifiers);\n      if (specifiers === tree.specifiers) {\n        return tree;\n      }\n      return new ExportSpecifierSet(tree.location, specifiers);\n    },\n    transformExportStar: function(tree) {\n      return tree;\n    },\n    transformExpressionStatement: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ExpressionStatement(tree.location, expression);\n    },\n    transformFinally: function(tree) {\n      var block = this.transformAny(tree.block);\n      if (block === tree.block) {\n        return tree;\n      }\n      return new Finally(tree.location, block);\n    },\n    transformForInStatement: function(tree) {\n      var initializer = this.transformAny(tree.initializer);\n      var collection = this.transformAny(tree.collection);\n      var body = this.transformToBlockOrStatement(tree.body);\n      if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {\n        return tree;\n      }\n      return new ForInStatement(tree.location, initializer, collection, body);\n    },\n    transformForOfStatement: function(tree) {\n      var initializer = this.transformAny(tree.initializer);\n      var collection = this.transformAny(tree.collection);\n      var body = this.transformToBlockOrStatement(tree.body);\n      if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {\n        return tree;\n      }\n      return new ForOfStatement(tree.location, initializer, collection, body);\n    },\n    transformForStatement: function(tree) {\n      var initializer = this.transformAny(tree.initializer);\n      var condition = this.transformAny(tree.condition);\n      var increment = this.transformAny(tree.increment);\n      var body = this.transformToBlockOrStatement(tree.body);\n      if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {\n        return tree;\n      }\n      return new ForStatement(tree.location, initializer, condition, increment, body);\n    },\n    transformFormalParameter: function(tree) {\n      var parameter = this.transformAny(tree.parameter);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      if (parameter === tree.parameter && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations) {\n        return tree;\n      }\n      return new FormalParameter(tree.location, parameter, typeAnnotation, annotations);\n    },\n    transformFormalParameterList: function(tree) {\n      var parameters = this.transformList(tree.parameters);\n      if (parameters === tree.parameters) {\n        return tree;\n      }\n      return new FormalParameterList(tree.location, parameters);\n    },\n    transformFunctionBody: function(tree) {\n      var statements = this.transformList(tree.statements);\n      if (statements === tree.statements) {\n        return tree;\n      }\n      return new FunctionBody(tree.location, statements);\n    },\n    transformFunctionDeclaration: function(tree) {\n      var name = this.transformAny(tree.name);\n      var parameterList = this.transformAny(tree.parameterList);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      var body = this.transformAny(tree.body);\n      if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {\n        return tree;\n      }\n      return new FunctionDeclaration(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);\n    },\n    transformFunctionExpression: function(tree) {\n      var name = this.transformAny(tree.name);\n      var parameterList = this.transformAny(tree.parameterList);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      var body = this.transformAny(tree.body);\n      if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {\n        return tree;\n      }\n      return new FunctionExpression(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);\n    },\n    transformGeneratorComprehension: function(tree) {\n      var comprehensionList = this.transformList(tree.comprehensionList);\n      var expression = this.transformAny(tree.expression);\n      if (comprehensionList === tree.comprehensionList && expression === tree.expression) {\n        return tree;\n      }\n      return new GeneratorComprehension(tree.location, comprehensionList, expression);\n    },\n    transformGetAccessor: function(tree) {\n      var name = this.transformAny(tree.name);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      var body = this.transformAny(tree.body);\n      if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {\n        return tree;\n      }\n      return new GetAccessor(tree.location, tree.isStatic, name, typeAnnotation, annotations, body);\n    },\n    transformIdentifierExpression: function(tree) {\n      return tree;\n    },\n    transformIfStatement: function(tree) {\n      var condition = this.transformAny(tree.condition);\n      var ifClause = this.transformToBlockOrStatement(tree.ifClause);\n      var elseClause = this.transformToBlockOrStatement(tree.elseClause);\n      if (condition === tree.condition && ifClause === tree.ifClause && elseClause === tree.elseClause) {\n        return tree;\n      }\n      return new IfStatement(tree.location, condition, ifClause, elseClause);\n    },\n    transformImportedBinding: function(tree) {\n      var binding = this.transformAny(tree.binding);\n      if (binding === tree.binding) {\n        return tree;\n      }\n      return new ImportedBinding(tree.location, binding);\n    },\n    transformImportDeclaration: function(tree) {\n      var importClause = this.transformAny(tree.importClause);\n      var moduleSpecifier = this.transformAny(tree.moduleSpecifier);\n      if (importClause === tree.importClause && moduleSpecifier === tree.moduleSpecifier) {\n        return tree;\n      }\n      return new ImportDeclaration(tree.location, importClause, moduleSpecifier);\n    },\n    transformImportSpecifier: function(tree) {\n      var binding = this.transformAny(tree.binding);\n      if (binding === tree.binding) {\n        return tree;\n      }\n      return new ImportSpecifier(tree.location, binding, tree.name);\n    },\n    transformImportSpecifierSet: function(tree) {\n      var specifiers = this.transformList(tree.specifiers);\n      if (specifiers === tree.specifiers) {\n        return tree;\n      }\n      return new ImportSpecifierSet(tree.location, specifiers);\n    },\n    transformLabelledStatement: function(tree) {\n      var statement = this.transformAny(tree.statement);\n      if (statement === tree.statement) {\n        return tree;\n      }\n      return new LabelledStatement(tree.location, tree.name, statement);\n    },\n    transformLiteralExpression: function(tree) {\n      return tree;\n    },\n    transformLiteralPropertyName: function(tree) {\n      return tree;\n    },\n    transformMemberExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      if (operand === tree.operand) {\n        return tree;\n      }\n      return new MemberExpression(tree.location, operand, tree.memberName);\n    },\n    transformMemberLookupExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var memberExpression = this.transformAny(tree.memberExpression);\n      if (operand === tree.operand && memberExpression === tree.memberExpression) {\n        return tree;\n      }\n      return new MemberLookupExpression(tree.location, operand, memberExpression);\n    },\n    transformModule: function(tree) {\n      var scriptItemList = this.transformList(tree.scriptItemList);\n      if (scriptItemList === tree.scriptItemList) {\n        return tree;\n      }\n      return new Module(tree.location, scriptItemList, tree.moduleName);\n    },\n    transformModuleDeclaration: function(tree) {\n      var binding = this.transformAny(tree.binding);\n      var expression = this.transformAny(tree.expression);\n      if (binding === tree.binding && expression === tree.expression) {\n        return tree;\n      }\n      return new ModuleDeclaration(tree.location, binding, expression);\n    },\n    transformModuleSpecifier: function(tree) {\n      return tree;\n    },\n    transformNamedExport: function(tree) {\n      var moduleSpecifier = this.transformAny(tree.moduleSpecifier);\n      var specifierSet = this.transformAny(tree.specifierSet);\n      if (moduleSpecifier === tree.moduleSpecifier && specifierSet === tree.specifierSet) {\n        return tree;\n      }\n      return new NamedExport(tree.location, moduleSpecifier, specifierSet);\n    },\n    transformNewExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var args = this.transformAny(tree.args);\n      if (operand === tree.operand && args === tree.args) {\n        return tree;\n      }\n      return new NewExpression(tree.location, operand, args);\n    },\n    transformObjectLiteralExpression: function(tree) {\n      var propertyNameAndValues = this.transformList(tree.propertyNameAndValues);\n      if (propertyNameAndValues === tree.propertyNameAndValues) {\n        return tree;\n      }\n      return new ObjectLiteralExpression(tree.location, propertyNameAndValues);\n    },\n    transformObjectPattern: function(tree) {\n      var fields = this.transformList(tree.fields);\n      if (fields === tree.fields) {\n        return tree;\n      }\n      return new ObjectPattern(tree.location, fields);\n    },\n    transformObjectPatternField: function(tree) {\n      var name = this.transformAny(tree.name);\n      var element = this.transformAny(tree.element);\n      if (name === tree.name && element === tree.element) {\n        return tree;\n      }\n      return new ObjectPatternField(tree.location, name, element);\n    },\n    transformParenExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ParenExpression(tree.location, expression);\n    },\n    transformPostfixExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      if (operand === tree.operand) {\n        return tree;\n      }\n      return new PostfixExpression(tree.location, operand, tree.operator);\n    },\n    transformPredefinedType: function(tree) {\n      return tree;\n    },\n    transformScript: function(tree) {\n      var scriptItemList = this.transformList(tree.scriptItemList);\n      if (scriptItemList === tree.scriptItemList) {\n        return tree;\n      }\n      return new Script(tree.location, scriptItemList, tree.moduleName);\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      var name = this.transformAny(tree.name);\n      var parameterList = this.transformAny(tree.parameterList);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      var body = this.transformAny(tree.body);\n      if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {\n        return tree;\n      }\n      return new PropertyMethodAssignment(tree.location, tree.isStatic, tree.functionKind, name, parameterList, typeAnnotation, annotations, body);\n    },\n    transformPropertyNameAssignment: function(tree) {\n      var name = this.transformAny(tree.name);\n      var value = this.transformAny(tree.value);\n      if (name === tree.name && value === tree.value) {\n        return tree;\n      }\n      return new PropertyNameAssignment(tree.location, name, value);\n    },\n    transformPropertyNameShorthand: function(tree) {\n      return tree;\n    },\n    transformPropertyVariableDeclaration: function(tree) {\n      var name = this.transformAny(tree.name);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var annotations = this.transformList(tree.annotations);\n      if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations) {\n        return tree;\n      }\n      return new PropertyVariableDeclaration(tree.location, tree.isStatic, name, typeAnnotation, annotations);\n    },\n    transformRestParameter: function(tree) {\n      var identifier = this.transformAny(tree.identifier);\n      if (identifier === tree.identifier) {\n        return tree;\n      }\n      return new RestParameter(tree.location, identifier);\n    },\n    transformReturnStatement: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new ReturnStatement(tree.location, expression);\n    },\n    transformSetAccessor: function(tree) {\n      var name = this.transformAny(tree.name);\n      var parameterList = this.transformAny(tree.parameterList);\n      var annotations = this.transformList(tree.annotations);\n      var body = this.transformAny(tree.body);\n      if (name === tree.name && parameterList === tree.parameterList && annotations === tree.annotations && body === tree.body) {\n        return tree;\n      }\n      return new SetAccessor(tree.location, tree.isStatic, name, parameterList, annotations, body);\n    },\n    transformSpreadExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new SpreadExpression(tree.location, expression);\n    },\n    transformSpreadPatternElement: function(tree) {\n      var lvalue = this.transformAny(tree.lvalue);\n      if (lvalue === tree.lvalue) {\n        return tree;\n      }\n      return new SpreadPatternElement(tree.location, lvalue);\n    },\n    transformSuperExpression: function(tree) {\n      return tree;\n    },\n    transformSwitchStatement: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      var caseClauses = this.transformList(tree.caseClauses);\n      if (expression === tree.expression && caseClauses === tree.caseClauses) {\n        return tree;\n      }\n      return new SwitchStatement(tree.location, expression, caseClauses);\n    },\n    transformSyntaxErrorTree: function(tree) {\n      return tree;\n    },\n    transformTemplateLiteralExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var elements = this.transformList(tree.elements);\n      if (operand === tree.operand && elements === tree.elements) {\n        return tree;\n      }\n      return new TemplateLiteralExpression(tree.location, operand, elements);\n    },\n    transformTemplateLiteralPortion: function(tree) {\n      return tree;\n    },\n    transformTemplateSubstitution: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new TemplateSubstitution(tree.location, expression);\n    },\n    transformThisExpression: function(tree) {\n      return tree;\n    },\n    transformThrowStatement: function(tree) {\n      var value = this.transformAny(tree.value);\n      if (value === tree.value) {\n        return tree;\n      }\n      return new ThrowStatement(tree.location, value);\n    },\n    transformTryStatement: function(tree) {\n      var body = this.transformAny(tree.body);\n      var catchBlock = this.transformAny(tree.catchBlock);\n      var finallyBlock = this.transformAny(tree.finallyBlock);\n      if (body === tree.body && catchBlock === tree.catchBlock && finallyBlock === tree.finallyBlock) {\n        return tree;\n      }\n      return new TryStatement(tree.location, body, catchBlock, finallyBlock);\n    },\n    transformTypeArguments: function(tree) {\n      var args = this.transformList(tree.args);\n      if (args === tree.args) {\n        return tree;\n      }\n      return new TypeArguments(tree.location, args);\n    },\n    transformTypeName: function(tree) {\n      var moduleName = this.transformAny(tree.moduleName);\n      if (moduleName === tree.moduleName) {\n        return tree;\n      }\n      return new TypeName(tree.location, moduleName, tree.name);\n    },\n    transformTypeReference: function(tree) {\n      var typeName = this.transformAny(tree.typeName);\n      var args = this.transformAny(tree.args);\n      if (typeName === tree.typeName && args === tree.args) {\n        return tree;\n      }\n      return new TypeReference(tree.location, typeName, args);\n    },\n    transformUnaryExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      if (operand === tree.operand) {\n        return tree;\n      }\n      return new UnaryExpression(tree.location, tree.operator, operand);\n    },\n    transformVariableDeclaration: function(tree) {\n      var lvalue = this.transformAny(tree.lvalue);\n      var typeAnnotation = this.transformAny(tree.typeAnnotation);\n      var initializer = this.transformAny(tree.initializer);\n      if (lvalue === tree.lvalue && typeAnnotation === tree.typeAnnotation && initializer === tree.initializer) {\n        return tree;\n      }\n      return new VariableDeclaration(tree.location, lvalue, typeAnnotation, initializer);\n    },\n    transformVariableDeclarationList: function(tree) {\n      var declarations = this.transformList(tree.declarations);\n      if (declarations === tree.declarations) {\n        return tree;\n      }\n      return new VariableDeclarationList(tree.location, tree.declarationType, declarations);\n    },\n    transformVariableStatement: function(tree) {\n      var declarations = this.transformAny(tree.declarations);\n      if (declarations === tree.declarations) {\n        return tree;\n      }\n      return new VariableStatement(tree.location, declarations);\n    },\n    transformWhileStatement: function(tree) {\n      var condition = this.transformAny(tree.condition);\n      var body = this.transformToBlockOrStatement(tree.body);\n      if (condition === tree.condition && body === tree.body) {\n        return tree;\n      }\n      return new WhileStatement(tree.location, condition, body);\n    },\n    transformWithStatement: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      var body = this.transformToBlockOrStatement(tree.body);\n      if (expression === tree.expression && body === tree.body) {\n        return tree;\n      }\n      return new WithStatement(tree.location, expression, body);\n    },\n    transformYieldExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression) {\n        return tree;\n      }\n      return new YieldExpression(tree.location, expression, tree.isYieldFor);\n    }\n  }, {});\n  return {get ParseTreeTransformer() {\n      return ParseTreeTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/PlaceholderParser\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARGUMENT_LIST = $__0.ARGUMENT_LIST,\n      BLOCK = $__0.BLOCK,\n      EXPRESSION_STATEMENT = $__0.EXPRESSION_STATEMENT,\n      IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION;\n  var IdentifierToken = System.get(\"traceur@0.0.74/src/syntax/IdentifierToken\").IdentifierToken;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var Map = System.get(\"traceur@0.0.74/src/runtime/polyfills/Map\").Map;\n  var CollectingErrorReporter = System.get(\"traceur@0.0.74/src/util/CollectingErrorReporter\").CollectingErrorReporter;\n  var Options = System.get(\"traceur@0.0.74/src/Options\").Options;\n  var ParseTree = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTree\").ParseTree;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var Parser = System.get(\"traceur@0.0.74/src/syntax/Parser\").Parser;\n  var $__9 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      LiteralExpression = $__9.LiteralExpression,\n      LiteralPropertyName = $__9.LiteralPropertyName,\n      TypeName = $__9.TypeName;\n  var SourceFile = System.get(\"traceur@0.0.74/src/syntax/SourceFile\").SourceFile;\n  var IDENTIFIER = System.get(\"traceur@0.0.74/src/syntax/TokenType\").IDENTIFIER;\n  var $__12 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArrayLiteralExpression = $__12.createArrayLiteralExpression,\n      createBindingIdentifier = $__12.createBindingIdentifier,\n      createBlock = $__12.createBlock,\n      createBooleanLiteral = $__12.createBooleanLiteral,\n      createCommaExpression = $__12.createCommaExpression,\n      createExpressionStatement = $__12.createExpressionStatement,\n      createFunctionBody = $__12.createFunctionBody,\n      createIdentifierExpression = $__12.createIdentifierExpression,\n      createIdentifierToken = $__12.createIdentifierToken,\n      createMemberExpression = $__12.createMemberExpression,\n      createNullLiteral = $__12.createNullLiteral,\n      createNumberLiteral = $__12.createNumberLiteral,\n      createParenExpression = $__12.createParenExpression,\n      createStringLiteral = $__12.createStringLiteral,\n      createVoid0 = $__12.createVoid0;\n  var NOT_FOUND = {};\n  var cache = new Map();\n  function makeParseFunction(doParse) {\n    return (function(sourceLiterals) {\n      for (var values = [],\n          $__14 = 1; $__14 < arguments.length; $__14++)\n        values[$__14 - 1] = arguments[$__14];\n      return parse(sourceLiterals, values, doParse);\n    });\n  }\n  var parseExpression = makeParseFunction((function(p) {\n    return p.parseExpression();\n  }));\n  var parseStatement = makeParseFunction((function(p) {\n    return p.parseStatement();\n  }));\n  var parseModule = makeParseFunction((function(p) {\n    return p.parseModule();\n  }));\n  var parseScript = makeParseFunction((function(p) {\n    return p.parseScript();\n  }));\n  var parseStatements = makeParseFunction((function(p) {\n    return p.parseStatements();\n  }));\n  var parsePropertyDefinition = makeParseFunction((function(p) {\n    return p.parsePropertyDefinition();\n  }));\n  function parse(sourceLiterals, values, doParse) {\n    var tree = cache.get(sourceLiterals);\n    if (!tree) {\n      var source = insertPlaceholderIdentifiers(sourceLiterals);\n      var errorReporter = new CollectingErrorReporter();\n      var parser = getParser(source, errorReporter);\n      tree = doParse(parser);\n      if (errorReporter.hadError() || !tree || !parser.isAtEnd()) {\n        throw new Error((\"Internal error trying to parse:\\n\\n\" + source + \"\\n\\n\" + errorReporter.errorsAsString()));\n      }\n      cache.set(sourceLiterals, tree);\n    }\n    if (!values.length)\n      return tree;\n    if (tree instanceof ParseTree)\n      return new PlaceholderTransformer(values).transformAny(tree);\n    return new PlaceholderTransformer(values).transformList(tree);\n  }\n  var PREFIX = '$__placeholder__';\n  function insertPlaceholderIdentifiers(sourceLiterals) {\n    var source = sourceLiterals[0];\n    for (var i = 1; i < sourceLiterals.length; i++) {\n      source += PREFIX + (i - 1) + sourceLiterals[i];\n    }\n    return source;\n  }\n  var counter = 0;\n  function getParser(source, errorReporter) {\n    var file = new SourceFile('@traceur/generated/TemplateParser/' + counter++, source);\n    var options = new Options();\n    options.types = true;\n    var parser = new Parser(file, errorReporter, options);\n    parser.allowYield = true;\n    parser.allowAwait = true;\n    return parser;\n  }\n  function convertValueToExpression(value) {\n    if (value instanceof ParseTree)\n      return value;\n    if (value instanceof IdentifierToken)\n      return createIdentifierExpression(value);\n    if (value instanceof LiteralToken)\n      return new LiteralExpression(value.location, value);\n    if (Array.isArray(value)) {\n      if (value[0] instanceof ParseTree) {\n        if (value.length === 1)\n          return value[0];\n        if (value[0].isStatement())\n          return createBlock(value);\n        else\n          return createParenExpression(createCommaExpression(value));\n      }\n      return createArrayLiteralExpression(value.map(convertValueToExpression));\n    }\n    if (value === null)\n      return createNullLiteral();\n    if (value === undefined)\n      return createVoid0();\n    switch (typeof value) {\n      case 'string':\n        return createStringLiteral(value);\n      case 'boolean':\n        return createBooleanLiteral(value);\n      case 'number':\n        return createNumberLiteral(value);\n    }\n    throw new Error('Not implemented');\n  }\n  function convertValueToIdentifierToken(value) {\n    if (value instanceof IdentifierToken)\n      return value;\n    return createIdentifierToken(value);\n  }\n  function convertValueToType(value) {\n    if (value === null)\n      return null;\n    if (value instanceof ParseTree)\n      return value;\n    if (typeof value === 'string') {\n      return new TypeName(null, null, convertValueToIdentifierToken(value));\n    }\n    if (value instanceof IdentifierToken) {\n      return new TypeName(null, null, value);\n    }\n    throw new Error('Not implemented');\n  }\n  var PlaceholderTransformer = function PlaceholderTransformer(values) {\n    $traceurRuntime.superConstructor($PlaceholderTransformer).call(this);\n    this.values = values;\n  };\n  var $PlaceholderTransformer = PlaceholderTransformer;\n  ($traceurRuntime.createClass)(PlaceholderTransformer, {\n    getValueAt: function(index) {\n      return this.values[index];\n    },\n    getValue_: function(str) {\n      if (str.indexOf(PREFIX) !== 0)\n        return NOT_FOUND;\n      return this.getValueAt(Number(str.slice(PREFIX.length)));\n    },\n    transformIdentifierExpression: function(tree) {\n      var value = this.getValue_(tree.identifierToken.value);\n      if (value === NOT_FOUND)\n        return tree;\n      return convertValueToExpression(value);\n    },\n    transformBindingIdentifier: function(tree) {\n      var value = this.getValue_(tree.identifierToken.value);\n      if (value === NOT_FOUND)\n        return tree;\n      return createBindingIdentifier(value);\n    },\n    transformExpressionStatement: function(tree) {\n      if (tree.expression.type === IDENTIFIER_EXPRESSION) {\n        var transformedExpression = this.transformIdentifierExpression(tree.expression);\n        if (transformedExpression === tree.expression)\n          return tree;\n        if (transformedExpression.isStatement())\n          return transformedExpression;\n        return createExpressionStatement(transformedExpression);\n      }\n      return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformExpressionStatement\").call(this, tree);\n    },\n    transformBlock: function(tree) {\n      if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) {\n        var transformedStatement = this.transformExpressionStatement(tree.statements[0]);\n        if (transformedStatement === tree.statements[0])\n          return tree;\n        if (transformedStatement.type === BLOCK)\n          return transformedStatement;\n      }\n      return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformBlock\").call(this, tree);\n    },\n    transformFunctionBody: function(tree) {\n      if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) {\n        var transformedStatement = this.transformExpressionStatement(tree.statements[0]);\n        if (transformedStatement === tree.statements[0])\n          return tree;\n        if (transformedStatement.type === BLOCK)\n          return createFunctionBody(transformedStatement.statements);\n      }\n      return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n    },\n    transformMemberExpression: function(tree) {\n      var value = this.getValue_(tree.memberName.value);\n      if (value === NOT_FOUND)\n        return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformMemberExpression\").call(this, tree);\n      var operand = this.transformAny(tree.operand);\n      return createMemberExpression(operand, value);\n    },\n    transformLiteralPropertyName: function(tree) {\n      if (tree.literalToken.type === IDENTIFIER) {\n        var value = this.getValue_(tree.literalToken.value);\n        if (value !== NOT_FOUND) {\n          return new LiteralPropertyName(null, convertValueToIdentifierToken(value));\n        }\n      }\n      return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformLiteralPropertyName\").call(this, tree);\n    },\n    transformArgumentList: function(tree) {\n      if (tree.args.length === 1 && tree.args[0].type === IDENTIFIER_EXPRESSION) {\n        var arg0 = this.transformAny(tree.args[0]);\n        if (arg0 === tree.args[0])\n          return tree;\n        if (arg0.type === ARGUMENT_LIST)\n          return arg0;\n      }\n      return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformArgumentList\").call(this, tree);\n    },\n    transformTypeName: function(tree) {\n      var value = this.getValue_(tree.name.value);\n      if (value === NOT_FOUND)\n        return $traceurRuntime.superGet(this, $PlaceholderTransformer.prototype, \"transformTypeName\").call(this, tree);\n      var moduleName = this.transformAny(tree.moduleName);\n      if (moduleName !== null) {\n        return new TypeName(null, moduleName, convertValueToIdentifierToken(value));\n      }\n      return convertValueToType(value);\n    }\n  }, {}, ParseTreeTransformer);\n  return {\n    get parseExpression() {\n      return parseExpression;\n    },\n    get parseStatement() {\n      return parseStatement;\n    },\n    get parseModule() {\n      return parseModule;\n    },\n    get parseScript() {\n      return parseScript;\n    },\n    get parseStatements() {\n      return parseStatements;\n    },\n    get parsePropertyDefinition() {\n      return parsePropertyDefinition;\n    },\n    get PlaceholderTransformer() {\n      return PlaceholderTransformer;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/PrependStatements\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/PrependStatements\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/PrependStatements\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      EXPRESSION_STATEMENT = $__0.EXPRESSION_STATEMENT,\n      LITERAL_EXPRESSION = $__0.LITERAL_EXPRESSION;\n  var STRING = System.get(\"traceur@0.0.74/src/syntax/TokenType\").STRING;\n  function isStringExpressionStatement(tree) {\n    return tree.type === EXPRESSION_STATEMENT && tree.expression.type === LITERAL_EXPRESSION && tree.expression.literalToken.type === STRING;\n  }\n  function prependStatements(statements) {\n    for (var statementsToPrepend = [],\n        $__2 = 1; $__2 < arguments.length; $__2++)\n      statementsToPrepend[$__2 - 1] = arguments[$__2];\n    if (!statements.length)\n      return statementsToPrepend;\n    if (!statementsToPrepend.length)\n      return statements;\n    var transformed = [];\n    var inProlog = true;\n    statements.forEach((function(statement) {\n      var $__3;\n      if (inProlog && !isStringExpressionStatement(statement)) {\n        ($__3 = transformed).push.apply($__3, $traceurRuntime.spread(statementsToPrepend));\n        inProlog = false;\n      }\n      transformed.push(statement);\n    }));\n    return transformed;\n  }\n  return {get prependStatements() {\n      return prependStatements;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/TempVarTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      Module = $__1.Module,\n      Script = $__1.Script;\n  var ARGUMENTS = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").ARGUMENTS;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createFunctionBody = $__4.createFunctionBody,\n      createThisExpression = $__4.createThisExpression,\n      createIdentifierExpression = $__4.createIdentifierExpression,\n      createVariableDeclaration = $__4.createVariableDeclaration,\n      createVariableDeclarationList = $__4.createVariableDeclarationList,\n      createVariableStatement = $__4.createVariableStatement;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var TempVarStatement = function TempVarStatement(name, initializer) {\n    this.name = name;\n    this.initializer = initializer;\n  };\n  ($traceurRuntime.createClass)(TempVarStatement, {}, {});\n  var TempScope = function TempScope() {\n    this.identifiers = [];\n  };\n  ($traceurRuntime.createClass)(TempScope, {\n    push: function(identifier) {\n      this.identifiers.push(identifier);\n    },\n    pop: function() {\n      return this.identifiers.pop();\n    },\n    release: function(obj) {\n      for (var i = this.identifiers.length - 1; i >= 0; i--) {\n        obj.release_(this.identifiers[i]);\n      }\n    }\n  }, {});\n  var VarScope = function VarScope() {\n    this.thisName = null;\n    this.argumentName = null;\n    this.tempVarStatements = [];\n  };\n  ($traceurRuntime.createClass)(VarScope, {\n    push: function(tempVarStatement) {\n      this.tempVarStatements.push(tempVarStatement);\n    },\n    pop: function() {\n      return this.tempVarStatements.pop();\n    },\n    release: function(obj) {\n      for (var i = this.tempVarStatements.length - 1; i >= 0; i--) {\n        obj.release_(this.tempVarStatements[i].name);\n      }\n    },\n    isEmpty: function() {\n      return !this.tempVarStatements.length;\n    },\n    createVariableStatement: function() {\n      var declarations = [];\n      var seenNames = Object.create(null);\n      for (var i = 0; i < this.tempVarStatements.length; i++) {\n        var $__7 = this.tempVarStatements[i],\n            name = $__7.name,\n            initializer = $__7.initializer;\n        if (name in seenNames) {\n          if (seenNames[name].initializer || initializer)\n            throw new Error('Invalid use of TempVarTransformer');\n          continue;\n        }\n        seenNames[name] = true;\n        declarations.push(createVariableDeclaration(name, initializer));\n      }\n      return createVariableStatement(createVariableDeclarationList(VAR, declarations));\n    }\n  }, {});\n  var TempVarTransformer = function TempVarTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($TempVarTransformer).call(this);\n    this.identifierGenerator = identifierGenerator;\n    this.tempVarStack_ = [new VarScope()];\n    this.tempScopeStack_ = [new TempScope()];\n    this.namePool_ = [];\n  };\n  var $TempVarTransformer = TempVarTransformer;\n  ($traceurRuntime.createClass)(TempVarTransformer, {\n    transformStatements_: function(statements) {\n      this.tempVarStack_.push(new VarScope());\n      var transformedStatements = this.transformList(statements);\n      var vars = this.tempVarStack_.pop();\n      if (vars.isEmpty())\n        return transformedStatements;\n      var variableStatement = vars.createVariableStatement();\n      vars.release(this);\n      return prependStatements(transformedStatements, variableStatement);\n    },\n    transformScript: function(tree) {\n      var scriptItemList = this.transformStatements_(tree.scriptItemList);\n      if (scriptItemList == tree.scriptItemList) {\n        return tree;\n      }\n      return new Script(tree.location, scriptItemList, tree.moduleName);\n    },\n    transformModule: function(tree) {\n      var scriptItemList = this.transformStatements_(tree.scriptItemList);\n      if (scriptItemList == tree.scriptItemList) {\n        return tree;\n      }\n      return new Module(tree.location, scriptItemList, tree.moduleName);\n    },\n    transformFunctionBody: function(tree) {\n      this.pushTempScope();\n      var statements = this.transformStatements_(tree.statements);\n      this.popTempScope();\n      if (statements == tree.statements)\n        return tree;\n      return createFunctionBody(statements);\n    },\n    getTempIdentifier: function() {\n      var name = this.getName_();\n      this.tempScopeStack_[this.tempScopeStack_.length - 1].push(name);\n      return name;\n    },\n    getName_: function() {\n      return this.namePool_.length ? this.namePool_.pop() : this.identifierGenerator.generateUniqueIdentifier();\n    },\n    addTempVar: function() {\n      var initializer = arguments[0] !== (void 0) ? arguments[0] : null;\n      var vars = this.tempVarStack_[this.tempVarStack_.length - 1];\n      var name = this.getName_();\n      vars.push(new TempVarStatement(name, initializer));\n      return name;\n    },\n    addTempVarForThis: function() {\n      var varScope = this.tempVarStack_[this.tempVarStack_.length - 1];\n      return varScope.thisName || (varScope.thisName = this.addTempVar(createThisExpression()));\n    },\n    addTempVarForArguments: function() {\n      var varScope = this.tempVarStack_[this.tempVarStack_.length - 1];\n      return varScope.argumentName || (varScope.argumentName = this.addTempVar(createIdentifierExpression(ARGUMENTS)));\n    },\n    pushTempScope: function() {\n      this.tempScopeStack_.push(new TempScope());\n    },\n    popTempScope: function() {\n      this.tempScopeStack_.pop().release(this);\n    },\n    release_: function(name) {\n      this.namePool_.push(name);\n    }\n  }, {}, ParseTreeTransformer);\n  return {get TempVarTransformer() {\n      return TempVarTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/DestructuringTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/DestructuringTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/DestructuringTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"Array.prototype.slice.call(\", \", \", \")\"], {raw: {value: Object.freeze([\"Array.prototype.slice.call(\", \", \", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"(\", \" = \", \".\", \") === void 0 ?\\n        \", \" : \", \"\"], {raw: {value: Object.freeze([\"(\", \" = \", \".\", \") === void 0 ?\\n        \", \" : \", \"\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"(\", \" = \", \"[\", \"]) === void 0 ?\\n        \", \" : \", \"\"], {raw: {value: Object.freeze([\"(\", \" = \", \"[\", \"]) === void 0 ?\\n        \", \" : \", \"\"])}}));\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARRAY_LITERAL_EXPRESSION = $__3.ARRAY_LITERAL_EXPRESSION,\n      ARRAY_PATTERN = $__3.ARRAY_PATTERN,\n      ASSIGNMENT_ELEMENT = $__3.ASSIGNMENT_ELEMENT,\n      BINDING_ELEMENT = $__3.BINDING_ELEMENT,\n      BINDING_IDENTIFIER = $__3.BINDING_IDENTIFIER,\n      BLOCK = $__3.BLOCK,\n      CALL_EXPRESSION = $__3.CALL_EXPRESSION,\n      COMPUTED_PROPERTY_NAME = $__3.COMPUTED_PROPERTY_NAME,\n      IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION,\n      LITERAL_EXPRESSION = $__3.LITERAL_EXPRESSION,\n      MEMBER_EXPRESSION = $__3.MEMBER_EXPRESSION,\n      MEMBER_LOOKUP_EXPRESSION = $__3.MEMBER_LOOKUP_EXPRESSION,\n      OBJECT_LITERAL_EXPRESSION = $__3.OBJECT_LITERAL_EXPRESSION,\n      OBJECT_PATTERN = $__3.OBJECT_PATTERN,\n      OBJECT_PATTERN_FIELD = $__3.OBJECT_PATTERN_FIELD,\n      PAREN_EXPRESSION = $__3.PAREN_EXPRESSION,\n      VARIABLE_DECLARATION_LIST = $__3.VARIABLE_DECLARATION_LIST;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AssignmentElement = $__4.AssignmentElement,\n      BindingElement = $__4.BindingElement,\n      Catch = $__4.Catch,\n      ForInStatement = $__4.ForInStatement,\n      ForOfStatement = $__4.ForOfStatement;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__6 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      EQUAL = $__6.EQUAL,\n      LET = $__6.LET,\n      VAR = $__6.VAR;\n  var $__7 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignmentExpression = $__7.createAssignmentExpression,\n      createBindingIdentifier = $__7.createBindingIdentifier,\n      createBlock = $__7.createBlock,\n      createCommaExpression = $__7.createCommaExpression,\n      createExpressionStatement = $__7.createExpressionStatement,\n      createFunctionBody = $__7.createFunctionBody,\n      createIdentifierExpression = $__7.createIdentifierExpression,\n      createMemberExpression = $__7.createMemberExpression,\n      createMemberLookupExpression = $__7.createMemberLookupExpression,\n      createNumberLiteral = $__7.createNumberLiteral,\n      createParenExpression = $__7.createParenExpression,\n      createVariableDeclaration = $__7.createVariableDeclaration,\n      createVariableDeclarationList = $__7.createVariableDeclarationList,\n      createVariableStatement = $__7.createVariableStatement;\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var Desugaring = function Desugaring(rvalue) {\n    this.rvalue = rvalue;\n  };\n  ($traceurRuntime.createClass)(Desugaring, {}, {});\n  var AssignmentExpressionDesugaring = function AssignmentExpressionDesugaring(rvalue) {\n    $traceurRuntime.superConstructor($AssignmentExpressionDesugaring).call(this, rvalue);\n    this.expressions = [];\n  };\n  var $AssignmentExpressionDesugaring = AssignmentExpressionDesugaring;\n  ($traceurRuntime.createClass)(AssignmentExpressionDesugaring, {assign: function(lvalue, rvalue) {\n      lvalue = lvalue instanceof AssignmentElement ? lvalue.assignment : lvalue;\n      this.expressions.push(createAssignmentExpression(lvalue, rvalue));\n    }}, {}, Desugaring);\n  var VariableDeclarationDesugaring = function VariableDeclarationDesugaring(rvalue) {\n    $traceurRuntime.superConstructor($VariableDeclarationDesugaring).call(this, rvalue);\n    this.declarations = [];\n  };\n  var $VariableDeclarationDesugaring = VariableDeclarationDesugaring;\n  ($traceurRuntime.createClass)(VariableDeclarationDesugaring, {assign: function(lvalue, rvalue) {\n      var binding = lvalue instanceof BindingElement ? lvalue.binding : createBindingIdentifier(lvalue);\n      this.declarations.push(createVariableDeclaration(binding, rvalue));\n    }}, {}, Desugaring);\n  var DestructuringTransformer = function DestructuringTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($DestructuringTransformer).call(this, identifierGenerator);\n    this.parameterDeclarations = null;\n  };\n  var $DestructuringTransformer = DestructuringTransformer;\n  ($traceurRuntime.createClass)(DestructuringTransformer, {\n    transformArrayPattern: function(tree) {\n      throw new Error('unreachable');\n    },\n    transformObjectPattern: function(tree) {\n      throw new Error('unreachable');\n    },\n    transformBinaryExpression: function(tree) {\n      this.pushTempScope();\n      var rv;\n      if (tree.operator.type == EQUAL && tree.left.isPattern()) {\n        rv = this.transformAny(this.desugarAssignment_(tree.left, tree.right));\n      } else {\n        rv = $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformBinaryExpression\").call(this, tree);\n      }\n      this.popTempScope();\n      return rv;\n    },\n    desugarAssignment_: function(lvalue, rvalue) {\n      var tempIdent = createIdentifierExpression(this.addTempVar());\n      var desugaring = new AssignmentExpressionDesugaring(tempIdent);\n      this.desugarPattern_(desugaring, lvalue);\n      desugaring.expressions.unshift(createAssignmentExpression(tempIdent, rvalue));\n      desugaring.expressions.push(tempIdent);\n      return createParenExpression(createCommaExpression(desugaring.expressions));\n    },\n    transformVariableDeclarationList: function(tree) {\n      var $__11 = this;\n      if (!this.destructuringInDeclaration_(tree)) {\n        return $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformVariableDeclarationList\").call(this, tree);\n      }\n      var desugaredDeclarations = [];\n      tree.declarations.forEach((function(declaration) {\n        var $__13;\n        if (declaration.lvalue.isPattern()) {\n          ($__13 = desugaredDeclarations).push.apply($__13, $traceurRuntime.spread($__11.desugarVariableDeclaration_(declaration)));\n        } else {\n          desugaredDeclarations.push(declaration);\n        }\n      }));\n      var transformedTree = this.transformVariableDeclarationList(createVariableDeclarationList(tree.declarationType, desugaredDeclarations));\n      return transformedTree;\n    },\n    transformForInStatement: function(tree) {\n      return this.transformForInOrOf_(tree, $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformForInStatement\"), ForInStatement);\n    },\n    transformForOfStatement: function(tree) {\n      return this.transformForInOrOf_(tree, $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformForOfStatement\"), ForOfStatement);\n    },\n    transformForInOrOf_: function(tree, superMethod, constr) {\n      var $__13;\n      if (!tree.initializer.isPattern() && (tree.initializer.type !== VARIABLE_DECLARATION_LIST || !this.destructuringInDeclaration_(tree.initializer))) {\n        return superMethod.call(this, tree);\n      }\n      this.pushTempScope();\n      var declarationType,\n          lvalue;\n      if (tree.initializer.isPattern()) {\n        declarationType = null;\n        lvalue = tree.initializer;\n      } else {\n        declarationType = tree.initializer.declarationType;\n        lvalue = tree.initializer.declarations[0].lvalue;\n      }\n      var statements = [];\n      var binding = this.desugarBinding_(lvalue, statements, declarationType);\n      var initializer = createVariableDeclarationList(VAR, binding, null);\n      var collection = this.transformAny(tree.collection);\n      var body = this.transformAny(tree.body);\n      if (body.type === BLOCK)\n        ($__13 = statements).push.apply($__13, $traceurRuntime.spread(body.statements));\n      else\n        statements.push(body);\n      body = createBlock(statements);\n      this.popTempScope();\n      return new constr(tree.location, initializer, collection, body);\n    },\n    transformAssignmentElement: function(tree) {\n      throw new Error('unreachable');\n    },\n    transformBindingElement: function(tree) {\n      if (!tree.binding.isPattern() || tree.initializer)\n        return tree;\n      if (this.parameterDeclarations === null) {\n        this.parameterDeclarations = [];\n        this.pushTempScope();\n      }\n      var varName = this.getTempIdentifier();\n      var binding = createBindingIdentifier(varName);\n      var initializer = createIdentifierExpression(varName);\n      var decl = createVariableDeclaration(tree.binding, initializer);\n      this.parameterDeclarations.push(decl);\n      return new BindingElement(null, binding, null);\n    },\n    transformFunctionBody: function(tree) {\n      if (this.parameterDeclarations === null)\n        return $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n      var list = createVariableDeclarationList(VAR, this.parameterDeclarations);\n      var statement = createVariableStatement(list);\n      var statements = prependStatements(tree.statements, statement);\n      var newBody = createFunctionBody(statements);\n      this.parameterDeclarations = null;\n      var result = $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformFunctionBody\").call(this, newBody);\n      this.popTempScope();\n      return result;\n    },\n    transformCatch: function(tree) {\n      var $__13;\n      if (!tree.binding.isPattern())\n        return $traceurRuntime.superGet(this, $DestructuringTransformer.prototype, \"transformCatch\").call(this, tree);\n      var body = this.transformAny(tree.catchBody);\n      var statements = [];\n      var kind = options.blockBinding ? LET : VAR;\n      var binding = this.desugarBinding_(tree.binding, statements, kind);\n      ($__13 = statements).push.apply($__13, $traceurRuntime.spread(body.statements));\n      return new Catch(tree.location, binding, createBlock(statements));\n    },\n    desugarBinding_: function(bindingTree, statements, declarationType) {\n      var varName = this.getTempIdentifier();\n      var binding = createBindingIdentifier(varName);\n      var idExpr = createIdentifierExpression(varName);\n      var desugaring;\n      if (declarationType === null)\n        desugaring = new AssignmentExpressionDesugaring(idExpr);\n      else\n        desugaring = new VariableDeclarationDesugaring(idExpr);\n      this.desugarPattern_(desugaring, bindingTree);\n      if (declarationType === null) {\n        statements.push(createExpressionStatement(createCommaExpression(desugaring.expressions)));\n      } else {\n        statements.push(createVariableStatement(this.transformVariableDeclarationList(createVariableDeclarationList(declarationType, desugaring.declarations))));\n      }\n      return binding;\n    },\n    destructuringInDeclaration_: function(tree) {\n      return tree.declarations.some((function(declaration) {\n        return declaration.lvalue.isPattern();\n      }));\n    },\n    desugarVariableDeclaration_: function(tree) {\n      var tempRValueName = this.getTempIdentifier();\n      var tempRValueIdent = createIdentifierExpression(tempRValueName);\n      var desugaring;\n      var initializer;\n      switch (tree.initializer.type) {\n        case ARRAY_LITERAL_EXPRESSION:\n        case CALL_EXPRESSION:\n        case IDENTIFIER_EXPRESSION:\n        case LITERAL_EXPRESSION:\n        case MEMBER_EXPRESSION:\n        case MEMBER_LOOKUP_EXPRESSION:\n        case OBJECT_LITERAL_EXPRESSION:\n        case PAREN_EXPRESSION:\n          initializer = tree.initializer;\n        default:\n          desugaring = new VariableDeclarationDesugaring(tempRValueIdent);\n          desugaring.assign(desugaring.rvalue, tree.initializer);\n          var initializerFound = this.desugarPattern_(desugaring, tree.lvalue);\n          if (initializerFound || desugaring.declarations.length > 2) {\n            return desugaring.declarations;\n          }\n          if (!initializer) {\n            initializer = createParenExpression(tree.initializer);\n          }\n          desugaring = new VariableDeclarationDesugaring(initializer);\n          this.desugarPattern_(desugaring, tree.lvalue);\n          return desugaring.declarations;\n      }\n    },\n    desugarPattern_: function(desugaring, tree) {\n      var $__11 = this;\n      var initializerFound = false;\n      switch (tree.type) {\n        case ARRAY_PATTERN:\n          var pattern = tree;\n          for (var i = 0; i < pattern.elements.length; i++) {\n            var lvalue = pattern.elements[i];\n            if (lvalue === null) {\n              continue;\n            } else if (lvalue.isSpreadPatternElement()) {\n              desugaring.assign(lvalue.lvalue, parseExpression($__0, desugaring.rvalue, i));\n            } else {\n              if (lvalue.initializer)\n                initializerFound = true;\n              desugaring.assign(lvalue, this.createConditionalMemberLookupExpression(desugaring.rvalue, createNumberLiteral(i), lvalue.initializer));\n            }\n          }\n          break;\n        case OBJECT_PATTERN:\n          var pattern = tree;\n          var elementHelper = (function(lvalue, initializer) {\n            if (initializer)\n              initializerFound = true;\n            var lookup = $__11.createConditionalMemberExpression(desugaring.rvalue, lvalue, initializer);\n            desugaring.assign(lvalue, lookup);\n          });\n          pattern.fields.forEach((function(field) {\n            var lookup;\n            switch (field.type) {\n              case ASSIGNMENT_ELEMENT:\n                elementHelper(field.assignment, field.initializer);\n                break;\n              case BINDING_ELEMENT:\n                elementHelper(field.binding, field.initializer);\n                break;\n              case OBJECT_PATTERN_FIELD:\n                if (field.element.initializer)\n                  initializerFound = true;\n                var name = field.name;\n                lookup = $__11.createConditionalMemberExpression(desugaring.rvalue, name, field.element.initializer);\n                desugaring.assign(field.element, lookup);\n                break;\n              default:\n                throw Error('unreachable');\n            }\n          }));\n          break;\n        case PAREN_EXPRESSION:\n          return this.desugarPattern_(desugaring, tree.expression);\n        default:\n          throw new Error('unreachable');\n      }\n      if (desugaring instanceof VariableDeclarationDesugaring && desugaring.declarations.length === 0) {\n        desugaring.assign(createBindingIdentifier(this.getTempIdentifier()), desugaring.rvalue);\n      }\n      return initializerFound;\n    },\n    createConditionalMemberExpression: function(rvalue, name, initializer) {\n      if (name.type === COMPUTED_PROPERTY_NAME) {\n        return this.createConditionalMemberLookupExpression(rvalue, name.expression, initializer);\n      }\n      var token;\n      switch (name.type) {\n        case BINDING_IDENTIFIER:\n        case IDENTIFIER_EXPRESSION:\n          token = name.identifierToken;\n          break;\n        default:\n          token = name.literalToken;\n      }\n      if (!initializer)\n        return createMemberExpression(rvalue, token);\n      var tempIdent = createIdentifierExpression(this.addTempVar());\n      return parseExpression($__1, tempIdent, rvalue, token, initializer, tempIdent);\n    },\n    createConditionalMemberLookupExpression: function(rvalue, index, initializer) {\n      if (!initializer)\n        return createMemberLookupExpression(rvalue, index);\n      var tempIdent = createIdentifierExpression(this.addTempVar());\n      return parseExpression($__2, tempIdent, rvalue, index, initializer, tempIdent);\n    }\n  }, {}, TempVarTransformer);\n  return {get DestructuringTransformer() {\n      return DestructuringTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\", path);\n  }\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var ExportsList = function ExportsList(normalizedName) {\n    this.exports_ = Object.create(null);\n    if (normalizedName !== null)\n      this.normalizedName = normalizedName.replace(/\\\\/g, '/');\n    else\n      this.normalizedName = null;\n  };\n  ($traceurRuntime.createClass)(ExportsList, {\n    addExport: function(name, tree) {\n      assert(!this.exports_[name]);\n      this.exports_[name] = tree;\n    },\n    getExport: function(name) {\n      return this.exports_[name];\n    },\n    getExports: function() {\n      return Object.keys(this.exports_);\n    },\n    addExportsFromModule: function(module) {\n      var $__1 = this;\n      Object.getOwnPropertyNames(module).forEach((function(name) {\n        $__1.addExport(name, true);\n      }));\n    }\n  }, {});\n  var ModuleSymbol = function ModuleSymbol(tree, normalizedName) {\n    $traceurRuntime.superConstructor($ModuleSymbol).call(this, normalizedName);\n    this.tree = tree;\n    this.imports_ = Object.create(null);\n  };\n  var $ModuleSymbol = ModuleSymbol;\n  ($traceurRuntime.createClass)(ModuleSymbol, {\n    addImport: function(name, tree) {\n      assert(!this.imports_[name]);\n      this.imports_[name] = tree;\n    },\n    getImport: function(name) {\n      return this.imports_[name];\n    }\n  }, {}, ExportsList);\n  return {\n    get ExportsList() {\n      return ExportsList;\n    },\n    get ModuleSymbol() {\n      return ModuleSymbol;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ModuleVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ModuleVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ModuleVisitor\", path);\n  }\n  var ExportsList = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\").ExportsList;\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      MODULE_DECLARATION = $__2.MODULE_DECLARATION,\n      EXPORT_DECLARATION = $__2.EXPORT_DECLARATION,\n      IMPORT_DECLARATION = $__2.IMPORT_DECLARATION;\n  var ModuleVisitor = function ModuleVisitor(reporter, loader, moduleSymbol) {\n    this.reporter = reporter;\n    this.loader_ = loader;\n    this.moduleSymbol = moduleSymbol;\n  };\n  ($traceurRuntime.createClass)(ModuleVisitor, {\n    getExportsListForModuleSpecifier: function(name) {\n      var referrer = this.moduleSymbol.normalizedName;\n      return this.loader_.getExportsListForModuleSpecifier(name, referrer);\n    },\n    visitFunctionDeclaration: function(tree) {},\n    visitFunctionExpression: function(tree) {},\n    visitFunctionBody: function(tree) {},\n    visitBlock: function(tree) {},\n    visitClassDeclaration: function(tree) {},\n    visitClassExpression: function(tree) {},\n    visitModuleElement_: function(element) {\n      switch (element.type) {\n        case MODULE_DECLARATION:\n        case EXPORT_DECLARATION:\n        case IMPORT_DECLARATION:\n          this.visitAny(element);\n      }\n    },\n    visitScript: function(tree) {\n      tree.scriptItemList.forEach(this.visitModuleElement_, this);\n    },\n    visitModule: function(tree) {\n      tree.scriptItemList.forEach(this.visitModuleElement_, this);\n    },\n    reportError: function(tree, message) {\n      this.reporter.reportError(tree.location.start, message);\n    }\n  }, {}, ParseTreeVisitor);\n  return {get ModuleVisitor() {\n      return ModuleVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ExportVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ExportVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ExportVisitor\", path);\n  }\n  var ModuleVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleVisitor\").ModuleVisitor;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var ExportVisitor = function ExportVisitor(reporter, loader, moduleSymbol) {\n    $traceurRuntime.superConstructor($ExportVisitor).call(this, reporter, loader, moduleSymbol);\n    this.inExport_ = false;\n    this.moduleSpecifier = null;\n  };\n  var $ExportVisitor = ExportVisitor;\n  ($traceurRuntime.createClass)(ExportVisitor, {\n    addExport_: function(name, tree) {\n      assert(typeof name == 'string');\n      if (this.inExport_)\n        this.addExport(name, tree);\n    },\n    addExport: function(name, tree) {\n      var moduleSymbol = this.moduleSymbol;\n      var existingExport = moduleSymbol.getExport(name);\n      if (existingExport) {\n        this.reportError(tree, (\"Duplicate export. '\" + name + \"' was previously \") + (\"exported at \" + existingExport.location.start));\n      } else {\n        moduleSymbol.addExport(name, tree);\n      }\n    },\n    visitClassDeclaration: function(tree) {\n      this.addExport_(tree.name.identifierToken.value, tree);\n    },\n    visitExportDeclaration: function(tree) {\n      this.inExport_ = true;\n      this.visitAny(tree.declaration);\n      this.inExport_ = false;\n    },\n    visitNamedExport: function(tree) {\n      this.moduleSpecifier = tree.moduleSpecifier;\n      this.visitAny(tree.specifierSet);\n      this.moduleSpecifier = null;\n    },\n    visitExportDefault: function(tree) {\n      this.addExport_('default', tree);\n    },\n    visitExportSpecifier: function(tree) {\n      this.addExport_((tree.rhs || tree.lhs).value, tree);\n    },\n    visitExportStar: function(tree) {\n      var $__2 = this;\n      var name = this.moduleSpecifier.token.processedValue;\n      var exportList = this.getExportsListForModuleSpecifier(name);\n      if (exportList) {\n        exportList.getExports().forEach((function(name) {\n          return $__2.addExport(name, tree);\n        }));\n      }\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.addExport_(tree.name.getStringValue(), tree);\n    },\n    visitModuleDeclaration: function(tree) {\n      var name = tree.binding.getStringValue();\n      this.addExport_(name, tree);\n    },\n    visitVariableDeclaration: function(tree) {\n      this.addExport_(tree.lvalue.getStringValue(), tree);\n    }\n  }, {}, ModuleVisitor);\n  return {get ExportVisitor() {\n      return ExportVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/DirectExportVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/DirectExportVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/DirectExportVisitor\", path);\n  }\n  var ExportVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ExportVisitor\").ExportVisitor;\n  var DirectExportVisitor = function DirectExportVisitor() {\n    $traceurRuntime.superConstructor($DirectExportVisitor).call(this, null, null, null);\n    this.namedExports = [];\n    this.starExports = [];\n  };\n  var $DirectExportVisitor = DirectExportVisitor;\n  ($traceurRuntime.createClass)(DirectExportVisitor, {\n    addExport: function(name, tree) {\n      this.namedExports.push({\n        name: name,\n        tree: tree,\n        moduleSpecifier: this.moduleSpecifier\n      });\n    },\n    visitExportStar: function(tree) {\n      this.starExports.push(this.moduleSpecifier);\n    },\n    hasExports: function() {\n      return this.namedExports.length != 0 || this.starExports.length != 0;\n    }\n  }, {}, ExportVisitor);\n  return {get DirectExportVisitor() {\n      return DirectExportVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ModuleTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"var __moduleName = \", \";\"], {raw: {value: Object.freeze([\"var __moduleName = \", \";\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"function require(path) {\\n        return $traceurRuntime.require(\", \", path);\\n      }\"], {raw: {value: Object.freeze([\"function require(path) {\\n        return $traceurRuntime.require(\", \", path);\\n      }\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"function() {\\n      \", \"\\n    }\"], {raw: {value: Object.freeze([\"function() {\\n      \", \"\\n    }\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$traceurRuntime.ModuleStore.getAnonymousModule(\\n              \", \");\"], {raw: {value: Object.freeze([\"$traceurRuntime.ModuleStore.getAnonymousModule(\\n              \", \");\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"System.register(\", \", [], \", \");\"], {raw: {value: Object.freeze([\"System.register(\", \", [], \", \");\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"get \", \"() { return \", \"; }\"], {raw: {value: Object.freeze([\"get \", \"() { return \", \"; }\"])}})),\n      $__6 = Object.freeze(Object.defineProperties([\"$traceurRuntime.exportStar(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.exportStar(\", \")\"])}})),\n      $__7 = Object.freeze(Object.defineProperties([\"return \", \"\"], {raw: {value: Object.freeze([\"return \", \"\"])}})),\n      $__8 = Object.freeze(Object.defineProperties([\"var $__default = \", \"\"], {raw: {value: Object.freeze([\"var $__default = \", \"\"])}})),\n      $__9 = Object.freeze(Object.defineProperties([\"var $__default = \", \"\"], {raw: {value: Object.freeze([\"var $__default = \", \"\"])}})),\n      $__10 = Object.freeze(Object.defineProperties([\"System.get(\", \")\"], {raw: {value: Object.freeze([\"System.get(\", \")\"])}}));\n  var $__11 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__11.AnonBlock,\n      BindingElement = $__11.BindingElement,\n      EmptyStatement = $__11.EmptyStatement,\n      LiteralPropertyName = $__11.LiteralPropertyName,\n      ObjectPattern = $__11.ObjectPattern,\n      ObjectPatternField = $__11.ObjectPatternField,\n      Script = $__11.Script;\n  var DestructuringTransformer = System.get(\"traceur@0.0.74/src/codegeneration/DestructuringTransformer\").DestructuringTransformer;\n  var DirectExportVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/DirectExportVisitor\").DirectExportVisitor;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__15 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      CLASS_DECLARATION = $__15.CLASS_DECLARATION,\n      EXPORT_DEFAULT = $__15.EXPORT_DEFAULT,\n      EXPORT_SPECIFIER = $__15.EXPORT_SPECIFIER,\n      FUNCTION_DECLARATION = $__15.FUNCTION_DECLARATION,\n      IMPORT_SPECIFIER_SET = $__15.IMPORT_SPECIFIER_SET;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var $__18 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__18.createArgumentList,\n      createExpressionStatement = $__18.createExpressionStatement,\n      createIdentifierExpression = $__18.createIdentifierExpression,\n      createIdentifierToken = $__18.createIdentifierToken,\n      createMemberExpression = $__18.createMemberExpression,\n      createObjectLiteralExpression = $__18.createObjectLiteralExpression,\n      createUseStrictDirective = $__18.createUseStrictDirective,\n      createVariableStatement = $__18.createVariableStatement;\n  var $__19 = System.get(\"traceur@0.0.74/src/Options\"),\n      parseOptions = $__19.parseOptions,\n      transformOptions = $__19.transformOptions;\n  var $__20 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__20.parseExpression,\n      parsePropertyDefinition = $__20.parsePropertyDefinition,\n      parseStatement = $__20.parseStatement,\n      parseStatements = $__20.parseStatements;\n  var DestructImportVarStatement = function DestructImportVarStatement() {\n    $traceurRuntime.superConstructor($DestructImportVarStatement).apply(this, arguments);\n  };\n  var $DestructImportVarStatement = DestructImportVarStatement;\n  ($traceurRuntime.createClass)(DestructImportVarStatement, {createGuardedExpression: function(tree) {\n      return tree;\n    }}, {}, DestructuringTransformer);\n  var ModuleTransformer = function ModuleTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($ModuleTransformer).call(this, identifierGenerator);\n    this.exportVisitor_ = new DirectExportVisitor();\n    this.moduleSpecifierKind_ = null;\n    this.moduleName = null;\n  };\n  var $ModuleTransformer = ModuleTransformer;\n  ($traceurRuntime.createClass)(ModuleTransformer, {\n    getTempVarNameForModuleName: function(moduleName) {\n      return '$__' + moduleName.replace(/[^a-zA-Z0-9$]/g, function(c) {\n        return '_' + c.charCodeAt(0) + '_';\n      }) + '__';\n    },\n    getTempVarNameForModuleSpecifier: function(moduleSpecifier) {\n      var normalizedName = System.normalize(moduleSpecifier.token.processedValue, this.moduleName);\n      return this.getTempVarNameForModuleName(normalizedName);\n    },\n    transformScript: function(tree) {\n      this.moduleName = tree.moduleName;\n      return $traceurRuntime.superGet(this, $ModuleTransformer.prototype, \"transformScript\").call(this, tree);\n    },\n    transformModule: function(tree) {\n      this.moduleName = tree.moduleName;\n      this.pushTempScope();\n      var statements = this.transformList(tree.scriptItemList);\n      statements = this.appendExportStatement(statements);\n      this.popTempScope();\n      statements = this.wrapModule(this.moduleProlog().concat(statements));\n      return new Script(tree.location, statements);\n    },\n    moduleProlog: function() {\n      var statements = [createUseStrictDirective()];\n      if (this.moduleName) {\n        statements.push(parseStatement($__0, this.moduleName));\n        var callerPathString = this.moduleName;\n        statements.push(parseStatement($__1, callerPathString));\n      }\n      return statements;\n    },\n    wrapModule: function(statements) {\n      var functionExpression = parseExpression($__2, statements);\n      if (this.moduleName === null) {\n        return parseStatements($__3, functionExpression);\n      }\n      return parseStatements($__4, this.moduleName, functionExpression);\n    },\n    getGetterExport: function($__23) {\n      var $__24 = $__23,\n          name = $__24.name,\n          tree = $__24.tree,\n          moduleSpecifier = $__24.moduleSpecifier;\n      var returnExpression;\n      switch (tree.type) {\n        case EXPORT_DEFAULT:\n          returnExpression = createIdentifierExpression('$__default');\n          break;\n        case EXPORT_SPECIFIER:\n          if (moduleSpecifier) {\n            var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier);\n            returnExpression = createMemberExpression(idName, tree.lhs);\n          } else {\n            returnExpression = createIdentifierExpression(tree.lhs);\n          }\n          break;\n        default:\n          returnExpression = createIdentifierExpression(name);\n          break;\n      }\n      return parsePropertyDefinition($__5, name, returnExpression);\n    },\n    getExportProperties: function() {\n      var $__21 = this;\n      return this.exportVisitor_.namedExports.map((function(exp) {\n        return $__21.getGetterExport(exp);\n      })).concat(this.exportVisitor_.namedExports.map((function(exp) {\n        return $__21.getSetterExport(exp);\n      }))).filter((function(e) {\n        return e;\n      }));\n    },\n    getSetterExport: function($__23) {\n      var $__24 = $__23,\n          name = $__24.name,\n          tree = $__24.tree,\n          moduleSpecifier = $__24.moduleSpecifier;\n      return null;\n    },\n    getExportObject: function() {\n      var $__21 = this;\n      var exportObject = createObjectLiteralExpression(this.getExportProperties());\n      if (this.exportVisitor_.starExports.length) {\n        var starExports = this.exportVisitor_.starExports;\n        var starIdents = starExports.map((function(moduleSpecifier) {\n          return createIdentifierExpression($__21.getTempVarNameForModuleSpecifier(moduleSpecifier));\n        }));\n        var args = createArgumentList($traceurRuntime.spread([exportObject], starIdents));\n        return parseExpression($__6, args);\n      }\n      return exportObject;\n    },\n    appendExportStatement: function(statements) {\n      var exportObject = this.getExportObject();\n      statements.push(parseStatement($__7, exportObject));\n      return statements;\n    },\n    hasExports: function() {\n      return this.exportVisitor_.hasExports();\n    },\n    transformExportDeclaration: function(tree) {\n      this.exportVisitor_.visitAny(tree);\n      return this.transformAny(tree.declaration);\n    },\n    transformExportDefault: function(tree) {\n      switch (tree.expression.type) {\n        case CLASS_DECLARATION:\n        case FUNCTION_DECLARATION:\n          var nameBinding = tree.expression.name;\n          var name = createIdentifierExpression(nameBinding.identifierToken);\n          return new AnonBlock(null, [tree.expression, parseStatement($__8, name)]);\n      }\n      return parseStatement($__9, tree.expression);\n    },\n    transformNamedExport: function(tree) {\n      var moduleSpecifier = tree.moduleSpecifier;\n      if (moduleSpecifier) {\n        var expression = this.transformAny(moduleSpecifier);\n        var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier);\n        return createVariableStatement(VAR, idName, expression);\n      }\n      return new EmptyStatement(null);\n    },\n    transformModuleSpecifier: function(tree) {\n      assert(this.moduleName);\n      var name = tree.token.processedValue;\n      var normalizedName = System.normalize(name, this.moduleName);\n      return parseExpression($__10, normalizedName);\n    },\n    transformModuleDeclaration: function(tree) {\n      this.moduleSpecifierKind_ = 'module';\n      var initializer = this.transformAny(tree.expression);\n      var bindingIdentifier = tree.binding.binding;\n      return createVariableStatement(VAR, bindingIdentifier, initializer);\n    },\n    transformImportedBinding: function(tree) {\n      var bindingElement = new BindingElement(tree.location, tree.binding, null);\n      var name = new LiteralPropertyName(null, createIdentifierToken('default'));\n      return new ObjectPattern(null, [new ObjectPatternField(null, name, bindingElement)]);\n    },\n    transformImportDeclaration: function(tree) {\n      this.moduleSpecifierKind_ = 'import';\n      if (!tree.importClause || (tree.importClause.type === IMPORT_SPECIFIER_SET && tree.importClause.specifiers.length === 0)) {\n        return createExpressionStatement(this.transformAny(tree.moduleSpecifier));\n      }\n      var binding = this.transformAny(tree.importClause);\n      var initializer = this.transformAny(tree.moduleSpecifier);\n      var varStatement = createVariableStatement(VAR, binding, initializer);\n      if (transformOptions.destructuring || !parseOptions.destructuring) {\n        var destructuringTransformer = new DestructImportVarStatement(this.identifierGenerator);\n        varStatement = varStatement.transform(destructuringTransformer);\n      }\n      return varStatement;\n    },\n    transformImportSpecifierSet: function(tree) {\n      var fields = this.transformList(tree.specifiers);\n      return new ObjectPattern(null, fields);\n    },\n    transformImportSpecifier: function(tree) {\n      var binding = tree.binding.binding;\n      var bindingElement = new BindingElement(binding.location, binding, null);\n      if (tree.name) {\n        var name = new LiteralPropertyName(tree.name.location, tree.name);\n        return new ObjectPatternField(tree.location, name, bindingElement);\n      }\n      return bindingElement;\n    }\n  }, {}, TempVarTransformer);\n  return {get ModuleTransformer() {\n      return ModuleTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/globalThis\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/globalThis\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/globalThis\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"Reflect.global\"], {raw: {value: Object.freeze([\"Reflect.global\"])}}));\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  var expr;\n  function globalThis() {\n    if (!expr)\n      expr = parseExpression($__0);\n    return expr;\n  }\n  var $__default = globalThis;\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/FindInFunctionScope\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\", path);\n  }\n  var FindVisitor = System.get(\"traceur@0.0.74/src/codegeneration/FindVisitor\").FindVisitor;\n  var FindInFunctionScope = function FindInFunctionScope() {\n    $traceurRuntime.superConstructor($FindInFunctionScope).apply(this, arguments);\n  };\n  var $FindInFunctionScope = FindInFunctionScope;\n  ($traceurRuntime.createClass)(FindInFunctionScope, {\n    visitFunctionDeclaration: function(tree) {},\n    visitFunctionExpression: function(tree) {},\n    visitSetAccessor: function(tree) {},\n    visitGetAccessor: function(tree) {},\n    visitPropertyMethodAssignment: function(tree) {}\n  }, {}, FindVisitor);\n  return {get FindInFunctionScope() {\n      return FindInFunctionScope;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/scopeContainsThis\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/scopeContainsThis\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/scopeContainsThis\", path);\n  }\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var FindThis = function FindThis() {\n    $traceurRuntime.superConstructor($FindThis).apply(this, arguments);\n  };\n  var $FindThis = FindThis;\n  ($traceurRuntime.createClass)(FindThis, {visitThisExpression: function(tree) {\n      this.found = true;\n    }}, {}, FindInFunctionScope);\n  function scopeContainsThis(tree) {\n    var visitor = new FindThis(tree);\n    return visitor.found;\n  }\n  var $__default = scopeContainsThis;\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/AmdTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/AmdTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/AmdTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"__esModule: true\"], {raw: {value: Object.freeze([\"__esModule: true\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"if (!\", \" || !\", \".__esModule)\\n            \", \" = {default: \", \"}\"], {raw: {value: Object.freeze([\"if (!\", \" || !\", \".__esModule)\\n            \", \" = {default: \", \"}\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"function(\", \") {\\n      \", \"\\n    }\"], {raw: {value: Object.freeze([\"function(\", \") {\\n      \", \"\\n    }\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"\", \".bind(\", \")\"], {raw: {value: Object.freeze([\"\", \".bind(\", \")\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"define(\", \", \", \", \", \");\"], {raw: {value: Object.freeze([\"define(\", \", \", \", \", \");\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"define(\", \", \", \");\"], {raw: {value: Object.freeze([\"define(\", \", \", \");\"])}}));\n  var ModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\").ModuleTransformer;\n  var createIdentifierExpression = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createIdentifierExpression;\n  var globalThis = System.get(\"traceur@0.0.74/src/codegeneration/globalThis\").default;\n  var $__9 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__9.parseExpression,\n      parseStatement = $__9.parseStatement,\n      parseStatements = $__9.parseStatements,\n      parsePropertyDefinition = $__9.parsePropertyDefinition;\n  var scopeContainsThis = System.get(\"traceur@0.0.74/src/codegeneration/scopeContainsThis\").default;\n  var AmdTransformer = function AmdTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($AmdTransformer).call(this, identifierGenerator);\n    this.dependencies = [];\n  };\n  var $AmdTransformer = AmdTransformer;\n  ($traceurRuntime.createClass)(AmdTransformer, {\n    getExportProperties: function() {\n      var properties = $traceurRuntime.superGet(this, $AmdTransformer.prototype, \"getExportProperties\").call(this);\n      if (this.exportVisitor_.hasExports())\n        properties.push(parsePropertyDefinition($__0));\n      return properties;\n    },\n    moduleProlog: function() {\n      var locals = this.dependencies.map((function(dep) {\n        var local = createIdentifierExpression(dep.local);\n        return parseStatement($__1, local, local, local, local);\n      }));\n      return $traceurRuntime.superGet(this, $AmdTransformer.prototype, \"moduleProlog\").call(this).concat(locals);\n    },\n    wrapModule: function(statements) {\n      var depPaths = this.dependencies.map((function(dep) {\n        return dep.path;\n      }));\n      var depLocals = this.dependencies.map((function(dep) {\n        return dep.local;\n      }));\n      var hasTopLevelThis = statements.some(scopeContainsThis);\n      var func = parseExpression($__2, depLocals, statements);\n      if (hasTopLevelThis)\n        func = parseExpression($__3, func, globalThis());\n      if (this.moduleName) {\n        return parseStatements($__4, this.moduleName, depPaths, func);\n      } else {\n        return parseStatements($__5, depPaths, func);\n      }\n    },\n    transformModuleSpecifier: function(tree) {\n      var localName = this.getTempIdentifier();\n      this.dependencies.push({\n        path: tree.token,\n        local: localName\n      });\n      return createIdentifierExpression(localName);\n    }\n  }, {}, ModuleTransformer);\n  return {get AmdTransformer() {\n      return AmdTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/staticsemantics/PropName\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/staticsemantics/PropName\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/staticsemantics/PropName\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      COMPUTED_PROPERTY_NAME = $__0.COMPUTED_PROPERTY_NAME,\n      GET_ACCESSOR = $__0.GET_ACCESSOR,\n      LITERAL_PROPERTY_NAME = $__0.LITERAL_PROPERTY_NAME,\n      PROPERTY_METHOD_ASSIGNMENT = $__0.PROPERTY_METHOD_ASSIGNMENT,\n      PROPERTY_NAME_ASSIGNMENT = $__0.PROPERTY_NAME_ASSIGNMENT,\n      PROPERTY_NAME_SHORTHAND = $__0.PROPERTY_NAME_SHORTHAND,\n      SET_ACCESSOR = $__0.SET_ACCESSOR;\n  var IDENTIFIER = System.get(\"traceur@0.0.74/src/syntax/TokenType\").IDENTIFIER;\n  function propName(tree) {\n    switch (tree.type) {\n      case LITERAL_PROPERTY_NAME:\n        var token = tree.literalToken;\n        if (token.isKeyword() || token.type === IDENTIFIER)\n          return token.toString();\n        return String(tree.literalToken.processedValue);\n      case COMPUTED_PROPERTY_NAME:\n        return '';\n      case PROPERTY_NAME_SHORTHAND:\n        return tree.name.toString();\n      case PROPERTY_METHOD_ASSIGNMENT:\n      case PROPERTY_NAME_ASSIGNMENT:\n      case GET_ACCESSOR:\n      case SET_ACCESSOR:\n        return propName(tree.name);\n    }\n  }\n  return {get propName() {\n      return propName;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/AnnotationsTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/AnnotationsTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/AnnotationsTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"Object.getOwnPropertyDescriptor(\", \")\"], {raw: {value: Object.freeze([\"Object.getOwnPropertyDescriptor(\", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"Object.defineProperty(\", \", \", \",\\n        {get: function() {return \", \"}});\"], {raw: {value: Object.freeze([\"Object.defineProperty(\", \", \", \",\\n        {get: function() {return \", \"}});\"])}}));\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var CONSTRUCTOR = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").CONSTRUCTOR;\n  var STRING = System.get(\"traceur@0.0.74/src/syntax/TokenType\").STRING;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__5.AnonBlock,\n      ClassDeclaration = $__5.ClassDeclaration,\n      ExportDeclaration = $__5.ExportDeclaration,\n      FormalParameter = $__5.FormalParameter,\n      FunctionDeclaration = $__5.FunctionDeclaration,\n      GetAccessor = $__5.GetAccessor,\n      LiteralExpression = $__5.LiteralExpression,\n      PropertyMethodAssignment = $__5.PropertyMethodAssignment,\n      SetAccessor = $__5.SetAccessor;\n  var propName = System.get(\"traceur@0.0.74/src/staticsemantics/PropName\").propName;\n  var $__7 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__7.createArgumentList,\n      createArrayLiteralExpression = $__7.createArrayLiteralExpression,\n      createAssignmentStatement = $__7.createAssignmentStatement,\n      createIdentifierExpression = $__7.createIdentifierExpression,\n      createMemberExpression = $__7.createMemberExpression,\n      createNewExpression = $__7.createNewExpression,\n      createStringLiteralToken = $__7.createStringLiteralToken;\n  var $__8 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__8.parseExpression,\n      parseStatement = $__8.parseStatement;\n  var AnnotationsScope = function AnnotationsScope() {\n    this.className = null;\n    this.isExport = false;\n    this.constructorParameters = [];\n    this.annotations = [];\n    this.metadata = [];\n  };\n  ($traceurRuntime.createClass)(AnnotationsScope, {get inClassScope() {\n      return this.className !== null;\n    }}, {});\n  var AnnotationsTransformer = function AnnotationsTransformer() {\n    this.stack_ = [new AnnotationsScope()];\n  };\n  var $AnnotationsTransformer = AnnotationsTransformer;\n  ($traceurRuntime.createClass)(AnnotationsTransformer, {\n    transformExportDeclaration: function(tree) {\n      var $__11;\n      var scope = this.pushAnnotationScope_();\n      scope.isExport = true;\n      ($__11 = scope.annotations).push.apply($__11, $traceurRuntime.spread(tree.annotations));\n      var declaration = this.transformAny(tree.declaration);\n      if (declaration !== tree.declaration || tree.annotations.length > 0)\n        tree = new ExportDeclaration(tree.location, declaration, []);\n      return this.appendMetadata_(tree);\n    },\n    transformClassDeclaration: function(tree) {\n      var $__11,\n          $__12;\n      var elementsChanged = false;\n      var exportAnnotations = this.scope.isExport ? this.scope.annotations : [];\n      var scope = this.pushAnnotationScope_();\n      scope.className = tree.name;\n      ($__11 = scope.annotations).push.apply($__11, $traceurRuntime.spread(exportAnnotations, tree.annotations));\n      tree = $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformClassDeclaration\").call(this, tree);\n      ($__12 = scope.metadata).unshift.apply($__12, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, scope.constructorParameters)));\n      if (tree.annotations.length > 0) {\n        tree = new ClassDeclaration(tree.location, tree.name, tree.superClass, tree.elements, []);\n      }\n      return this.appendMetadata_(tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      var $__11,\n          $__12;\n      var exportAnnotations = this.scope.isExport ? this.scope.annotations : [];\n      var scope = this.pushAnnotationScope_();\n      ($__11 = scope.annotations).push.apply($__11, $traceurRuntime.spread(exportAnnotations, tree.annotations));\n      ($__12 = scope.metadata).push.apply($__12, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, tree.parameterList.parameters)));\n      tree = $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n      if (tree.annotations.length > 0) {\n        tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, [], tree.body);\n      }\n      return this.appendMetadata_(tree);\n    },\n    transformFormalParameter: function(tree) {\n      if (tree.annotations.length > 0) {\n        tree = new FormalParameter(tree.location, tree.parameter, tree.typeAnnotation, []);\n      }\n      return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformFormalParameter\").call(this, tree);\n    },\n    transformGetAccessor: function(tree) {\n      var $__11;\n      if (!this.scope.inClassScope)\n        return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n      ($__11 = this.scope.metadata).push.apply($__11, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'get'), tree.annotations, [])));\n      if (tree.annotations.length > 0) {\n        tree = new GetAccessor(tree.location, tree.isStatic, tree.name, tree.typeAnnotation, [], tree.body);\n      }\n      return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n    },\n    transformSetAccessor: function(tree) {\n      var $__11;\n      if (!this.scope.inClassScope)\n        return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformSetAccessor\").call(this, tree);\n      ($__11 = this.scope.metadata).push.apply($__11, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'set'), tree.annotations, tree.parameterList.parameters)));\n      var parameterList = this.transformAny(tree.parameterList);\n      if (parameterList !== tree.parameterList || tree.annotations.length > 0) {\n        tree = new SetAccessor(tree.location, tree.isStatic, tree.name, parameterList, [], tree.body);\n      }\n      return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformSetAccessor\").call(this, tree);\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      var $__11,\n          $__12;\n      if (!this.scope.inClassScope)\n        return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformPropertyMethodAssignment\").call(this, tree);\n      if (!tree.isStatic && propName(tree) === CONSTRUCTOR) {\n        ($__11 = this.scope.annotations).push.apply($__11, $traceurRuntime.spread(tree.annotations));\n        this.scope.constructorParameters = tree.parameterList.parameters;\n      } else {\n        ($__12 = this.scope.metadata).push.apply($__12, $traceurRuntime.spread(this.transformMetadata_(this.transformPropertyMethod_(tree, this.scope.className), tree.annotations, tree.parameterList.parameters)));\n      }\n      var parameterList = this.transformAny(tree.parameterList);\n      if (parameterList !== tree.parameterList || tree.annotations.length > 0) {\n        tree = new PropertyMethodAssignment(tree.location, tree.isStatic, tree.functionKind, tree.name, parameterList, tree.typeAnnotation, [], tree.body);\n      }\n      return $traceurRuntime.superGet(this, $AnnotationsTransformer.prototype, \"transformPropertyMethodAssignment\").call(this, tree);\n    },\n    appendMetadata_: function(tree) {\n      var $__11;\n      var metadata = this.stack_.pop().metadata;\n      if (metadata.length > 0) {\n        if (this.scope.isExport) {\n          ($__11 = this.scope.metadata).push.apply($__11, $traceurRuntime.spread(metadata));\n        } else {\n          tree = new AnonBlock(null, $traceurRuntime.spread([tree], metadata));\n        }\n      }\n      return tree;\n    },\n    transformClassReference_: function(tree, className) {\n      var parent = createIdentifierExpression(className);\n      if (!tree.isStatic)\n        parent = createMemberExpression(parent, 'prototype');\n      return parent;\n    },\n    transformPropertyMethod_: function(tree, className) {\n      return createMemberExpression(this.transformClassReference_(tree, className), tree.name.literalToken);\n    },\n    transformAccessor_: function(tree, className, accessor) {\n      var args = createArgumentList([this.transformClassReference_(tree, className), this.createLiteralStringExpression_(tree.name)]);\n      var descriptor = parseExpression($__0, args);\n      return createMemberExpression(descriptor, accessor);\n    },\n    transformParameters_: function(parameters) {\n      var $__9 = this;\n      var hasParameterMetadata = false;\n      parameters = parameters.map((function(param) {\n        var $__11;\n        var metadata = [];\n        if (param.typeAnnotation)\n          metadata.push($__9.transformAny(param.typeAnnotation));\n        if (param.annotations && param.annotations.length > 0)\n          ($__11 = metadata).push.apply($__11, $traceurRuntime.spread($__9.transformAnnotations_(param.annotations)));\n        if (metadata.length > 0) {\n          hasParameterMetadata = true;\n          return createArrayLiteralExpression(metadata);\n        }\n        return createArrayLiteralExpression([]);\n      }));\n      return hasParameterMetadata ? parameters : [];\n    },\n    transformAnnotations_: function(annotations) {\n      return annotations.map((function(annotation) {\n        return createNewExpression(annotation.name, annotation.args);\n      }));\n    },\n    transformMetadata_: function(target, annotations, parameters) {\n      var metadataStatements = [];\n      if (annotations !== null) {\n        annotations = this.transformAnnotations_(annotations);\n        if (annotations.length > 0) {\n          metadataStatements.push(this.createDefinePropertyStatement_(target, 'annotations', createArrayLiteralExpression(annotations)));\n        }\n      }\n      if (parameters !== null) {\n        parameters = this.transformParameters_(parameters);\n        if (parameters.length > 0) {\n          metadataStatements.push(this.createDefinePropertyStatement_(target, 'parameters', createArrayLiteralExpression(parameters)));\n        }\n      }\n      return metadataStatements;\n    },\n    createDefinePropertyStatement_: function(target, property, value) {\n      return parseStatement($__1, target, property, value);\n    },\n    createLiteralStringExpression_: function(tree) {\n      var token = tree.literalToken;\n      if (tree.literalToken.type !== STRING)\n        token = createStringLiteralToken(tree.literalToken.value);\n      return new LiteralExpression(null, token);\n    },\n    get scope() {\n      return this.stack_[this.stack_.length - 1];\n    },\n    pushAnnotationScope_: function() {\n      var scope = new AnnotationsScope();\n      this.stack_.push(scope);\n      return scope;\n    }\n  }, {}, ParseTreeTransformer);\n  return {get AnnotationsTransformer() {\n      return AnnotationsTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/semantics/VariableBinder\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/semantics/VariableBinder\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/semantics/VariableBinder\", path);\n  }\n  var ScopeChainBuilder = System.get(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\").ScopeChainBuilder;\n  function variablesInBlock(tree) {\n    var includeFunctionScope = arguments[1];\n    var builder = new ScopeChainBuilder(null);\n    builder.visitAny(tree);\n    var scope = builder.getScopeForTree(tree);\n    var names = scope.getLexicalBindingNames();\n    if (!includeFunctionScope) {\n      return names;\n    }\n    var variableBindingNames = scope.getVariableBindingNames();\n    for (var name in variableBindingNames) {\n      names[name] = true;\n    }\n    return names;\n  }\n  function variablesInFunction(tree) {\n    var builder = new ScopeChainBuilder(null);\n    builder.visitAny(tree);\n    var scope = builder.getScopeForTree(tree);\n    return scope.getAllBindingNames();\n  }\n  return {\n    get variablesInBlock() {\n      return variablesInBlock;\n    },\n    get variablesInFunction() {\n      return variablesInFunction;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ScopeTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ScopeTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ScopeTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      ARGUMENTS = $__1.ARGUMENTS,\n      THIS = $__1.THIS;\n  var $__2 = System.get(\"traceur@0.0.74/src/semantics/VariableBinder\"),\n      variablesInBlock = $__2.variablesInBlock,\n      variablesInFunction = $__2.variablesInFunction;\n  var ScopeTransformer = function ScopeTransformer(varName) {\n    $traceurRuntime.superConstructor($ScopeTransformer).call(this);\n    this.varName_ = varName;\n  };\n  var $ScopeTransformer = ScopeTransformer;\n  ($traceurRuntime.createClass)(ScopeTransformer, {\n    transformBlock: function(tree) {\n      if (this.varName_ in variablesInBlock(tree)) {\n        return tree;\n      } else {\n        return $traceurRuntime.superGet(this, $ScopeTransformer.prototype, \"transformBlock\").call(this, tree);\n      }\n    },\n    transformThisExpression: function(tree) {\n      if (this.varName_ !== THIS)\n        return tree;\n      return $traceurRuntime.superGet(this, $ScopeTransformer.prototype, \"transformThisExpression\").call(this, tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      if (this.getDoNotRecurse(tree))\n        return tree;\n      return $traceurRuntime.superGet(this, $ScopeTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n    },\n    transformFunctionExpression: function(tree) {\n      if (this.getDoNotRecurse(tree))\n        return tree;\n      return $traceurRuntime.superGet(this, $ScopeTransformer.prototype, \"transformFunctionExpression\").call(this, tree);\n    },\n    getDoNotRecurse: function(tree) {\n      return this.varName_ === ARGUMENTS || this.varName_ === THIS || this.varName_ in variablesInFunction(tree);\n    },\n    transformCatch: function(tree) {\n      if (!tree.binding.isPattern() && this.varName_ === tree.binding.identifierToken.value) {\n        return tree;\n      }\n      return $traceurRuntime.superGet(this, $ScopeTransformer.prototype, \"transformCatch\").call(this, tree);\n    }\n  }, {}, ParseTreeTransformer);\n  return {get ScopeTransformer() {\n      return ScopeTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/AlphaRenamer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\", path);\n  }\n  var ScopeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ScopeTransformer\").ScopeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      FunctionDeclaration = $__1.FunctionDeclaration,\n      FunctionExpression = $__1.FunctionExpression;\n  var THIS = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").THIS;\n  var createIdentifierExpression = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createIdentifierExpression;\n  var AlphaRenamer = function AlphaRenamer(varName, newName) {\n    $traceurRuntime.superConstructor($AlphaRenamer).call(this, varName);\n    this.newName_ = newName;\n  };\n  var $AlphaRenamer = AlphaRenamer;\n  ($traceurRuntime.createClass)(AlphaRenamer, {\n    transformIdentifierExpression: function(tree) {\n      if (this.varName_ == tree.identifierToken.value) {\n        return createIdentifierExpression(this.newName_);\n      } else {\n        return tree;\n      }\n    },\n    transformThisExpression: function(tree) {\n      if (this.varName_ !== THIS)\n        return tree;\n      return createIdentifierExpression(this.newName_);\n    },\n    transformFunctionDeclaration: function(tree) {\n      if (this.varName_ === tree.name) {\n        tree = new FunctionDeclaration(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $AlphaRenamer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n    },\n    transformFunctionExpression: function(tree) {\n      if (this.varName_ === tree.name) {\n        tree = new FunctionExpression(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $AlphaRenamer.prototype, \"transformFunctionExpression\").call(this, tree);\n    }\n  }, {rename: function(tree, varName, newName) {\n      return new $AlphaRenamer(varName, newName).transformAny(tree);\n    }}, ScopeTransformer);\n  return {get AlphaRenamer() {\n      return AlphaRenamer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      ARGUMENTS = $__0.ARGUMENTS,\n      THIS = $__0.THIS;\n  var AlphaRenamer = System.get(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\").AlphaRenamer;\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var FindThisOrArguments = function FindThisOrArguments(tree) {\n    this.foundThis = false;\n    this.foundArguments = false;\n    $traceurRuntime.superConstructor($FindThisOrArguments).call(this, tree);\n  };\n  var $FindThisOrArguments = FindThisOrArguments;\n  ($traceurRuntime.createClass)(FindThisOrArguments, {\n    visitThisExpression: function(tree) {\n      this.foundThis = true;\n      this.found = this.foundArguments;\n    },\n    visitIdentifierExpression: function(tree) {\n      if (tree.identifierToken.value === ARGUMENTS) {\n        this.foundArguments = true;\n        this.found = this.foundThis;\n      }\n    }\n  }, {}, FindInFunctionScope);\n  function alphaRenameThisAndArguments(tempVarTransformer, tree) {\n    var finder = new FindThisOrArguments(tree);\n    if (finder.foundArguments) {\n      var argumentsTempName = tempVarTransformer.addTempVarForArguments();\n      tree = AlphaRenamer.rename(tree, ARGUMENTS, argumentsTempName);\n    }\n    if (finder.foundThis) {\n      var thisTempName = tempVarTransformer.addTempVarForThis();\n      tree = AlphaRenamer.rename(tree, THIS, thisTempName);\n    }\n    return tree;\n  }\n  var $__default = alphaRenameThisAndArguments;\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ComprehensionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ComprehensionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ComprehensionTransformer\", path);\n  }\n  var alphaRenameThisAndArguments = System.get(\"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\").default;\n  var FunctionExpression = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").FunctionExpression;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      LET = $__3.LET,\n      STAR = $__3.STAR,\n      VAR = $__3.VAR;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      COMPREHENSION_FOR = $__4.COMPREHENSION_FOR,\n      COMPREHENSION_IF = $__4.COMPREHENSION_IF;\n  var Token = System.get(\"traceur@0.0.74/src/syntax/Token\").Token;\n  var $__6 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createCallExpression = $__6.createCallExpression,\n      createEmptyParameterList = $__6.createEmptyParameterList,\n      createForOfStatement = $__6.createForOfStatement,\n      createFunctionBody = $__6.createFunctionBody,\n      createIfStatement = $__6.createIfStatement,\n      createParenExpression = $__6.createParenExpression,\n      createVariableDeclarationList = $__6.createVariableDeclarationList;\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  var ComprehensionTransformer = function ComprehensionTransformer() {\n    $traceurRuntime.superConstructor($ComprehensionTransformer).apply(this, arguments);\n  };\n  var $ComprehensionTransformer = ComprehensionTransformer;\n  ($traceurRuntime.createClass)(ComprehensionTransformer, {transformComprehension: function(tree, statement, isGenerator) {\n      var prefix = arguments[3];\n      var suffix = arguments[4];\n      var bindingKind = isGenerator || !options.blockBinding ? VAR : LET;\n      var statements = prefix ? [prefix] : [];\n      for (var i = tree.comprehensionList.length - 1; i >= 0; i--) {\n        var item = tree.comprehensionList[i];\n        switch (item.type) {\n          case COMPREHENSION_IF:\n            var expression = this.transformAny(item.expression);\n            statement = createIfStatement(expression, statement);\n            break;\n          case COMPREHENSION_FOR:\n            var left = this.transformAny(item.left);\n            var iterator = this.transformAny(item.iterator);\n            var initializer = createVariableDeclarationList(bindingKind, left, null);\n            statement = createForOfStatement(initializer, iterator, statement);\n            break;\n          default:\n            throw new Error('Unreachable.');\n        }\n      }\n      statement = alphaRenameThisAndArguments(this, statement);\n      statements.push(statement);\n      if (suffix)\n        statements.push(suffix);\n      var functionKind = isGenerator ? new Token(STAR, null) : null;\n      var func = new FunctionExpression(null, null, functionKind, createEmptyParameterList(), null, [], createFunctionBody(statements));\n      return createParenExpression(createCallExpression(func));\n    }}, {}, TempVarTransformer);\n  return {get ComprehensionTransformer() {\n      return ComprehensionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ArrayComprehensionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ArrayComprehensionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ArrayComprehensionTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"var \", \" = 0, \", \" = [];\"], {raw: {value: Object.freeze([\"var \", \" = 0, \", \" = [];\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"\", \"[\", \"++] = \", \";\"], {raw: {value: Object.freeze([\"\", \"[\", \"++] = \", \";\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"return \", \";\"], {raw: {value: Object.freeze([\"return \", \";\"])}}));\n  var ComprehensionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ComprehensionTransformer\").ComprehensionTransformer;\n  var createIdentifierExpression = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createIdentifierExpression;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var ArrayComprehensionTransformer = function ArrayComprehensionTransformer() {\n    $traceurRuntime.superConstructor($ArrayComprehensionTransformer).apply(this, arguments);\n  };\n  var $ArrayComprehensionTransformer = ArrayComprehensionTransformer;\n  ($traceurRuntime.createClass)(ArrayComprehensionTransformer, {transformArrayComprehension: function(tree) {\n      this.pushTempScope();\n      var expression = this.transformAny(tree.expression);\n      var index = createIdentifierExpression(this.getTempIdentifier());\n      var result = createIdentifierExpression(this.getTempIdentifier());\n      var tempVarsStatatement = parseStatement($__0, index, result);\n      var statement = parseStatement($__1, result, index, expression);\n      var returnStatement = parseStatement($__2, result);\n      var functionKind = null;\n      var result = this.transformComprehension(tree, statement, functionKind, tempVarsStatatement, returnStatement);\n      this.popTempScope();\n      return result;\n    }}, {}, ComprehensionTransformer);\n  return {get ArrayComprehensionTransformer() {\n      return ArrayComprehensionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ArrowFunctionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ArrowFunctionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ArrowFunctionTransformer\", path);\n  }\n  var FunctionExpression = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").FunctionExpression;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var FUNCTION_BODY = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\").FUNCTION_BODY;\n  var alphaRenameThisAndArguments = System.get(\"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\").default;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createFunctionBody = $__4.createFunctionBody,\n      createParenExpression = $__4.createParenExpression,\n      createReturnStatement = $__4.createReturnStatement;\n  function convertConciseBody(tree) {\n    if (tree.type !== FUNCTION_BODY)\n      return createFunctionBody([createReturnStatement(tree)]);\n    return tree;\n  }\n  var ArrowFunctionTransformer = function ArrowFunctionTransformer() {\n    $traceurRuntime.superConstructor($ArrowFunctionTransformer).apply(this, arguments);\n  };\n  var $ArrowFunctionTransformer = ArrowFunctionTransformer;\n  ($traceurRuntime.createClass)(ArrowFunctionTransformer, {transformArrowFunctionExpression: function(tree) {\n      var alphaRenamed = alphaRenameThisAndArguments(this, tree);\n      var parameterList = this.transformAny(alphaRenamed.parameterList);\n      var body = this.transformAny(alphaRenamed.body);\n      body = convertConciseBody(body);\n      var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, parameterList, null, [], body);\n      return createParenExpression(functionExpression);\n    }}, {transform: function(tempVarTransformer, tree) {\n      tree = alphaRenameThisAndArguments(tempVarTransformer, tree);\n      var body = convertConciseBody(tree.body);\n      return new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, null, [], body);\n    }}, TempVarTransformer);\n  return {get ArrowFunctionTransformer() {\n      return ArrowFunctionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/FindIdentifiers\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/FindIdentifiers\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/FindIdentifiers\", path);\n  }\n  var ScopeVisitor = System.get(\"traceur@0.0.74/src/semantics/ScopeVisitor\").ScopeVisitor;\n  var FindIdentifiers = function FindIdentifiers(tree, filterFunction) {\n    $traceurRuntime.superConstructor($FindIdentifiers).call(this);\n    this.filterFunction_ = filterFunction;\n    this.found_ = false;\n    this.visitAny(tree);\n  };\n  var $FindIdentifiers = FindIdentifiers;\n  ($traceurRuntime.createClass)(FindIdentifiers, {\n    visitIdentifierExpression: function(tree) {\n      if (this.filterFunction_(tree.identifierToken.value, this.scope.tree)) {\n        this.found = true;\n      }\n    },\n    get found() {\n      return this.found_;\n    },\n    set found(v) {\n      if (v) {\n        this.found_ = true;\n      }\n    },\n    visitAny: function(tree) {\n      !this.found_ && tree && tree.visit(this);\n    },\n    visitList: function(list) {\n      if (list) {\n        for (var i = 0; !this.found_ && i < list.length; i++) {\n          this.visitAny(list[i]);\n        }\n      }\n    }\n  }, {}, ScopeVisitor);\n  return {get FindIdentifiers() {\n      return FindIdentifiers;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/FnExtractAbruptCompletions\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/FnExtractAbruptCompletions\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/FnExtractAbruptCompletions\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"if (typeof \", \" === \\\"object\\\")\\n            return \", \".v;\"], {raw: {value: Object.freeze([\"if (typeof \", \" === \\\"object\\\")\\n            return \", \".v;\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"return \", \";\"], {raw: {value: Object.freeze([\"return \", \";\"])}}));\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var alphaRenameThisAndArguments = System.get(\"traceur@0.0.74/src/codegeneration/alphaRenameThisAndArguments\").default;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__5.AnonBlock,\n      BreakStatement = $__5.BreakStatement,\n      ContinueStatement = $__5.ContinueStatement,\n      FormalParameterList = $__5.FormalParameterList,\n      ReturnStatement = $__5.ReturnStatement;\n  var $__6 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__6.createArgumentList,\n      createAssignmentStatement = $__6.createAssignmentStatement,\n      createAssignmentExpression = $__6.createAssignmentExpression,\n      createBlock = $__6.createBlock,\n      createCallExpression = $__6.createCallExpression,\n      createCaseClause = $__6.createCaseClause,\n      createDefaultClause = $__6.createDefaultClause,\n      createExpressionStatement = $__6.createExpressionStatement,\n      createFunctionBody = $__6.createFunctionBody,\n      createFunctionExpression = $__6.createFunctionExpression,\n      createIdentifierExpression = $__6.createIdentifierExpression,\n      createNumberLiteral = $__6.createNumberLiteral,\n      createObjectLiteral = $__6.createObjectLiteral,\n      createSwitchStatement = $__6.createSwitchStatement,\n      createThisExpression = $__6.createThisExpression,\n      createVariableDeclaration = $__6.createVariableDeclaration,\n      createVariableDeclarationList = $__6.createVariableDeclarationList,\n      createVariableStatement = $__6.createVariableStatement,\n      createVoid0 = $__6.createVoid0;\n  var ARGUMENTS = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").ARGUMENTS;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var FnExtractAbruptCompletions = function FnExtractAbruptCompletions(idGenerator, requestParentLabel) {\n    this.idGenerator_ = idGenerator;\n    this.inLoop_ = 0;\n    this.inBreakble_ = 0;\n    this.variableDeclarations_ = [];\n    this.extractedStatements_ = [];\n    this.requestParentLabel_ = requestParentLabel;\n    this.labelledStatements_ = {};\n  };\n  var $FnExtractAbruptCompletions = FnExtractAbruptCompletions;\n  ($traceurRuntime.createClass)(FnExtractAbruptCompletions, {\n    createIIFE: function(body, paramList, argsList) {\n      body = this.transformAny(body);\n      body = alphaRenameThisAndArguments(this, body);\n      var tmpFnName = this.idGenerator_.generateUniqueIdentifier();\n      var functionExpression = createFunctionExpression(new FormalParameterList(null, paramList), createFunctionBody(body.statements || [body]));\n      this.variableDeclarations_.push(createVariableDeclaration(tmpFnName, functionExpression));\n      var functionCall = createCallExpression(createIdentifierExpression(tmpFnName), createArgumentList(argsList));\n      var loopBody = null;\n      if (this.extractedStatements_.length || this.hasReturns) {\n        var tmpVarName = createIdentifierExpression(this.idGenerator_.generateUniqueIdentifier());\n        this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, null));\n        var maybeReturn;\n        if (this.hasReturns) {\n          maybeReturn = parseStatement($__0, tmpVarName, tmpVarName);\n        }\n        if (this.extractedStatements_.length) {\n          var caseClauses = this.extractedStatements_.map((function(statement, index) {\n            return createCaseClause(createNumberLiteral(index), [statement]);\n          }));\n          if (maybeReturn) {\n            caseClauses.push(createDefaultClause([maybeReturn]));\n          }\n          loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), createSwitchStatement(tmpVarName, caseClauses)]);\n        } else {\n          loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), maybeReturn]);\n        }\n      } else {\n        loopBody = createBlock([createExpressionStatement(functionCall)]);\n      }\n      return {\n        variableStatements: createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)),\n        loopBody: loopBody\n      };\n    },\n    addTempVarForArguments: function() {\n      var tmpVarName = this.idGenerator_.generateUniqueIdentifier();\n      this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createIdentifierExpression(ARGUMENTS)));\n      return tmpVarName;\n    },\n    addTempVarForThis: function() {\n      var tmpVarName = this.idGenerator_.generateUniqueIdentifier();\n      this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression()));\n      return tmpVarName;\n    },\n    transformAny: function(tree) {\n      if (tree) {\n        if (tree.isBreakableStatement())\n          this.inBreakble_++;\n        if (tree.isIterationStatement())\n          this.inLoop_++;\n        tree = $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformAny\").call(this, tree);\n        if (tree.isBreakableStatement())\n          this.inBreakble_--;\n        if (tree.isIterationStatement())\n          this.inLoop_--;\n      }\n      return tree;\n    },\n    transformReturnStatement: function(tree) {\n      this.hasReturns = true;\n      return new ReturnStatement(tree.location, createObjectLiteral({v: tree.expression || createVoid0()}));\n    },\n    transformAbruptCompletion_: function(tree) {\n      this.extractedStatements_.push(tree);\n      var index = this.extractedStatements_.length - 1;\n      return parseStatement($__1, index);\n    },\n    transformBreakStatement: function(tree) {\n      if (!tree.name) {\n        if (this.inBreakble_) {\n          return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformBreakStatement\").call(this, tree);\n        } else {\n          tree = new BreakStatement(tree.location, this.requestParentLabel_());\n        }\n      } else if (this.labelledStatements_[tree.name]) {\n        return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformBreakStatement\").call(this, tree);\n      }\n      return this.transformAbruptCompletion_(tree);\n    },\n    transformContinueStatement: function(tree) {\n      if (!tree.name) {\n        if (this.inLoop_) {\n          return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformContinueStatement\").call(this, tree);\n        } else {\n          tree = new ContinueStatement(tree.location, this.requestParentLabel_());\n        }\n      } else if (this.labelledStatements_[tree.name]) {\n        return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformContinueStatement\").call(this, tree);\n      }\n      return this.transformAbruptCompletion_(tree);\n    },\n    transformLabelledStatement: function(tree) {\n      this.labelledStatements_[tree.name] = true;\n      return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformLabelledStatement\").call(this, tree);\n    },\n    transformVariableStatement: function(tree) {\n      var $__10 = this;\n      var $__9 = this;\n      if (tree.declarations.declarationType === VAR) {\n        var assignments = [];\n        tree.declarations.declarations.forEach((function(variableDeclaration) {\n          var variableName = variableDeclaration.lvalue.getStringValue();\n          var initializer = $traceurRuntime.superGet($__10, $FnExtractAbruptCompletions.prototype, \"transformAny\").call($__10, variableDeclaration.initializer);\n          $__9.variableDeclarations_.push(createVariableDeclaration(variableName, null));\n          assignments.push(createAssignmentStatement(createIdentifierExpression(variableName), initializer));\n        }));\n        return new AnonBlock(null, assignments);\n      }\n      return $traceurRuntime.superGet(this, $FnExtractAbruptCompletions.prototype, \"transformVariableStatement\").call(this, tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      return tree;\n    },\n    transformFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformSetAccessor: function(tree) {\n      return tree;\n    },\n    transformGetAccessor: function(tree) {\n      return tree;\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      return tree;\n    },\n    transformArrowFunctionExpression: function(tree) {\n      return tree;\n    }\n  }, {createIIFE: function(idGenerator, body, paramList, argsList, requestParentLabel) {\n      return new $FnExtractAbruptCompletions(idGenerator, requestParentLabel).createIIFE(body, paramList, argsList);\n    }}, ParseTreeTransformer);\n  return {get FnExtractAbruptCompletions() {\n      return FnExtractAbruptCompletions;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/BlockBindingTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/BlockBindingTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/BlockBindingTransformer\", path);\n  }\n  var AlphaRenamer = System.get(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\").AlphaRenamer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ANON_BLOCK = $__1.ANON_BLOCK,\n      BINDING_IDENTIFIER = $__1.BINDING_IDENTIFIER,\n      VARIABLE_DECLARATION_LIST = $__1.VARIABLE_DECLARATION_LIST;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__2.AnonBlock,\n      BindingElement = $__2.BindingElement,\n      BindingIdentifier = $__2.BindingIdentifier,\n      Block = $__2.Block,\n      Catch = $__2.Catch,\n      DoWhileStatement = $__2.DoWhileStatement,\n      ForInStatement = $__2.ForInStatement,\n      ForStatement = $__2.ForStatement,\n      FormalParameter = $__2.FormalParameter,\n      FunctionBody = $__2.FunctionBody,\n      FunctionExpression = $__2.FunctionExpression,\n      LabelledStatement = $__2.LabelledStatement,\n      LiteralPropertyName = $__2.LiteralPropertyName,\n      Module = $__2.Module,\n      ObjectPatternField = $__2.ObjectPatternField,\n      Script = $__2.Script,\n      VariableDeclaration = $__2.VariableDeclaration,\n      VariableDeclarationList = $__2.VariableDeclarationList,\n      VariableStatement = $__2.VariableStatement,\n      WhileStatement = $__2.WhileStatement;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var $__5 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createBindingIdentifier = $__5.createBindingIdentifier,\n      createIdentifierExpression = $__5.createIdentifierExpression,\n      createIdentifierToken = $__5.createIdentifierToken;\n  var FindIdentifiers = System.get(\"traceur@0.0.74/src/codegeneration/FindIdentifiers\").FindIdentifiers;\n  var FindVisitor = System.get(\"traceur@0.0.74/src/codegeneration/FindVisitor\").FindVisitor;\n  var FnExtractAbruptCompletions = System.get(\"traceur@0.0.74/src/codegeneration/FnExtractAbruptCompletions\").FnExtractAbruptCompletions;\n  var ScopeChainBuilder = System.get(\"traceur@0.0.74/src/semantics/ScopeChainBuilder\").ScopeChainBuilder;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var BlockBindingTransformer = function BlockBindingTransformer(idGenerator, reporter, tree) {\n    var scopeBuilder = arguments[3];\n    var latestScope = arguments[4];\n    $traceurRuntime.superConstructor($BlockBindingTransformer).call(this);\n    this.idGenerator_ = idGenerator;\n    this.reporter_ = reporter;\n    if (!scopeBuilder) {\n      scopeBuilder = new ScopeChainBuilder(reporter);\n      scopeBuilder.visitAny(tree);\n    }\n    this.scopeBuilder_ = scopeBuilder;\n    this.labelledLoops_ = new Map();\n    this.prependStatement_ = [];\n    this.prependBlockStatement_ = [];\n    this.blockRenames_ = [];\n    this.rootTree_ = tree;\n    if (latestScope) {\n      this.scope_ = latestScope;\n    } else {\n      this.pushScope(tree);\n    }\n    this.usedVars_ = this.scope_.getAllBindingNames();\n    this.maybeRename_ = false;\n    this.inObjectPattern_ = false;\n  };\n  var $BlockBindingTransformer = BlockBindingTransformer;\n  ($traceurRuntime.createClass)(BlockBindingTransformer, {\n    getVariableName_: function(variable) {\n      var lvalue = variable.lvalue;\n      if (lvalue.type == BINDING_IDENTIFIER) {\n        return lvalue.getStringValue();\n      }\n      throw new Error('Unexpected destructuring declaration found.');\n    },\n    flushRenames: function(tree) {\n      tree = renameAll(this.blockRenames_, tree);\n      this.blockRenames_.length = 0;\n      return tree;\n    },\n    pushScope: function(tree) {\n      var scope = this.scopeBuilder_.getScopeForTree(tree);\n      if (!scope)\n        throw new Error('BlockBindingTransformer tree with no scope');\n      if (this.scope_)\n        this.scope_.blockBindingRenames = this.blockRenames_;\n      this.scope_ = scope;\n      this.blockRenames_ = [];\n      return scope;\n    },\n    popScope: function(scope) {\n      if (this.scope_ != scope) {\n        throw new Error('BlockBindingTransformer scope mismatch');\n      }\n      this.scope_ = scope.parent;\n      this.blockRenames_ = this.scope_ && this.scope_.blockBindingRenames || [];\n    },\n    revisitTreeForScopes: function(tree) {\n      this.scopeBuilder_.scope = this.scope_;\n      this.scopeBuilder_.visitAny(tree);\n      this.scopeBuilder_.scope = null;\n    },\n    needsRename_: function(name) {\n      if (this.usedVars_[name])\n        return true;\n      var scope = this.scope_;\n      var parent = scope.parent;\n      if (!parent || scope.isVarScope)\n        return false;\n      var parentBinding = parent.getBindingByName(name);\n      if (!parentBinding)\n        return false;\n      var currentBinding = scope.getBindingByName(name);\n      if (currentBinding.tree === parentBinding.tree)\n        return false;\n      return true;\n    },\n    newNameFromOrig: function(origName, renames) {\n      var newName;\n      if (this.needsRename_(origName)) {\n        newName = origName + this.idGenerator_.generateUniqueIdentifier();\n        renames.push(new Rename(origName, newName));\n      } else {\n        this.usedVars_[origName] = true;\n        newName = origName;\n      }\n      return newName;\n    },\n    transformFunctionBody: function(tree) {\n      if (tree === this.rootTree_ || !this.rootTree_) {\n        tree = $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n        if (this.prependStatement_.length || this.blockRenames_.length) {\n          var statements = prependStatements.apply(null, $traceurRuntime.spread([tree.statements], this.prependStatement_));\n          tree = new FunctionBody(tree.location, statements);\n          tree = this.flushRenames(tree);\n        }\n      } else {\n        var functionTransform = new $BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_, this.scope_);\n        var functionBodyTree = functionTransform.transformAny(tree);\n        if (functionBodyTree === tree) {\n          return tree;\n        }\n        tree = new FunctionBody(tree.location, functionBodyTree.statements);\n      }\n      return tree;\n    },\n    transformScript: function(tree) {\n      if (tree === this.rootTree_ || !this.rootTree_) {\n        tree = $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformScript\").call(this, tree);\n        if (this.prependStatement_.length || this.blockRenames_.length) {\n          var scriptItemList = prependStatements.apply(null, $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_));\n          tree = new Script(tree.location, scriptItemList, tree.moduleName);\n          tree = this.flushRenames(tree);\n        }\n      } else {\n        var functionTransform = new $BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_);\n        var newTree = functionTransform.transformAny(tree);\n        if (newTree === tree) {\n          return tree;\n        }\n        tree = new Script(tree.location, newTree.scriptItemList, tree.moduleName);\n      }\n      return tree;\n    },\n    transformModule: function(tree) {\n      if (tree === this.rootTree_ || !this.rootTree_) {\n        tree = $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformModule\").call(this, tree);\n        if (this.prependStatement_.length || this.blockRenames_.length) {\n          var scriptItemList = prependStatements.apply(null, $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_));\n          tree = new Module(tree.location, scriptItemList, tree.moduleName);\n          tree = this.flushRenames(tree);\n        }\n      } else {\n        var functionTransform = new $BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_);\n        var newTree = functionTransform.transformAny(tree);\n        if (newTree === tree) {\n          return tree;\n        }\n        tree = new Module(tree.location, newTree.scriptItemList, tree.moduleName);\n      }\n      return tree;\n    },\n    transformVariableStatement: function(tree) {\n      var declarations = this.transformAny(tree.declarations);\n      if (declarations.type === ANON_BLOCK) {\n        return declarations;\n      }\n      if (declarations === tree.declarations) {\n        return tree;\n      }\n      return new VariableStatement(tree.location, declarations);\n    },\n    transformVariableDeclarationList: function(tree) {\n      if (tree.declarationType === VAR) {\n        return $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformVariableDeclarationList\").call(this, tree);\n      }\n      this.maybeRename_ = !this.scope_.isVarScope;\n      var declarations = this.transformList(tree.declarations);\n      this.maybeRename_ = false;\n      return new VariableDeclarationList(tree.location, VAR, declarations);\n    },\n    transformVariableDeclaration: function(tree) {\n      var maybeRename = this.maybeRename_;\n      var lvalue = this.transformAny(tree.lvalue);\n      this.maybeRename_ = false;\n      var initializer = this.transformAny(tree.initializer);\n      this.maybeRename_ = maybeRename;\n      if (tree.lvalue === lvalue && tree.initializer === initializer) {\n        return tree;\n      }\n      return new VariableDeclaration(tree.location, lvalue, tree.typeAnnotation, initializer);\n    },\n    transformBindingIdentifier: function(tree) {\n      if (this.maybeRename_) {\n        var origName = tree.getStringValue();\n        var newName = this.newNameFromOrig(origName, this.blockRenames_);\n        if (origName === newName) {\n          return tree;\n        }\n        var bindingIdentifier = new BindingIdentifier(tree.location, newName);\n        this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_);\n        return bindingIdentifier;\n      }\n      return $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformBindingIdentifier\").call(this, tree);\n    },\n    transformBindingElement: function(tree) {\n      var maybeRename = this.maybeRename_;\n      var inObjectPattern = this.inObjectPattern_;\n      var binding = this.transformAny(tree.binding);\n      this.maybeRename_ = false;\n      this.inObjectPattern_ = false;\n      var initializer = this.transformAny(tree.initializer);\n      this.maybeRename_ = maybeRename;\n      this.inObjectPattern_ = inObjectPattern;\n      if (tree.binding === binding && tree.initializer === initializer) {\n        return tree;\n      }\n      var bindingElement = new BindingElement(tree.location, binding, initializer);\n      if (this.inObjectPattern_ && tree.binding !== binding && tree.binding.type === BINDING_IDENTIFIER) {\n        return new ObjectPatternField(tree.location, new LiteralPropertyName(tree.location, tree.binding.identifierToken), bindingElement);\n      }\n      return bindingElement;\n    },\n    transformObjectPattern: function(tree) {\n      var inObjectPattern = this.inObjectPattern_;\n      this.inObjectPattern_ = true;\n      var transformed = $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformObjectPattern\").call(this, tree);\n      this.inObjectPattern_ = inObjectPattern;\n      return transformed;\n    },\n    transformObjectPatternField: function(tree) {\n      var name = this.transformAny(tree.name);\n      this.inObjectPattern_ = false;\n      var element = this.transformAny(tree.element);\n      this.inObjectPattern_ = true;\n      if (tree.name === name && tree.element === element) {\n        return tree;\n      }\n      return new ObjectPatternField(tree.location, name, element);\n    },\n    transformBlock: function(tree) {\n      var scope = this.pushScope(tree);\n      tree = $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformBlock\").call(this, tree);\n      if (this.prependBlockStatement_.length) {\n        tree = new Block(tree.location, prependStatements.apply(null, $traceurRuntime.spread([tree.statements], this.prependBlockStatement_)));\n        this.prependBlockStatement_ = [];\n      }\n      tree = this.flushRenames(tree);\n      this.popScope(scope);\n      return tree;\n    },\n    transformCatch: function(tree) {\n      var scope = this.pushScope(tree);\n      var binding = this.transformAny(tree.binding);\n      var statements = this.transformList(tree.catchBody.statements);\n      if (binding !== tree.binding || statements !== tree.catchBody.statements) {\n        tree = new Catch(tree.location, binding, new Block(tree.catchBody.location, statements));\n      }\n      tree = this.flushRenames(tree);\n      this.popScope(scope);\n      return tree;\n    },\n    transformFunctionForScope_: function(func, tree) {\n      var scope = this.pushScope(tree);\n      tree = func();\n      tree = this.flushRenames(tree);\n      this.popScope(scope);\n      return tree;\n    },\n    transformGetAccessor: function(tree) {\n      var $__12 = this;\n      return this.transformFunctionForScope_((function() {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformGetAccessor\").call($__12, tree);\n      }), tree);\n    },\n    transformSetAccessor: function(tree) {\n      var $__12 = this;\n      return this.transformFunctionForScope_((function() {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformSetAccessor\").call($__12, tree);\n      }), tree);\n    },\n    transformFunctionExpression: function(tree) {\n      var $__12 = this;\n      return this.transformFunctionForScope_((function() {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformFunctionExpression\").call($__12, tree);\n      }), tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      var $__12 = this;\n      if (!this.scope_.isVarScope) {\n        var origName = tree.name.getStringValue();\n        var newName = this.newNameFromOrig(origName, this.blockRenames_);\n        var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);\n        this.revisitTreeForScopes(functionExpression);\n        functionExpression = this.transformAny(functionExpression);\n        var bindingIdentifier = createBindingIdentifier(newName);\n        var statement = new VariableStatement(tree.location, new VariableDeclarationList(tree.location, VAR, [new VariableDeclaration(tree.location, bindingIdentifier, null, functionExpression)]));\n        this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_);\n        this.prependBlockStatement_.push(statement);\n        return new AnonBlock(null, []);\n      }\n      return this.transformFunctionForScope_((function() {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformFunctionDeclaration\").call($__12, tree);\n      }), tree);\n    },\n    transformLoop_: function(func, tree, loopFactory) {\n      var $__11 = this;\n      var scope,\n          initializerIsBlockBinding;\n      if (tree.initializer && tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) {\n        initializerIsBlockBinding = true;\n      }\n      if (initializerIsBlockBinding) {\n        scope = this.pushScope(tree);\n      }\n      var finder = new FindBlockBindingInLoop(tree, this.scopeBuilder_);\n      if (!finder.found) {\n        if (initializerIsBlockBinding) {\n          var renames = [];\n          var initializer = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map((function(declaration) {\n            var origName = $__11.getVariableName_(declaration);\n            var newName = $__11.newNameFromOrig(origName, renames);\n            var bindingIdentifier = createBindingIdentifier(newName);\n            $__11.scope_.renameBinding(origName, bindingIdentifier, VAR, $__11.reporter_);\n            return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer);\n          })));\n          initializer = renameAll(renames, initializer);\n          tree = loopFactory(initializer, renames, renameAll(renames, tree.body));\n          this.revisitTreeForScopes(tree);\n          tree = func(tree);\n        } else {\n          return func(tree);\n        }\n      } else {\n        var iifeParameterList = [];\n        var iifeArgumentList = [];\n        var renames = [];\n        var initializer = null;\n        if (tree.initializer && tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) {\n          initializer = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map((function(declaration) {\n            var origName = $__11.getVariableName_(declaration);\n            var newName = $__11.newNameFromOrig(origName, renames);\n            iifeArgumentList.push(createIdentifierExpression(newName));\n            iifeParameterList.push(new FormalParameter(null, new BindingElement(null, createBindingIdentifier(origName), null), null, []));\n            var bindingIdentifier = createBindingIdentifier(newName);\n            $__11.scope_.renameBinding(origName, bindingIdentifier, VAR, $__11.reporter_);\n            return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer);\n          })));\n          initializer = renameAll(renames, initializer);\n        } else {\n          initializer = this.transformAny(tree.initializer);\n        }\n        var loopLabel = this.labelledLoops_.get(tree);\n        var iifeInfo = FnExtractAbruptCompletions.createIIFE(this.idGenerator_, tree.body, iifeParameterList, iifeArgumentList, (function() {\n          return loopLabel = loopLabel || $__11.idGenerator_.generateUniqueIdentifier();\n        }));\n        tree = loopFactory(initializer, renames, iifeInfo.loopBody);\n        if (loopLabel) {\n          tree = new LabelledStatement(tree.location, createIdentifierToken(loopLabel), tree);\n        }\n        tree = new AnonBlock(tree.location, [iifeInfo.variableStatements, tree]);\n        this.revisitTreeForScopes(tree);\n        tree = this.transformAny(tree);\n      }\n      if (initializerIsBlockBinding) {\n        tree = this.flushRenames(tree);\n        this.popScope(scope);\n      }\n      return tree;\n    },\n    transformForInStatement: function(tree) {\n      var $__12 = this;\n      return this.transformLoop_((function(t) {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformForInStatement\").call($__12, t);\n      }), tree, (function(initializer, renames, body) {\n        return new ForInStatement(tree.location, initializer, renameAll(renames, tree.collection), body);\n      }));\n    },\n    transformForStatement: function(tree) {\n      var $__12 = this;\n      return this.transformLoop_((function(t) {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformForStatement\").call($__12, t);\n      }), tree, (function(initializer, renames, body) {\n        return new ForStatement(tree.location, initializer, renameAll(renames, tree.condition), renameAll(renames, tree.increment), body);\n      }));\n    },\n    transformWhileStatement: function(tree) {\n      var $__12 = this;\n      return this.transformLoop_((function(t) {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformWhileStatement\").call($__12, t);\n      }), tree, (function(initializer, renames, body) {\n        return new WhileStatement(tree.location, renameAll(renames, tree.condition), body);\n      }));\n    },\n    transformDoWhileStatement: function(tree) {\n      var $__12 = this;\n      return this.transformLoop_((function(t) {\n        return $traceurRuntime.superGet($__12, $BlockBindingTransformer.prototype, \"transformDoWhileStatement\").call($__12, t);\n      }), tree, (function(initializer, renames, body) {\n        return new DoWhileStatement(tree.location, body, renameAll(renames, tree.condition));\n      }));\n    },\n    transformLabelledStatement: function(tree) {\n      if (tree.statement.isIterationStatement()) {\n        this.labelledLoops_.set(tree.statement, tree.name.value);\n        var statement = this.transformAny(tree.statement);\n        if (!statement.isStatement()) {\n          return statement;\n        }\n        if (statement === tree.statement) {\n          return tree;\n        }\n        return new LabelledStatement(tree.location, tree.name, statement);\n      }\n      return $traceurRuntime.superGet(this, $BlockBindingTransformer.prototype, \"transformLabelledStatement\").call(this, tree);\n    }\n  }, {}, ParseTreeTransformer);\n  var Rename = function Rename(oldName, newName) {\n    this.oldName = oldName;\n    this.newName = newName;\n  };\n  ($traceurRuntime.createClass)(Rename, {}, {});\n  function renameAll(renames, tree) {\n    renames.forEach((function(rename) {\n      tree = AlphaRenamer.rename(tree, rename.oldName, rename.newName);\n    }));\n    return tree;\n  }\n  var FindBlockBindingInLoop = function FindBlockBindingInLoop(tree, scopeBuilder) {\n    this.scopeBuilder_ = scopeBuilder;\n    this.topScope_ = scopeBuilder.getScopeForTree(tree) || scopeBuilder.getScopeForTree(tree.body);\n    this.outOfScope_ = null;\n    this.acceptLoop_ = tree.isIterationStatement();\n    $traceurRuntime.superConstructor($FindBlockBindingInLoop).call(this, tree, false);\n  };\n  var $FindBlockBindingInLoop = FindBlockBindingInLoop;\n  ($traceurRuntime.createClass)(FindBlockBindingInLoop, {\n    visitForInStatement: function(tree) {\n      var $__12 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__12, $FindBlockBindingInLoop.prototype, \"visitForInStatement\").call($__12, tree);\n      }));\n    },\n    visitForStatement: function(tree) {\n      var $__12 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__12, $FindBlockBindingInLoop.prototype, \"visitForStatement\").call($__12, tree);\n      }));\n    },\n    visitWhileStatement: function(tree) {\n      var $__12 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__12, $FindBlockBindingInLoop.prototype, \"visitWhileStatement\").call($__12, tree);\n      }));\n    },\n    visitDoWhileStatement: function(tree) {\n      var $__12 = this;\n      this.visitLoop_(tree, (function() {\n        return $traceurRuntime.superGet($__12, $FindBlockBindingInLoop.prototype, \"visitDoWhileStatement\").call($__12, tree);\n      }));\n    },\n    visitLoop_: function(tree, func) {\n      if (this.acceptLoop_) {\n        this.acceptLoop_ = false;\n      } else if (!this.outOfScope_) {\n        this.outOfScope_ = this.scopeBuilder_.getScopeForTree(tree) || this.scopeBuilder_.getScopeForTree(tree.body);\n      }\n      func();\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitFunctionExpression: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitSetAccessor: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitGetAccessor: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitPropertyMethodAssignment: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitArrowFunctionExpression: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitFunction_: function(tree) {\n      var $__11 = this;\n      this.found = new FindIdentifiers(tree, (function(identifierToken, identScope) {\n        identScope = $__11.scopeBuilder_.getScopeForTree(identScope);\n        var fnScope = $__11.outOfScope_ || $__11.scopeBuilder_.getScopeForTree(tree);\n        if (identScope.hasLexicalBindingName(identifierToken)) {\n          return false;\n        }\n        while (identScope !== fnScope && (identScope = identScope.parent)) {\n          if (identScope.hasLexicalBindingName(identifierToken)) {\n            return false;\n          }\n        }\n        while (fnScope = fnScope.parent) {\n          if (fnScope.hasLexicalBindingName(identifierToken)) {\n            return true;\n          }\n          if (fnScope === $__11.topScope_)\n            break;\n        }\n        return false;\n      })).found;\n    }\n  }, {}, FindVisitor);\n  return {get BlockBindingTransformer() {\n      return BlockBindingTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/MakeStrictTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/MakeStrictTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/MakeStrictTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      FunctionBody = $__0.FunctionBody,\n      Script = $__0.Script;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var createUseStrictDirective = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createUseStrictDirective;\n  var hasUseStrict = System.get(\"traceur@0.0.74/src/semantics/util\").hasUseStrict;\n  function prepend(statements) {\n    return $traceurRuntime.spread([createUseStrictDirective()], statements);\n  }\n  var MakeStrictTransformer = function MakeStrictTransformer() {\n    $traceurRuntime.superConstructor($MakeStrictTransformer).apply(this, arguments);\n  };\n  var $MakeStrictTransformer = MakeStrictTransformer;\n  ($traceurRuntime.createClass)(MakeStrictTransformer, {\n    transformScript: function(tree) {\n      if (hasUseStrict(tree.scriptItemList))\n        return tree;\n      return new Script(tree.location, prepend(tree.scriptItemList));\n    },\n    transformFunctionBody: function(tree) {\n      if (hasUseStrict(tree.statements))\n        return tree;\n      return new FunctionBody(tree.location, prepend(tree.statements));\n    }\n  }, {transformTree: function(tree) {\n      return new $MakeStrictTransformer().transformAny(tree);\n    }}, ParseTreeTransformer);\n  return {get MakeStrictTransformer() {\n      return MakeStrictTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/assignmentOperatorToBinaryOperator\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/assignmentOperatorToBinaryOperator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/assignmentOperatorToBinaryOperator\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AMPERSAND = $__0.AMPERSAND,\n      AMPERSAND_EQUAL = $__0.AMPERSAND_EQUAL,\n      BAR = $__0.BAR,\n      BAR_EQUAL = $__0.BAR_EQUAL,\n      CARET = $__0.CARET,\n      CARET_EQUAL = $__0.CARET_EQUAL,\n      LEFT_SHIFT = $__0.LEFT_SHIFT,\n      LEFT_SHIFT_EQUAL = $__0.LEFT_SHIFT_EQUAL,\n      MINUS = $__0.MINUS,\n      MINUS_EQUAL = $__0.MINUS_EQUAL,\n      PERCENT = $__0.PERCENT,\n      PERCENT_EQUAL = $__0.PERCENT_EQUAL,\n      PLUS = $__0.PLUS,\n      PLUS_EQUAL = $__0.PLUS_EQUAL,\n      RIGHT_SHIFT = $__0.RIGHT_SHIFT,\n      RIGHT_SHIFT_EQUAL = $__0.RIGHT_SHIFT_EQUAL,\n      SLASH = $__0.SLASH,\n      SLASH_EQUAL = $__0.SLASH_EQUAL,\n      STAR = $__0.STAR,\n      STAR_EQUAL = $__0.STAR_EQUAL,\n      STAR_STAR = $__0.STAR_STAR,\n      STAR_STAR_EQUAL = $__0.STAR_STAR_EQUAL,\n      UNSIGNED_RIGHT_SHIFT = $__0.UNSIGNED_RIGHT_SHIFT,\n      UNSIGNED_RIGHT_SHIFT_EQUAL = $__0.UNSIGNED_RIGHT_SHIFT_EQUAL;\n  function assignmentOperatorToBinaryOperator(type) {\n    switch (type) {\n      case STAR_EQUAL:\n        return STAR;\n      case STAR_STAR_EQUAL:\n        return STAR_STAR;\n      case SLASH_EQUAL:\n        return SLASH;\n      case PERCENT_EQUAL:\n        return PERCENT;\n      case PLUS_EQUAL:\n        return PLUS;\n      case MINUS_EQUAL:\n        return MINUS;\n      case LEFT_SHIFT_EQUAL:\n        return LEFT_SHIFT;\n      case RIGHT_SHIFT_EQUAL:\n        return RIGHT_SHIFT;\n      case UNSIGNED_RIGHT_SHIFT_EQUAL:\n        return UNSIGNED_RIGHT_SHIFT;\n      case AMPERSAND_EQUAL:\n        return AMPERSAND;\n      case CARET_EQUAL:\n        return CARET;\n      case BAR_EQUAL:\n        return BAR;\n      default:\n        throw Error('unreachable');\n    }\n  }\n  var $__default = assignmentOperatorToBinaryOperator;\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignmentExpression = $__1.createAssignmentExpression,\n      createCommaExpression = $__1.createCommaExpression,\n      id = $__1.createIdentifierExpression,\n      createMemberExpression = $__1.createMemberExpression,\n      createNumberLiteral = $__1.createNumberLiteral,\n      createOperatorToken = $__1.createOperatorToken,\n      createParenExpression = $__1.createParenExpression;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AND = $__2.AND,\n      EQUAL = $__2.EQUAL,\n      MINUS = $__2.MINUS,\n      MINUS_EQUAL = $__2.MINUS_EQUAL,\n      MINUS_MINUS = $__2.MINUS_MINUS,\n      OR = $__2.OR,\n      PLUS = $__2.PLUS,\n      PLUS_EQUAL = $__2.PLUS_EQUAL,\n      PLUS_PLUS = $__2.PLUS_PLUS;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      COMMA_EXPRESSION = $__3.COMMA_EXPRESSION,\n      IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION,\n      MEMBER_EXPRESSION = $__3.MEMBER_EXPRESSION,\n      MEMBER_LOOKUP_EXPRESSION = $__3.MEMBER_LOOKUP_EXPRESSION,\n      PROPERTY_NAME_ASSIGNMENT = $__3.PROPERTY_NAME_ASSIGNMENT,\n      SPREAD_EXPRESSION = $__3.SPREAD_EXPRESSION,\n      TEMPLATE_LITERAL_PORTION = $__3.TEMPLATE_LITERAL_PORTION;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      ArgumentList = $__4.ArgumentList,\n      ArrayLiteralExpression = $__4.ArrayLiteralExpression,\n      AwaitExpression = $__4.AwaitExpression,\n      BinaryExpression = $__4.BinaryExpression,\n      CallExpression = $__4.CallExpression,\n      ConditionalExpression = $__4.ConditionalExpression,\n      MemberExpression = $__4.MemberExpression,\n      MemberLookupExpression = $__4.MemberLookupExpression,\n      NewExpression = $__4.NewExpression,\n      ObjectLiteralExpression = $__4.ObjectLiteralExpression,\n      PropertyNameAssignment = $__4.PropertyNameAssignment,\n      SpreadExpression = $__4.SpreadExpression,\n      TemplateLiteralExpression = $__4.TemplateLiteralExpression,\n      TemplateSubstitution = $__4.TemplateSubstitution,\n      UnaryExpression = $__4.UnaryExpression,\n      YieldExpression = $__4.YieldExpression;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var assignmentOperatorToBinaryOperator = System.get(\"traceur@0.0.74/src/codegeneration/assignmentOperatorToBinaryOperator\").default;\n  var CommaExpressionBuilder = function CommaExpressionBuilder(tempVar) {\n    this.tempVar = tempVar;\n    this.expressions = [];\n  };\n  ($traceurRuntime.createClass)(CommaExpressionBuilder, {\n    add: function(tree) {\n      var $__8;\n      if (tree.type === COMMA_EXPRESSION)\n        ($__8 = this.expressions).push.apply($__8, $traceurRuntime.spread(getExpressions(tree)));\n      return this;\n    },\n    build: function(tree) {\n      var tempVar = this.tempVar;\n      this.expressions.push(createAssignmentExpression(tempVar, tree), tempVar);\n      return createCommaExpression(this.expressions);\n    }\n  }, {});\n  function getResult(tree) {\n    if (tree.type === COMMA_EXPRESSION)\n      return tree.expressions[tree.expressions.length - 1];\n    return tree;\n  }\n  function getExpressions(tree) {\n    if (tree.type === COMMA_EXPRESSION)\n      return tree.expressions.slice(0, -1);\n    return [];\n  }\n  var ExplodeExpressionTransformer = function ExplodeExpressionTransformer(tempVarTransformer) {\n    $traceurRuntime.superConstructor($ExplodeExpressionTransformer).call(this);\n    this.tempVarTransformer_ = tempVarTransformer;\n  };\n  var $ExplodeExpressionTransformer = ExplodeExpressionTransformer;\n  ($traceurRuntime.createClass)(ExplodeExpressionTransformer, {\n    addTempVar: function() {\n      var tmpId = this.tempVarTransformer_.addTempVar();\n      return id(tmpId);\n    },\n    transformUnaryExpression: function(tree) {\n      if (tree.operator.type == PLUS_PLUS)\n        return this.transformUnaryNumeric(tree, PLUS_EQUAL);\n      if (tree.operator.type == MINUS_MINUS)\n        return this.transformUnaryNumeric(tree, MINUS_EQUAL);\n      var operand = this.transformAny(tree.operand);\n      if (operand === tree.operand)\n        return tree;\n      var expressions = $traceurRuntime.spread(getExpressions(operand), [new UnaryExpression(tree.location, tree.operator, getResult(operand))]);\n      return createCommaExpression(expressions);\n    },\n    transformUnaryNumeric: function(tree, operator) {\n      return this.transformAny(new BinaryExpression(tree.location, tree.operand, createOperatorToken(operator), createNumberLiteral(1)));\n    },\n    transformPostfixExpression: function(tree) {\n      if (tree.operand.type === MEMBER_EXPRESSION)\n        return this.transformPostfixMemberExpression(tree);\n      if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION)\n        return this.transformPostfixMemberLookupExpression(tree);\n      assert(tree.operand.type === IDENTIFIER_EXPRESSION);\n      var operand = tree.operand;\n      var tmp = this.addTempVar();\n      var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;\n      var expressions = [createAssignmentExpression(tmp, operand), createAssignmentExpression(operand, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp];\n      return createCommaExpression(expressions);\n    },\n    transformPostfixMemberExpression: function(tree) {\n      var memberName = tree.operand.memberName;\n      var operand = this.transformAny(tree.operand.operand);\n      var tmp = this.addTempVar();\n      var memberExpression = new MemberExpression(tree.operand.location, getResult(operand), memberName);\n      var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;\n      var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(memberExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]);\n      return createCommaExpression(expressions);\n    },\n    transformPostfixMemberLookupExpression: function(tree) {\n      var memberExpression = this.transformAny(tree.operand.memberExpression);\n      var operand = this.transformAny(tree.operand.operand);\n      var tmp = this.addTempVar();\n      var memberLookupExpression = new MemberLookupExpression(null, getResult(operand), getResult(memberExpression));\n      var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;\n      var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(memberLookupExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]);\n      return createCommaExpression(expressions);\n    },\n    transformYieldExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      return this.createCommaExpressionBuilder().add(expression).build(new YieldExpression(tree.location, getResult(expression), tree.isYieldFor));\n    },\n    transformAwaitExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      return this.createCommaExpressionBuilder().add(expression).build(new AwaitExpression(tree.location, getResult(expression)));\n    },\n    transformParenExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression)\n        return tree;\n      var result = getResult(expression);\n      if (result.type === IDENTIFIER_EXPRESSION)\n        return expression;\n      return this.createCommaExpressionBuilder().add(expression).build(result);\n    },\n    transformCommaExpression: function(tree) {\n      var expressions = this.transformList(tree.expressions);\n      if (expressions === tree.expressions)\n        return tree;\n      var builder = new CommaExpressionBuilder(null);\n      for (var i = 0; i < expressions.length; i++) {\n        builder.add(expressions[i]);\n      }\n      return createCommaExpression($traceurRuntime.spread(builder.expressions, [getResult(expressions[expressions.length - 1])]));\n    },\n    transformMemberExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      return this.createCommaExpressionBuilder().add(operand).build(new MemberExpression(tree.location, getResult(operand), tree.memberName));\n    },\n    transformMemberLookupExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var memberExpression = this.transformAny(tree.memberExpression);\n      return this.createCommaExpressionBuilder().add(operand).add(memberExpression).build(new MemberLookupExpression(tree.location, getResult(operand), getResult(memberExpression)));\n    },\n    transformBinaryExpression: function(tree) {\n      if (tree.operator.isAssignmentOperator())\n        return this.transformAssignmentExpression(tree);\n      var left = this.transformAny(tree.left);\n      var right = this.transformAny(tree.right);\n      if (left === tree.left && right === tree.right)\n        return tree;\n      if (tree.operator.type === OR)\n        return this.transformOr(left, right);\n      if (tree.operator.type === AND)\n        return this.transformAnd(left, right);\n      var expressions = $traceurRuntime.spread(getExpressions(left), getExpressions(right), [new BinaryExpression(tree.location, getResult(left), tree.operator, getResult(right))]);\n      return createCommaExpression(expressions);\n    },\n    transformAssignmentExpression: function(tree) {\n      var left = tree.left;\n      if (left.type === MEMBER_EXPRESSION)\n        return this.transformAssignMemberExpression(tree);\n      if (left.type === MEMBER_LOOKUP_EXPRESSION)\n        return this.transformAssignMemberLookupExpression(tree);\n      assert(tree.left.type === IDENTIFIER_EXPRESSION);\n      if (tree.operator.type === EQUAL) {\n        var left = this.transformAny(left);\n        var right = this.transformAny(tree.right);\n        var expressions = $traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(left, getResult(right)), getResult(right)]);\n        return createCommaExpression(expressions);\n      }\n      var right = this.transformAny(tree.right);\n      var tmp = this.addTempVar();\n      var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));\n      var expressions = $traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(tmp, new BinaryExpression(tree.location, left, binop, getResult(right))), createAssignmentExpression(left, tmp), tmp]);\n      return createCommaExpression(expressions);\n    },\n    transformAssignMemberExpression: function(tree) {\n      var left = tree.left;\n      if (tree.operator.type === EQUAL) {\n        var operand = this.transformAny(left.operand);\n        var right = this.transformAny(tree.right);\n        var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(right), [new BinaryExpression(tree.location, new MemberExpression(left.location, getResult(operand), left.memberName), tree.operator, getResult(right)), getResult(right)]);\n        return createCommaExpression(expressions);\n      }\n      var operand = this.transformAny(left.operand);\n      var right = this.transformAny(tree.right);\n      var tmp = this.addTempVar();\n      var memberExpression = new MemberExpression(left.location, getResult(operand), left.memberName);\n      var tmp2 = this.addTempVar();\n      var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));\n      var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(right), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberExpression, tmp2), tmp2]);\n      return createCommaExpression(expressions);\n    },\n    transformAssignMemberLookupExpression: function(tree) {\n      var left = tree.left;\n      if (tree.operator.type === EQUAL) {\n        var operand = this.transformAny(left.operand);\n        var memberExpression = this.transformAny(left.memberExpression);\n        var right = this.transformAny(tree.right);\n        var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), getExpressions(right), [new BinaryExpression(tree.location, new MemberLookupExpression(left.location, getResult(operand), getResult(memberExpression)), tree.operator, getResult(right)), getResult(right)]);\n        return createCommaExpression(expressions);\n      }\n      var operand = this.transformAny(left.operand);\n      var memberExpression = this.transformAny(left.memberExpression);\n      var right = this.transformAny(tree.right);\n      var tmp = this.addTempVar();\n      var memberLookupExpression = new MemberLookupExpression(left.location, getResult(operand), getResult(memberExpression));\n      var tmp2 = this.addTempVar();\n      var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));\n      var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), getExpressions(right), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberLookupExpression, tmp2), tmp2]);\n      return createCommaExpression(expressions);\n    },\n    transformArrayLiteralExpression: function(tree) {\n      var elements = this.transformList(tree.elements);\n      if (elements === tree.elements)\n        return tree;\n      var builder = this.createCommaExpressionBuilder();\n      var results = [];\n      for (var i = 0; i < elements.length; i++) {\n        builder.add(elements[i]);\n        results.push(getResult(elements[i]));\n      }\n      return builder.build(new ArrayLiteralExpression(tree.location, results));\n    },\n    transformObjectLiteralExpression: function(tree) {\n      var propertyNameAndValues = this.transformList(tree.propertyNameAndValues);\n      if (propertyNameAndValues === tree.propertyNameAndValues)\n        return tree;\n      var builder = this.createCommaExpressionBuilder();\n      var results = [];\n      for (var i = 0; i < propertyNameAndValues.length; i++) {\n        if (propertyNameAndValues[i].type === PROPERTY_NAME_ASSIGNMENT) {\n          builder.add(propertyNameAndValues[i].value);\n          results.push(new PropertyNameAssignment(propertyNameAndValues[i].location, propertyNameAndValues[i].name, getResult(propertyNameAndValues[i].value)));\n        } else {\n          results.push(propertyNameAndValues[i]);\n        }\n      }\n      return builder.build(new ObjectLiteralExpression(tree.location, results));\n    },\n    transformTemplateLiteralExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var elements = this.transformList(tree.elements);\n      if (!operand && operand === tree.operand && elements === tree.elements)\n        return tree;\n      var builder = this.createCommaExpressionBuilder();\n      if (operand)\n        builder.add(operand);\n      var results = [];\n      for (var i = 0; i < elements.length; i++) {\n        if (elements[i].type === TEMPLATE_LITERAL_PORTION) {\n          results.push(elements[i]);\n        } else {\n          var expression = elements[i].expression;\n          builder.add(expression);\n          var result = getResult(expression);\n          results.push(new TemplateSubstitution(expression.location, result));\n        }\n      }\n      return builder.build(new TemplateLiteralExpression(tree.location, operand && getResult(operand), results));\n    },\n    transformCallExpression: function(tree) {\n      if (tree.operand.type === MEMBER_EXPRESSION)\n        return this.transformCallMemberExpression(tree);\n      if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION)\n        return this.transformCallMemberLookupExpression(tree);\n      return this.transformCallAndNew_(tree, CallExpression);\n    },\n    transformNewExpression: function(tree) {\n      return this.transformCallAndNew_(tree, NewExpression);\n    },\n    transformCallAndNew_: function(tree, ctor) {\n      var operand = this.transformAny(tree.operand);\n      var args = this.transformAny(tree.args);\n      var builder = this.createCommaExpressionBuilder().add(operand);\n      var argResults = [];\n      args.args.forEach((function(arg) {\n        builder.add(arg);\n        argResults.push(getResult(arg));\n      }));\n      return builder.build(new ctor(tree.location, getResult(operand), new ArgumentList(args.location, argResults)));\n    },\n    transformCallMemberExpression: function(tree) {\n      var memberName = tree.operand.memberName;\n      var operand = this.transformAny(tree.operand.operand);\n      var tmp = this.addTempVar();\n      var memberExpresssion = new MemberExpression(tree.operand.location, getResult(operand), memberName);\n      var args = this.transformAny(tree.args);\n      var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpresssion)]);\n      var argResults = [getResult(operand)];\n      args.args.forEach((function(arg) {\n        var $__8;\n        ($__8 = expressions).push.apply($__8, $traceurRuntime.spread(getExpressions(arg)));\n        argResults.push(getResult(arg));\n      }));\n      var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults));\n      var tmp2 = this.addTempVar();\n      expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2);\n      return createCommaExpression(expressions);\n    },\n    transformCallMemberLookupExpression: function(tree) {\n      var operand = this.transformAny(tree.operand.operand);\n      var memberExpression = this.transformAny(tree.operand.memberExpression);\n      var tmp = this.addTempVar();\n      var lookupExpresssion = new MemberLookupExpression(tree.operand.location, getResult(operand), getResult(memberExpression));\n      var args = this.transformAny(tree.args);\n      var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, lookupExpresssion)]);\n      var argResults = [getResult(operand)];\n      args.args.forEach((function(arg, i) {\n        var $__8;\n        ($__8 = expressions).push.apply($__8, $traceurRuntime.spread(getExpressions(arg)));\n        var result = getResult(arg);\n        if (tree.args.args[i].type === SPREAD_EXPRESSION)\n          result = new SpreadExpression(arg.location, result);\n        argResults.push(result);\n      }));\n      var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults));\n      var tmp2 = this.addTempVar();\n      expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2);\n      return createCommaExpression(expressions);\n    },\n    transformConditionalExpression: function(tree) {\n      var condition = this.transformAny(tree.condition);\n      var left = this.transformAny(tree.left);\n      var right = this.transformAny(tree.right);\n      if (condition === tree.condition && left === tree.left && right === tree.right)\n        return tree;\n      var res = this.addTempVar();\n      var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(left), [createAssignmentExpression(res, getResult(left))]));\n      var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));\n      var expressions = $traceurRuntime.spread(getExpressions(condition), [new ConditionalExpression(tree.location, getResult(condition), createParenExpression(leftTree), createParenExpression(rightTree)), res]);\n      return createCommaExpression(expressions);\n    },\n    transformOr: function(left, right) {\n      var res = this.addTempVar();\n      var leftTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]);\n      var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));\n      var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]);\n      return createCommaExpression(expressions);\n    },\n    transformAnd: function(left, right) {\n      var res = this.addTempVar();\n      var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));\n      var rightTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]);\n      var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]);\n      return createCommaExpression(expressions);\n    },\n    transformSpreadExpression: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      if (expression === tree.expression)\n        return tree;\n      var result = getResult(expression);\n      if (result.type !== SPREAD_EXPRESSION)\n        result = new SpreadExpression(result.location, result);\n      var expressions = $traceurRuntime.spread(getExpressions(expression), [result]);\n      return createCommaExpression(expressions);\n    },\n    createCommaExpressionBuilder: function() {\n      return new CommaExpressionBuilder(this.addTempVar());\n    }\n  }, {}, ParseTreeTransformer);\n  return {get ExplodeExpressionTransformer() {\n      return ExplodeExpressionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/SuperTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/SuperTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/SuperTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$traceurRuntime.superConstructor(\", \").call(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.superConstructor(\", \").call(\", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"\", \".call(\", \")\"], {raw: {value: Object.freeze([\"\", \".call(\", \")\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"$traceurRuntime.superGet(\", \", \", \", \", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.superGet(\", \", \", \", \", \")\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$traceurRuntime.superSet(\", \", \", \", \", \",\\n                                    \", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.superSet(\", \", \", \", \", \",\\n                                    \", \")\"])}}));\n  var ExplodeExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\").ExplodeExpressionTransformer;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      FunctionDeclaration = $__5.FunctionDeclaration,\n      FunctionExpression = $__5.FunctionExpression;\n  var $__6 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      MEMBER_EXPRESSION = $__6.MEMBER_EXPRESSION,\n      MEMBER_LOOKUP_EXPRESSION = $__6.MEMBER_LOOKUP_EXPRESSION,\n      SUPER_EXPRESSION = $__6.SUPER_EXPRESSION;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__8 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      EQUAL = $__8.EQUAL,\n      MINUS_MINUS = $__8.MINUS_MINUS,\n      PLUS_PLUS = $__8.PLUS_PLUS;\n  var $__9 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__9.createArgumentList,\n      createIdentifierExpression = $__9.createIdentifierExpression,\n      createParenExpression = $__9.createParenExpression,\n      createStringLiteral = $__9.createStringLiteral,\n      createThisExpression = $__9.createThisExpression;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  var ExplodeSuperExpression = function ExplodeSuperExpression() {\n    $traceurRuntime.superConstructor($ExplodeSuperExpression).apply(this, arguments);\n  };\n  var $ExplodeSuperExpression = ExplodeSuperExpression;\n  ($traceurRuntime.createClass)(ExplodeSuperExpression, {\n    transformArrowFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformClassExpression: function(tree) {\n      return tree;\n    },\n    transformFunctionBody: function(tree) {\n      return tree;\n    }\n  }, {}, ExplodeExpressionTransformer);\n  var SuperTransformer = function SuperTransformer(tempVarTransformer, protoName, thisName, internalName) {\n    this.tempVarTransformer_ = tempVarTransformer;\n    this.protoName_ = protoName;\n    this.internalName_ = internalName;\n    this.superCount_ = 0;\n    this.thisVar_ = createIdentifierExpression(thisName);\n    this.inNestedFunc_ = 0;\n    this.nestedSuperCount_ = 0;\n  };\n  var $SuperTransformer = SuperTransformer;\n  ($traceurRuntime.createClass)(SuperTransformer, {\n    get hasSuper() {\n      return this.superCount_ > 0;\n    },\n    get nestedSuper() {\n      return this.nestedSuperCount_ > 0;\n    },\n    transformFunctionDeclaration: function(tree) {\n      return this.transformFunction_(tree, FunctionDeclaration);\n    },\n    transformFunctionExpression: function(tree) {\n      return this.transformFunction_(tree, FunctionExpression);\n    },\n    transformFunction_: function(tree, constructor) {\n      var oldSuperCount = this.superCount_;\n      this.inNestedFunc_++;\n      var transformedTree = constructor === FunctionExpression ? $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformFunctionExpression\").call(this, tree) : $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n      this.inNestedFunc_--;\n      if (oldSuperCount !== this.superCount_)\n        this.nestedSuperCount_ += this.superCount_ - oldSuperCount;\n      return transformedTree;\n    },\n    transformGetAccessor: function(tree) {\n      return tree;\n    },\n    transformSetAccessor: function(tree) {\n      return tree;\n    },\n    transformPropertyMethodAssignMent: function(tree) {\n      return tree;\n    },\n    transformCallExpression: function(tree) {\n      if (tree.operand.type == SUPER_EXPRESSION) {\n        this.superCount_++;\n        return this.createSuperCall_(tree);\n      }\n      if (hasSuperMemberExpression(tree.operand)) {\n        this.superCount_++;\n        var name;\n        if (tree.operand.type == MEMBER_EXPRESSION)\n          name = tree.operand.memberName.value;\n        else\n          name = tree.operand.memberExpression;\n        return this.createSuperCallMethod_(name, tree);\n      }\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformCallExpression\").call(this, tree);\n    },\n    createSuperCall_: function(tree) {\n      var thisExpr = this.inNestedFunc_ ? this.thisVar_ : createThisExpression();\n      var args = createArgumentList($traceurRuntime.spread([thisExpr], tree.args.args));\n      return parseExpression($__0, this.internalName_, args);\n    },\n    createSuperCallMethod_: function(methodName, tree) {\n      var thisExpr = this.inNestedFunc_ ? this.thisVar_ : createThisExpression();\n      var operand = this.transformMemberShared_(methodName);\n      var args = createArgumentList($traceurRuntime.spread([thisExpr], tree.args.args));\n      return parseExpression($__1, operand, args);\n    },\n    transformMemberShared_: function(name) {\n      var thisExpr = this.inNestedFunc_ ? this.thisVar_ : createThisExpression();\n      return parseExpression($__2, thisExpr, this.protoName_, name);\n    },\n    transformMemberExpression: function(tree) {\n      if (tree.operand.type === SUPER_EXPRESSION) {\n        this.superCount_++;\n        return this.transformMemberShared_(tree.memberName.value);\n      }\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformMemberExpression\").call(this, tree);\n    },\n    transformMemberLookupExpression: function(tree) {\n      if (tree.operand.type === SUPER_EXPRESSION)\n        return this.transformMemberShared_(tree.memberExpression);\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformMemberLookupExpression\").call(this, tree);\n    },\n    transformBinaryExpression: function(tree) {\n      if (tree.operator.isAssignmentOperator() && hasSuperMemberExpression(tree.left)) {\n        if (tree.operator.type !== EQUAL) {\n          var exploded = new ExplodeSuperExpression(this.tempVarTransformer_).transformAny(tree);\n          return this.transformAny(createParenExpression(exploded));\n        }\n        this.superCount_++;\n        var name = tree.left.type === MEMBER_LOOKUP_EXPRESSION ? tree.left.memberExpression : createStringLiteral(tree.left.memberName.value);\n        var thisExpr = this.inNestedFunc_ ? this.thisVar_ : createThisExpression();\n        var right = this.transformAny(tree.right);\n        return parseExpression($__3, thisExpr, this.protoName_, name, right);\n      }\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformBinaryExpression\").call(this, tree);\n    },\n    transformUnaryExpression: function(tree) {\n      var transformed = this.transformIncrementDecrement_(tree);\n      if (transformed)\n        return transformed;\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformUnaryExpression\").call(this, tree);\n    },\n    transformPostfixExpression: function(tree) {\n      var transformed = this.transformIncrementDecrement_(tree);\n      if (transformed)\n        return transformed;\n      return $traceurRuntime.superGet(this, $SuperTransformer.prototype, \"transformPostfixExpression\").call(this, tree);\n    },\n    transformIncrementDecrement_: function(tree) {\n      var operator = tree.operator;\n      var operand = tree.operand;\n      if ((operator.type === PLUS_PLUS || operator.type === MINUS_MINUS) && hasSuperMemberExpression(operand)) {\n        var exploded = new ExplodeSuperExpression(this.tempVarTransformer_).transformAny(tree);\n        if (exploded !== tree)\n          exploded = createParenExpression(exploded);\n        return this.transformAny(exploded);\n      }\n      return null;\n    }\n  }, {}, ParseTreeTransformer);\n  function hasSuperMemberExpression(tree) {\n    if (tree.type !== MEMBER_EXPRESSION && tree.type !== MEMBER_LOOKUP_EXPRESSION)\n      return false;\n    return tree.operand.type === SUPER_EXPRESSION;\n  }\n  return {get SuperTransformer() {\n      return SuperTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ClassTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ClassTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ClassTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"($traceurRuntime.createClass)(\", \", \", \", \", \",\\n                                       \", \")\"], {raw: {value: Object.freeze([\"($traceurRuntime.createClass)(\", \", \", \", \", \",\\n                                       \", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"($traceurRuntime.createClass)(\", \", \", \", \", \")\"], {raw: {value: Object.freeze([\"($traceurRuntime.createClass)(\", \", \", \", \", \")\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"var \", \" = \", \"\"], {raw: {value: Object.freeze([\"var \", \" = \", \"\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"var \", \" = \", \"\"], {raw: {value: Object.freeze([\"var \", \" = \", \"\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"function($__super) {\\n          var \", \" = \", \";\\n          return ($traceurRuntime.createClass)(\", \", \", \",\\n                                               \", \", $__super);\\n        }(\", \")\"], {raw: {value: Object.freeze([\"function($__super) {\\n          var \", \" = \", \";\\n          return ($traceurRuntime.createClass)(\", \", \", \",\\n                                               \", \", $__super);\\n        }(\", \")\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"function() {\\n          var \", \" = \", \";\\n          return ($traceurRuntime.createClass)(\", \", \", \",\\n                                               \", \");\\n        }()\"], {raw: {value: Object.freeze([\"function() {\\n          var \", \" = \", \";\\n          return ($traceurRuntime.createClass)(\", \", \", \",\\n                                               \", \");\\n        }()\"])}})),\n      $__6 = Object.freeze(Object.defineProperties([\"$traceurRuntime.superConstructor(\\n          \", \").apply(this, arguments)\"], {raw: {value: Object.freeze([\"$traceurRuntime.superConstructor(\\n          \", \").apply(this, arguments)\"])}}));\n  var AlphaRenamer = System.get(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\").AlphaRenamer;\n  var CONSTRUCTOR = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").CONSTRUCTOR;\n  var $__9 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__9.AnonBlock,\n      ExportDeclaration = $__9.ExportDeclaration,\n      FunctionExpression = $__9.FunctionExpression,\n      GetAccessor = $__9.GetAccessor,\n      PropertyMethodAssignment = $__9.PropertyMethodAssignment,\n      SetAccessor = $__9.SetAccessor;\n  var $__10 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      GET_ACCESSOR = $__10.GET_ACCESSOR,\n      PROPERTY_METHOD_ASSIGNMENT = $__10.PROPERTY_METHOD_ASSIGNMENT,\n      PROPERTY_VARIABLE_DECLARATION = $__10.PROPERTY_VARIABLE_DECLARATION,\n      SET_ACCESSOR = $__10.SET_ACCESSOR;\n  var SuperTransformer = System.get(\"traceur@0.0.74/src/codegeneration/SuperTransformer\").SuperTransformer;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var MakeStrictTransformer = System.get(\"traceur@0.0.74/src/codegeneration/MakeStrictTransformer\").MakeStrictTransformer;\n  var $__15 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createEmptyParameterList = $__15.createEmptyParameterList,\n      createExpressionStatement = $__15.createExpressionStatement,\n      createFunctionBody = $__15.createFunctionBody,\n      id = $__15.createIdentifierExpression,\n      createMemberExpression = $__15.createMemberExpression,\n      createObjectLiteralExpression = $__15.createObjectLiteralExpression,\n      createParenExpression = $__15.createParenExpression,\n      createThisExpression = $__15.createThisExpression,\n      createVariableStatement = $__15.createVariableStatement;\n  var hasUseStrict = System.get(\"traceur@0.0.74/src/semantics/util\").hasUseStrict;\n  var $__17 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__17.parseExpression,\n      parseStatement = $__17.parseStatement,\n      parseStatements = $__17.parseStatements;\n  var propName = System.get(\"traceur@0.0.74/src/staticsemantics/PropName\").propName;\n  function classCall(func, object, staticObject, superClass) {\n    if (superClass) {\n      return parseExpression($__0, func, object, staticObject, superClass);\n    }\n    return parseExpression($__1, func, object, staticObject);\n  }\n  var ClassTransformer = function ClassTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($ClassTransformer).call(this, identifierGenerator);\n    this.strictCount_ = 0;\n    this.state_ = null;\n  };\n  var $ClassTransformer = ClassTransformer;\n  ($traceurRuntime.createClass)(ClassTransformer, {\n    transformExportDeclaration: function(tree) {\n      var transformed = $traceurRuntime.superGet(this, $ClassTransformer.prototype, \"transformExportDeclaration\").call(this, tree);\n      if (transformed === tree)\n        return tree;\n      var declaration = transformed.declaration;\n      if (declaration instanceof AnonBlock) {\n        var statements = $traceurRuntime.spread([new ExportDeclaration(null, declaration.statements[0], [])], declaration.statements.slice(1));\n        return new AnonBlock(null, statements);\n      }\n      return transformed;\n    },\n    transformModule: function(tree) {\n      this.strictCount_ = 1;\n      return $traceurRuntime.superGet(this, $ClassTransformer.prototype, \"transformModule\").call(this, tree);\n    },\n    transformScript: function(tree) {\n      this.strictCount_ = +hasUseStrict(tree.scriptItemList);\n      return $traceurRuntime.superGet(this, $ClassTransformer.prototype, \"transformScript\").call(this, tree);\n    },\n    transformFunctionBody: function(tree) {\n      var useStrict = +hasUseStrict(tree.statements);\n      this.strictCount_ += useStrict;\n      var result = $traceurRuntime.superGet(this, $ClassTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n      this.strictCount_ -= useStrict;\n      return result;\n    },\n    makeStrict_: function(tree) {\n      if (this.strictCount_)\n        return tree;\n      return MakeStrictTransformer.transformTree(tree);\n    },\n    transformClassElements_: function(tree, internalName) {\n      var $__19 = this;\n      var oldState = this.state_;\n      this.state_ = {hasSuper: false};\n      var superClass = this.transformAny(tree.superClass);\n      var hasConstructor = false;\n      var protoElements = [],\n          staticElements = [];\n      var constructorBody,\n          constructorParams;\n      tree.elements.forEach((function(tree) {\n        var elements,\n            homeObject;\n        if (tree.isStatic) {\n          elements = staticElements;\n          homeObject = internalName;\n        } else {\n          elements = protoElements;\n          homeObject = createMemberExpression(internalName, 'prototype');\n        }\n        switch (tree.type) {\n          case GET_ACCESSOR:\n            elements.push($__19.transformGetAccessor_(tree, homeObject));\n            break;\n          case SET_ACCESSOR:\n            elements.push($__19.transformSetAccessor_(tree, homeObject));\n            break;\n          case PROPERTY_METHOD_ASSIGNMENT:\n            var transformed = $__19.transformPropertyMethodAssignment_(tree, homeObject, internalName);\n            if (!tree.isStatic && propName(tree) === CONSTRUCTOR) {\n              hasConstructor = true;\n              constructorParams = transformed.parameterList;\n              constructorBody = transformed.body;\n            } else {\n              elements.push(transformed);\n            }\n            break;\n          case PROPERTY_VARIABLE_DECLARATION:\n            break;\n          default:\n            throw new Error((\"Unexpected class element: \" + tree.type));\n        }\n      }));\n      var object = createObjectLiteralExpression(protoElements);\n      var staticObject = createObjectLiteralExpression(staticElements);\n      var func;\n      if (!hasConstructor) {\n        func = this.getDefaultConstructor_(tree, internalName);\n      } else {\n        func = new FunctionExpression(tree.location, tree.name, false, constructorParams, null, [], constructorBody);\n      }\n      var state = this.state_;\n      this.state_ = oldState;\n      return {\n        func: func,\n        superClass: superClass,\n        object: object,\n        staticObject: staticObject,\n        hasSuper: state.hasSuper\n      };\n    },\n    transformClassDeclaration: function(tree) {\n      var name = tree.name.identifierToken;\n      var internalName = id((\"$\" + name));\n      var renamed = AlphaRenamer.rename(tree, name.value, internalName.identifierToken.value);\n      var referencesClassName = renamed !== tree;\n      var tree = renamed;\n      var $__21 = this.transformClassElements_(tree, internalName),\n          func = $__21.func,\n          hasSuper = $__21.hasSuper,\n          object = $__21.object,\n          staticObject = $__21.staticObject,\n          superClass = $__21.superClass;\n      var statements = parseStatements($__2, name, func);\n      var expr = classCall(name, object, staticObject, superClass);\n      if (hasSuper || referencesClassName) {\n        statements.push(parseStatement($__3, internalName, name));\n      }\n      statements.push(createExpressionStatement(expr));\n      var anonBlock = new AnonBlock(null, statements);\n      return this.makeStrict_(anonBlock);\n    },\n    transformClassExpression: function(tree) {\n      this.pushTempScope();\n      var name;\n      if (tree.name)\n        name = tree.name.identifierToken;\n      else\n        name = id(this.getTempIdentifier());\n      var $__21 = this.transformClassElements_(tree, name),\n          func = $__21.func,\n          hasSuper = $__21.hasSuper,\n          object = $__21.object,\n          staticObject = $__21.staticObject,\n          superClass = $__21.superClass;\n      var expression;\n      if (hasSuper || tree.name) {\n        if (superClass) {\n          expression = parseExpression($__4, name, func, name, object, staticObject, superClass);\n        } else {\n          expression = parseExpression($__5, name, func, name, object, staticObject);\n        }\n      } else {\n        expression = classCall(func, object, staticObject, superClass);\n      }\n      this.popTempScope();\n      return createParenExpression(this.makeStrict_(expression));\n    },\n    transformPropertyMethodAssignment_: function(tree, homeObject, internalName) {\n      var parameterList = this.transformAny(tree.parameterList);\n      var body = this.transformSuperInFunctionBody_(tree.body, homeObject, internalName);\n      if (!tree.isStatic && parameterList === tree.parameterList && body === tree.body) {\n        return tree;\n      }\n      var isStatic = false;\n      return new PropertyMethodAssignment(tree.location, isStatic, tree.functionKind, tree.name, parameterList, tree.typeAnnotation, tree.annotations, body);\n    },\n    transformGetAccessor_: function(tree, homeObject) {\n      var body = this.transformSuperInFunctionBody_(tree.body, homeObject);\n      if (!tree.isStatic && body === tree.body)\n        return tree;\n      return new GetAccessor(tree.location, false, tree.name, tree.typeAnnotation, tree.annotations, body);\n    },\n    transformSetAccessor_: function(tree, homeObject) {\n      var parameterList = this.transformAny(tree.parameterList);\n      var body = this.transformSuperInFunctionBody_(tree.body, homeObject);\n      if (!tree.isStatic && body === tree.body)\n        return tree;\n      return new SetAccessor(tree.location, false, tree.name, parameterList, tree.annotations, body);\n    },\n    transformSuperInFunctionBody_: function(tree, homeObject, internalName) {\n      this.pushTempScope();\n      var thisName = this.getTempIdentifier();\n      var thisDecl = createVariableStatement(VAR, thisName, createThisExpression());\n      var superTransformer = new SuperTransformer(this, homeObject, thisName, internalName);\n      var transformedTree = superTransformer.transformFunctionBody(this.transformFunctionBody(tree));\n      if (superTransformer.hasSuper)\n        this.state_.hasSuper = true;\n      this.popTempScope();\n      if (superTransformer.nestedSuper)\n        return createFunctionBody([thisDecl].concat(transformedTree.statements));\n      return transformedTree;\n    },\n    getDefaultConstructor_: function(tree, internalName) {\n      var constructorParams = createEmptyParameterList();\n      var constructorBody;\n      if (tree.superClass) {\n        var statement = parseStatement($__6, internalName);\n        constructorBody = createFunctionBody([statement]);\n        this.state_.hasSuper = true;\n      } else {\n        constructorBody = createFunctionBody([]);\n      }\n      return new FunctionExpression(tree.location, tree.name, false, constructorParams, null, [], constructorBody);\n    }\n  }, {}, TempVarTransformer);\n  return {get ClassTransformer() {\n      return ClassTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/CommonJsModuleTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/CommonJsModuleTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/CommonJsModuleTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"module.exports = function() {\\n            \", \"\\n          }.call(\", \");\"], {raw: {value: Object.freeze([\"module.exports = function() {\\n            \", \"\\n          }.call(\", \");\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"Object.defineProperties(exports, \", \");\"], {raw: {value: Object.freeze([\"Object.defineProperties(exports, \", \");\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"{get: \", \"}\"], {raw: {value: Object.freeze([\"{get: \", \"}\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"{value: \", \"}\"], {raw: {value: Object.freeze([\"{value: \", \"}\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"(\", \" = require(\", \"),\\n        \", \" && \", \".__esModule && \", \" || {default: \", \"})\"], {raw: {value: Object.freeze([\"(\", \" = require(\", \"),\\n        \", \" && \", \".__esModule && \", \" || {default: \", \"})\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"__esModule: true\"], {raw: {value: Object.freeze([\"__esModule: true\"])}}));\n  var ModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\").ModuleTransformer;\n  var $__7 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      GET_ACCESSOR = $__7.GET_ACCESSOR,\n      OBJECT_LITERAL_EXPRESSION = $__7.OBJECT_LITERAL_EXPRESSION,\n      PROPERTY_NAME_ASSIGNMENT = $__7.PROPERTY_NAME_ASSIGNMENT,\n      RETURN_STATEMENT = $__7.RETURN_STATEMENT;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var globalThis = System.get(\"traceur@0.0.74/src/codegeneration/globalThis\").default;\n  var $__10 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__10.parseExpression,\n      parsePropertyDefinition = $__10.parsePropertyDefinition,\n      parseStatement = $__10.parseStatement,\n      parseStatements = $__10.parseStatements;\n  var scopeContainsThis = System.get(\"traceur@0.0.74/src/codegeneration/scopeContainsThis\").default;\n  var $__12 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createEmptyParameterList = $__12.createEmptyParameterList,\n      createFunctionExpression = $__12.createFunctionExpression,\n      createIdentifierExpression = $__12.createIdentifierExpression,\n      createObjectLiteralExpression = $__12.createObjectLiteralExpression,\n      createPropertyNameAssignment = $__12.createPropertyNameAssignment,\n      createVariableStatement = $__12.createVariableStatement,\n      createVariableDeclaration = $__12.createVariableDeclaration,\n      createVariableDeclarationList = $__12.createVariableDeclarationList;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var CommonJsModuleTransformer = function CommonJsModuleTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($CommonJsModuleTransformer).call(this, identifierGenerator);\n    this.moduleVars_ = [];\n  };\n  var $CommonJsModuleTransformer = CommonJsModuleTransformer;\n  ($traceurRuntime.createClass)(CommonJsModuleTransformer, {\n    moduleProlog: function() {\n      var statements = $traceurRuntime.superGet(this, $CommonJsModuleTransformer.prototype, \"moduleProlog\").call(this);\n      if (this.moduleVars_.length) {\n        var tmpVarDeclarations = createVariableStatement(createVariableDeclarationList(VAR, this.moduleVars_.map((function(varName) {\n          return createVariableDeclaration(varName, null);\n        }))));\n        statements.push(tmpVarDeclarations);\n      }\n      return statements;\n    },\n    wrapModule: function(statements) {\n      var needsIife = statements.some(scopeContainsThis);\n      if (needsIife) {\n        return parseStatements($__0, statements, globalThis());\n      }\n      var last = statements[statements.length - 1];\n      statements = statements.slice(0, -1);\n      assert(last.type === RETURN_STATEMENT);\n      var exportObject = last.expression;\n      if (this.hasExports()) {\n        var descriptors = this.transformObjectLiteralToDescriptors(exportObject);\n        var exportStatement = parseStatement($__1, descriptors);\n        statements = prependStatements(statements, exportStatement);\n      }\n      return statements;\n    },\n    transformObjectLiteralToDescriptors: function(literalTree) {\n      assert(literalTree.type === OBJECT_LITERAL_EXPRESSION);\n      var props = literalTree.propertyNameAndValues.map((function(exp) {\n        var descriptor;\n        switch (exp.type) {\n          case GET_ACCESSOR:\n            var getterFunction = createFunctionExpression(createEmptyParameterList(), exp.body);\n            descriptor = parseExpression($__2, getterFunction);\n            break;\n          case PROPERTY_NAME_ASSIGNMENT:\n            descriptor = parseExpression($__3, exp.value);\n            break;\n          default:\n            throw new Error((\"Unexpected property type \" + exp.type));\n        }\n        return createPropertyNameAssignment(exp.name, descriptor);\n      }));\n      return createObjectLiteralExpression(props);\n    },\n    transformModuleSpecifier: function(tree) {\n      var moduleName = tree.token.processedValue;\n      var tmpVar = this.getTempVarNameForModuleSpecifier(tree);\n      this.moduleVars_.push(tmpVar);\n      var tvId = createIdentifierExpression(tmpVar);\n      return parseExpression($__4, tvId, moduleName, tvId, tvId, tvId, tvId);\n    },\n    getExportProperties: function() {\n      var properties = $traceurRuntime.superGet(this, $CommonJsModuleTransformer.prototype, \"getExportProperties\").call(this);\n      if (this.exportVisitor_.hasExports())\n        properties.push(parsePropertyDefinition($__5));\n      return properties;\n    }\n  }, {}, ModuleTransformer);\n  return {get CommonJsModuleTransformer() {\n      return CommonJsModuleTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ParameterTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ParameterTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ParameterTransformer\", path);\n  }\n  var FunctionBody = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").FunctionBody;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var stack = [];\n  var ParameterTransformer = function ParameterTransformer() {\n    $traceurRuntime.superConstructor($ParameterTransformer).apply(this, arguments);\n  };\n  var $ParameterTransformer = ParameterTransformer;\n  ($traceurRuntime.createClass)(ParameterTransformer, {\n    transformArrowFunctionExpression: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformArrowFunctionExpression\").call(this, tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n    },\n    transformFunctionExpression: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformFunctionExpression\").call(this, tree);\n    },\n    transformGetAccessor: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n    },\n    transformSetAccessor: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformSetAccessor\").call(this, tree);\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      stack.push([]);\n      return $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformPropertyMethodAssignment\").call(this, tree);\n    },\n    transformFunctionBody: function(tree) {\n      var transformedTree = $traceurRuntime.superGet(this, $ParameterTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n      var statements = stack.pop();\n      if (!statements.length)\n        return transformedTree;\n      statements = prependStatements.apply(null, $traceurRuntime.spread([transformedTree.statements], statements));\n      return new FunctionBody(transformedTree.location, statements);\n    },\n    get parameterStatements() {\n      return stack[stack.length - 1];\n    }\n  }, {}, TempVarTransformer);\n  return {get ParameterTransformer() {\n      return ParameterTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/DefaultParametersTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/DefaultParametersTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/DefaultParametersTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/semantics/util\"),\n      isUndefined = $__0.isUndefined,\n      isVoidExpression = $__0.isVoidExpression;\n  var FormalParameterList = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").FormalParameterList;\n  var ParameterTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParameterTransformer\").ParameterTransformer;\n  var ARGUMENTS = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\").ARGUMENTS;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      NOT_EQUAL_EQUAL = $__4.NOT_EQUAL_EQUAL,\n      VAR = $__4.VAR;\n  var $__5 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createBinaryExpression = $__5.createBinaryExpression,\n      createConditionalExpression = $__5.createConditionalExpression,\n      createIdentifierExpression = $__5.createIdentifierExpression,\n      createMemberLookupExpression = $__5.createMemberLookupExpression,\n      createNumberLiteral = $__5.createNumberLiteral,\n      createOperatorToken = $__5.createOperatorToken,\n      createVariableStatement = $__5.createVariableStatement,\n      createVoid0 = $__5.createVoid0;\n  function createDefaultAssignment(index, binding, initializer) {\n    var argumentsExpression = createMemberLookupExpression(createIdentifierExpression(ARGUMENTS), createNumberLiteral(index));\n    var assignmentExpression;\n    if (initializer === null || isUndefined(initializer) || isVoidExpression(initializer)) {\n      assignmentExpression = argumentsExpression;\n    } else {\n      assignmentExpression = createConditionalExpression(createBinaryExpression(argumentsExpression, createOperatorToken(NOT_EQUAL_EQUAL), createVoid0()), argumentsExpression, initializer);\n    }\n    return createVariableStatement(VAR, binding, assignmentExpression);\n  }\n  var DefaultParametersTransformer = function DefaultParametersTransformer() {\n    $traceurRuntime.superConstructor($DefaultParametersTransformer).apply(this, arguments);\n  };\n  var $DefaultParametersTransformer = DefaultParametersTransformer;\n  ($traceurRuntime.createClass)(DefaultParametersTransformer, {transformFormalParameterList: function(tree) {\n      var parameters = [];\n      var changed = false;\n      var defaultToUndefined = false;\n      for (var i = 0; i < tree.parameters.length; i++) {\n        var param = this.transformAny(tree.parameters[i]);\n        if (param !== tree.parameters[i])\n          changed = true;\n        if (param.isRestParameter() || !param.parameter.initializer && !defaultToUndefined) {\n          parameters.push(param);\n        } else {\n          defaultToUndefined = true;\n          changed = true;\n          this.parameterStatements.push(createDefaultAssignment(i, param.parameter.binding, param.parameter.initializer));\n        }\n      }\n      if (!changed)\n        return tree;\n      return new FormalParameterList(tree.location, parameters);\n    }}, {}, ParameterTransformer);\n  return {get DefaultParametersTransformer() {\n      return DefaultParametersTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ExponentiationTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ExponentiationTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ExponentiationTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"Math.pow(\", \", \", \")\"], {raw: {value: Object.freeze([\"Math.pow(\", \", \", \")\"])}}));\n  var ExplodeExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\").ExplodeExpressionTransformer;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      STAR_STAR = $__3.STAR_STAR,\n      STAR_STAR_EQUAL = $__3.STAR_STAR_EQUAL;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  var ExponentiationTransformer = function ExponentiationTransformer() {\n    $traceurRuntime.superConstructor($ExponentiationTransformer).apply(this, arguments);\n  };\n  var $ExponentiationTransformer = ExponentiationTransformer;\n  ($traceurRuntime.createClass)(ExponentiationTransformer, {transformBinaryExpression: function(tree) {\n      switch (tree.operator.type) {\n        case STAR_STAR:\n          var left = this.transformAny(tree.left);\n          var right = this.transformAny(tree.right);\n          return parseExpression($__0, left, right);\n        case STAR_STAR_EQUAL:\n          var exploded = new ExplodeExpressionTransformer(this).transformAny(tree);\n          return this.transformAny(exploded);\n      }\n      return $traceurRuntime.superGet(this, $ExponentiationTransformer.prototype, \"transformBinaryExpression\").call(this, tree);\n    }}, {}, TempVarTransformer);\n  return {get ExponentiationTransformer() {\n      return ExponentiationTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ForOfTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ForOfTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ForOfTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"\", \" = \", \".value;\"], {raw: {value: Object.freeze([\"\", \" = \", \".value;\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"\\n        for (var \", \" =\\n                 \", \"[\\n                     $traceurRuntime.toProperty(Symbol.iterator)](),\\n                 \", \";\\n             !(\", \" = \", \".next()).done; ) {\\n          \", \";\\n          \", \";\\n        }\"], {raw: {value: Object.freeze([\"\\n        for (var \", \" =\\n                 \", \"[\\n                     $traceurRuntime.toProperty(Symbol.iterator)](),\\n                 \", \";\\n             !(\", \" = \", \".next()).done; ) {\\n          \", \";\\n          \", \";\\n        }\"])}}));\n  var VARIABLE_DECLARATION_LIST = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\").VARIABLE_DECLARATION_LIST;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      id = $__4.createIdentifierExpression,\n      createMemberExpression = $__4.createMemberExpression,\n      createVariableStatement = $__4.createVariableStatement;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var ForOfTransformer = function ForOfTransformer() {\n    $traceurRuntime.superConstructor($ForOfTransformer).apply(this, arguments);\n  };\n  var $ForOfTransformer = ForOfTransformer;\n  ($traceurRuntime.createClass)(ForOfTransformer, {transformForOfStatement: function(original) {\n      var tree = $traceurRuntime.superGet(this, $ForOfTransformer.prototype, \"transformForOfStatement\").call(this, original);\n      var iter = id(this.getTempIdentifier());\n      var result = id(this.getTempIdentifier());\n      var assignment;\n      if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {\n        assignment = createVariableStatement(tree.initializer.declarationType, tree.initializer.declarations[0].lvalue, createMemberExpression(result, 'value'));\n      } else {\n        assignment = parseStatement($__0, tree.initializer, result);\n      }\n      return parseStatement($__1, iter, tree.collection, result, result, iter, assignment, tree.body);\n    }}, {}, TempVarTransformer);\n  return {get ForOfTransformer() {\n      return ForOfTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/GeneratorComprehensionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/GeneratorComprehensionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/GeneratorComprehensionTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"yield \", \"\"], {raw: {value: Object.freeze([\"yield \", \"\"])}}));\n  var ComprehensionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ComprehensionTransformer\").ComprehensionTransformer;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var GeneratorComprehensionTransformer = function GeneratorComprehensionTransformer() {\n    $traceurRuntime.superConstructor($GeneratorComprehensionTransformer).apply(this, arguments);\n  };\n  var $GeneratorComprehensionTransformer = GeneratorComprehensionTransformer;\n  ($traceurRuntime.createClass)(GeneratorComprehensionTransformer, {transformGeneratorComprehension: function(tree) {\n      var expression = this.transformAny(tree.expression);\n      var statement = parseStatement($__0, expression);\n      var isGenerator = true;\n      return this.transformComprehension(tree, statement, isGenerator);\n    }}, {}, ComprehensionTransformer);\n  return {get GeneratorComprehensionTransformer() {\n      return GeneratorComprehensionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/State\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/State\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/State\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.finallyFallThrough = \", \"\"], {raw: {value: Object.freeze([\"$ctx.finallyFallThrough = \", \"\"])}}));\n  var $__1 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignStateStatement = $__1.createAssignStateStatement,\n      createBreakStatement = $__1.createBreakStatement,\n      createCaseClause = $__1.createCaseClause,\n      createNumberLiteral = $__1.createNumberLiteral;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var State = function State(id) {\n    this.id = id;\n  };\n  ($traceurRuntime.createClass)(State, {\n    transformMachineState: function(enclosingFinally, machineEndState, reporter) {\n      return createCaseClause(createNumberLiteral(this.id), this.transform(enclosingFinally, machineEndState, reporter));\n    },\n    transformBreak: function(labelSet, breakState) {\n      return this;\n    },\n    transformBreakOrContinue: function(labelSet) {\n      var breakState = arguments[1];\n      var continueState = arguments[2];\n      return this;\n    }\n  }, {});\n  State.START_STATE = 0;\n  State.INVALID_STATE = -1;\n  State.END_STATE = -2;\n  State.RETHROW_STATE = -3;\n  State.generateJump = function(enclosingFinally, fallThroughState) {\n    return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, fallThroughState), [createBreakStatement()]);\n  };\n  State.generateAssignState = function(enclosingFinally, fallThroughState) {\n    var assignState;\n    if (State.isFinallyExit(enclosingFinally, fallThroughState)) {\n      assignState = generateAssignStateOutOfFinally(enclosingFinally, fallThroughState);\n    } else {\n      assignState = [createAssignStateStatement(fallThroughState)];\n    }\n    return assignState;\n  };\n  State.isFinallyExit = function(enclosingFinally, destination) {\n    return enclosingFinally != null && enclosingFinally.tryStates.indexOf(destination) < 0;\n  };\n  function generateAssignStateOutOfFinally(enclosingFinally, destination) {\n    var finallyState = enclosingFinally.finallyState;\n    return [createAssignStateStatement(finallyState), parseStatement($__0, destination)];\n  }\n  State.replaceStateList = function(oldStates, oldState, newState) {\n    var states = [];\n    for (var i = 0; i < oldStates.length; i++) {\n      states.push(State.replaceStateId(oldStates[i], oldState, newState));\n    }\n    return states;\n  };\n  State.replaceStateId = function(current, oldState, newState) {\n    return current == oldState ? newState : current;\n  };\n  State.replaceAllStates = function(exceptionBlocks, oldState, newState) {\n    var result = [];\n    for (var i = 0; i < exceptionBlocks.length; i++) {\n      result.push(exceptionBlocks[i].replaceState(oldState, newState));\n    }\n    return result;\n  };\n  return {get State() {\n      return State;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/TryState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/TryState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/TryState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var Kind = {\n    CATCH: 'catch',\n    FINALLY: 'finally'\n  };\n  var TryState = function TryState(kind, tryStates, nestedTrys) {\n    this.kind = kind;\n    this.tryStates = tryStates;\n    this.nestedTrys = nestedTrys;\n  };\n  ($traceurRuntime.createClass)(TryState, {\n    replaceAllStates: function(oldState, newState) {\n      return State.replaceStateList(this.tryStates, oldState, newState);\n    },\n    replaceNestedTrys: function(oldState, newState) {\n      var states = [];\n      for (var i = 0; i < this.nestedTrys.length; i++) {\n        states.push(this.nestedTrys[i].replaceState(oldState, newState));\n      }\n      return states;\n    }\n  }, {});\n  TryState.Kind = Kind;\n  return {get TryState() {\n      return TryState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/syntax/trees/StateMachine\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/trees/StateMachine\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/trees/StateMachine\", path);\n  }\n  var ParseTree = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTree\").ParseTree;\n  var STATE_MACHINE = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\").STATE_MACHINE;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var TryState = System.get(\"traceur@0.0.74/src/codegeneration/generator/TryState\").TryState;\n  function addCatchOrFinallyStates(kind, enclosingMap, tryStates) {\n    for (var i = 0; i < tryStates.length; i++) {\n      var tryState = tryStates[i];\n      if (tryState.kind == kind) {\n        for (var j = 0; j < tryState.tryStates.length; j++) {\n          var id = tryState.tryStates[j];\n          enclosingMap[id] = tryState;\n        }\n      }\n      addCatchOrFinallyStates(kind, enclosingMap, tryState.nestedTrys);\n    }\n  }\n  function addAllCatchStates(tryStates, catches) {\n    for (var i = 0; i < tryStates.length; i++) {\n      var tryState = tryStates[i];\n      if (tryState.kind == TryState.Kind.CATCH) {\n        catches.push(tryState);\n      }\n      addAllCatchStates(tryState.nestedTrys, catches);\n    }\n  }\n  var StateMachine = function StateMachine(startState, fallThroughState, states, exceptionBlocks) {\n    this.location = null;\n    this.startState = startState;\n    this.fallThroughState = fallThroughState;\n    this.states = states;\n    this.exceptionBlocks = exceptionBlocks;\n  };\n  var $StateMachine = StateMachine;\n  ($traceurRuntime.createClass)(StateMachine, {\n    get type() {\n      return STATE_MACHINE;\n    },\n    transform: function(transformer) {\n      return transformer.transformStateMachine(this);\n    },\n    visit: function(visitor) {\n      visitor.visitStateMachine(this);\n    },\n    getAllStateIDs: function() {\n      var result = [];\n      for (var i = 0; i < this.states.length; i++) {\n        result.push(this.states[i].id);\n      }\n      return result;\n    },\n    getEnclosingFinallyMap: function() {\n      var enclosingMap = Object.create(null);\n      addCatchOrFinallyStates(TryState.Kind.FINALLY, enclosingMap, this.exceptionBlocks);\n      return enclosingMap;\n    },\n    allCatchStates: function() {\n      var catches = [];\n      addAllCatchStates(this.exceptionBlocks, catches);\n      return catches;\n    },\n    replaceStateId: function(oldState, newState) {\n      return new $StateMachine(State.replaceStateId(this.startState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), State.replaceAllStates(this.states, oldState, newState), State.replaceAllStates(this.exceptionBlocks, oldState, newState));\n    },\n    replaceStartState: function(newState) {\n      return this.replaceStateId(this.startState, newState);\n    },\n    replaceFallThroughState: function(newState) {\n      return this.replaceStateId(this.fallThroughState, newState);\n    },\n    append: function(nextMachine) {\n      var states = $traceurRuntime.spread(this.states);\n      for (var i = 0; i < nextMachine.states.length; i++) {\n        var otherState = nextMachine.states[i];\n        states.push(otherState.replaceState(nextMachine.startState, this.fallThroughState));\n      }\n      var exceptionBlocks = $traceurRuntime.spread(this.exceptionBlocks);\n      for (var i = 0; i < nextMachine.exceptionBlocks.length; i++) {\n        var tryState = nextMachine.exceptionBlocks[i];\n        exceptionBlocks.push(tryState.replaceState(nextMachine.startState, this.fallThroughState));\n      }\n      return new $StateMachine(this.startState, nextMachine.fallThroughState, states, exceptionBlocks);\n    }\n  }, {}, ParseTree);\n  return {get StateMachine() {\n      return StateMachine;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/AwaitState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/AwaitState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/AwaitState\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.finallyFallThrough = \", \"\"], {raw: {value: Object.freeze([\"$ctx.finallyFallThrough = \", \"\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"Promise.resolve(\", \").then(\\n          $ctx.createCallback(\", \"), $ctx.errback);\\n          return;\"], {raw: {value: Object.freeze([\"Promise.resolve(\", \").then(\\n          $ctx.createCallback(\", \"), $ctx.errback);\\n          return;\"])}}));\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var parseStatements = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatements;\n  var AwaitState = function AwaitState(id, callbackState, expression) {\n    $traceurRuntime.superConstructor($AwaitState).call(this, id), this.callbackState = callbackState;\n    this.expression = expression;\n  };\n  var $AwaitState = AwaitState;\n  ($traceurRuntime.createClass)(AwaitState, {\n    replaceState: function(oldState, newState) {\n      return new $AwaitState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.callbackState, oldState, newState), this.expression);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      var $__5;\n      var stateId,\n          statements;\n      if (State.isFinallyExit(enclosingFinally, this.callbackState)) {\n        stateId = enclosingFinally.finallyState;\n        statements = parseStatements($__0, this.callbackState);\n      } else {\n        stateId = this.callbackState;\n        statements = [];\n      }\n      ($__5 = statements).push.apply($__5, $traceurRuntime.spread(parseStatements($__1, this.expression, stateId)));\n      return statements;\n    }\n  }, {}, State);\n  return {get AwaitState() {\n      return AwaitState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/HoistVariablesTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/HoistVariablesTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/HoistVariablesTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__0.AnonBlock,\n      Catch = $__0.Catch,\n      FunctionBody = $__0.FunctionBody,\n      ForInStatement = $__0.ForInStatement,\n      ForOfStatement = $__0.ForOfStatement,\n      ForStatement = $__0.ForStatement,\n      VariableDeclarationList = $__0.VariableDeclarationList,\n      VariableStatement = $__0.VariableStatement;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      OBJECT_PATTERN = $__1.OBJECT_PATTERN,\n      VARIABLE_DECLARATION_LIST = $__1.VARIABLE_DECLARATION_LIST;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignmentExpression = $__4.createAssignmentExpression,\n      createCommaExpression = $__4.createCommaExpression,\n      createExpressionStatement = $__4.createExpressionStatement,\n      id = $__4.createIdentifierExpression,\n      createParenExpression = $__4.createParenExpression,\n      createVariableDeclaration = $__4.createVariableDeclaration;\n  var prependStatements = System.get(\"traceur@0.0.74/src/codegeneration/PrependStatements\").prependStatements;\n  var HoistVariablesTransformer = function HoistVariablesTransformer() {\n    var shouldHoistFunctions = arguments[0] !== (void 0) ? arguments[0] : false;\n    $traceurRuntime.superConstructor($HoistVariablesTransformer).call(this);\n    this.hoistedFunctions_ = [];\n    this.hoistedVariables_ = Object.create(null);\n    this.keepBindingIdentifiers_ = false;\n    this.inBlockOrFor_ = false;\n    this.shouldHoistFunctions_ = shouldHoistFunctions;\n  };\n  var $HoistVariablesTransformer = HoistVariablesTransformer;\n  ($traceurRuntime.createClass)(HoistVariablesTransformer, {\n    transformFunctionBody: function(tree) {\n      var statements = this.transformList(tree.statements);\n      if (statements === tree.statements)\n        return tree;\n      statements = this.prependVariables(statements);\n      statements = this.prependFunctions(statements);\n      return new FunctionBody(tree.location, statements);\n    },\n    addVariable: function(name) {\n      this.hoistedVariables_[name] = true;\n    },\n    addFunctionDeclaration: function(tree) {\n      this.hoistedFunctions_.push(tree);\n    },\n    hasVariables: function() {\n      for (var key in this.hoistedVariables_) {\n        return true;\n      }\n      return false;\n    },\n    hasFunctions: function() {\n      return this.hoistedFunctions_.length > 0;\n    },\n    getVariableNames: function() {\n      return Object.keys(this.hoistedVariables_);\n    },\n    getVariableStatement: function() {\n      if (!this.hasVariables())\n        return new AnonBlock(null, []);\n      var declarations = this.getVariableNames().map((function(name) {\n        return createVariableDeclaration(name, null);\n      }));\n      return new VariableStatement(null, new VariableDeclarationList(null, VAR, declarations));\n    },\n    getFunctions: function() {\n      return this.hoistedFunctions_;\n    },\n    prependVariables: function(statements) {\n      if (!this.hasVariables())\n        return statements;\n      return prependStatements(statements, this.getVariableStatement());\n    },\n    prependFunctions: function(statements) {\n      if (!this.hasFunctions())\n        return statements;\n      return prependStatements(statements, this.getFunctionDeclarations());\n    },\n    transformVariableStatement: function(tree) {\n      var declarations = this.transformAny(tree.declarations);\n      if (declarations == tree.declarations)\n        return tree;\n      if (declarations === null)\n        return new AnonBlock(null, []);\n      if (declarations.type === VARIABLE_DECLARATION_LIST)\n        return new VariableStatement(tree.location, declarations);\n      return createExpressionStatement(declarations);\n    },\n    transformVariableDeclaration: function(tree) {\n      var lvalue = this.transformAny(tree.lvalue);\n      var initializer = this.transformAny(tree.initializer);\n      if (initializer) {\n        var expression = createAssignmentExpression(lvalue, initializer);\n        if (lvalue.type === OBJECT_PATTERN)\n          expression = createParenExpression(expression);\n        return expression;\n      }\n      return null;\n    },\n    transformObjectPattern: function(tree) {\n      var keepBindingIdentifiers = this.keepBindingIdentifiers_;\n      this.keepBindingIdentifiers_ = true;\n      var transformed = $traceurRuntime.superGet(this, $HoistVariablesTransformer.prototype, \"transformObjectPattern\").call(this, tree);\n      this.keepBindingIdentifiers_ = keepBindingIdentifiers;\n      return transformed;\n    },\n    transformArrayPattern: function(tree) {\n      var keepBindingIdentifiers = this.keepBindingIdentifiers_;\n      this.keepBindingIdentifiers_ = true;\n      var transformed = $traceurRuntime.superGet(this, $HoistVariablesTransformer.prototype, \"transformArrayPattern\").call(this, tree);\n      this.keepBindingIdentifiers_ = keepBindingIdentifiers;\n      return transformed;\n    },\n    transformBindingIdentifier: function(tree) {\n      var idToken = tree.identifierToken;\n      this.addVariable(idToken.value);\n      if (this.keepBindingIdentifiers_)\n        return tree;\n      return id(idToken);\n    },\n    transformVariableDeclarationList: function(tree) {\n      if (tree.declarationType === VAR || !this.inBlockOrFor_) {\n        var expressions = this.transformList(tree.declarations);\n        expressions = expressions.filter((function(tree) {\n          return tree;\n        }));\n        if (expressions.length === 0)\n          return null;\n        if (expressions.length == 1)\n          return expressions[0];\n        return createCommaExpression(expressions);\n      }\n      return tree;\n    },\n    transformCatch: function(tree) {\n      var catchBody = this.transformAny(tree.catchBody);\n      if (catchBody === tree.catchBody)\n        return tree;\n      return new Catch(tree.location, tree.binding, catchBody);\n    },\n    transformForInStatement: function(tree) {\n      return this.transformLoop_(tree, ForInStatement);\n    },\n    transformForOfStatement: function(tree) {\n      return this.transformLoop_(tree, ForOfStatement);\n    },\n    transformLoop_: function(tree, ctor) {\n      var initializer = this.transformLoopIninitaliser_(tree.initializer);\n      var collection = this.transformAny(tree.collection);\n      var body = this.transformAny(tree.body);\n      if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {\n        return tree;\n      }\n      return new ctor(tree.location, initializer, collection, body);\n    },\n    transformLoopIninitaliser_: function(tree) {\n      if (tree.type !== VARIABLE_DECLARATION_LIST || tree.declarationType !== VAR)\n        return tree;\n      return this.transformAny(tree.declarations[0].lvalue);\n    },\n    transformForStatement: function(tree) {\n      var inBlockOrFor = this.inBlockOrFor_;\n      this.inBlockOrFor_ = true;\n      var initializer = this.transformAny(tree.initializer);\n      this.inBlockOrFor_ = inBlockOrFor;\n      var condition = this.transformAny(tree.condition);\n      var increment = this.transformAny(tree.increment);\n      var body = this.transformAny(tree.body);\n      if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {\n        return tree;\n      }\n      return new ForStatement(tree.location, initializer, condition, increment, body);\n    },\n    transformBlock: function(tree) {\n      var inBlockOrFor = this.inBlockOrFor_;\n      this.inBlockOrFor_ = true;\n      tree = $traceurRuntime.superGet(this, $HoistVariablesTransformer.prototype, \"transformBlock\").call(this, tree);\n      this.inBlockOrFor_ = inBlockOrFor;\n      return tree;\n    },\n    addMachineVariable: function(name) {\n      this.machineVariables_[name] = true;\n    },\n    transformClassDeclaration: function(tree) {\n      return tree;\n    },\n    transformClassExpression: function(tree) {\n      return tree;\n    },\n    transformFunctionDeclaration: function(tree) {\n      if (this.shouldHoistFunctions_) {\n        this.addFunctionDeclaration(tree);\n        return new AnonBlock(null, []);\n      }\n      return tree;\n    },\n    transformFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformGetAccessor: function(tree) {\n      return tree;\n    },\n    transformSetAccessor: function(tree) {\n      return tree;\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      return tree;\n    },\n    transformArrowFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformComprehensionFor: function(tree) {\n      return tree;\n    }\n  }, {}, ParseTreeTransformer);\n  var $__default = HoistVariablesTransformer;\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/FallThroughState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var FallThroughState = function FallThroughState(id, fallThroughState, statements) {\n    $traceurRuntime.superConstructor($FallThroughState).call(this, id);\n    this.fallThroughState = fallThroughState;\n    this.statements = statements;\n  };\n  var $FallThroughState = FallThroughState;\n  ($traceurRuntime.createClass)(FallThroughState, {\n    replaceState: function(oldState, newState) {\n      return new $FallThroughState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.statements);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      return $traceurRuntime.spread(this.statements, State.generateJump(enclosingFinally, this.fallThroughState));\n    }\n  }, {}, State);\n  return {get FallThroughState() {\n      return FallThroughState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/BreakState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/BreakState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/BreakState\", path);\n  }\n  var FallThroughState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\").FallThroughState;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var BreakState = function BreakState(id, label) {\n    $traceurRuntime.superConstructor($BreakState).call(this, id);\n    this.label = label;\n  };\n  var $BreakState = BreakState;\n  ($traceurRuntime.createClass)(BreakState, {\n    replaceState: function(oldState, newState) {\n      return new $BreakState(State.replaceStateId(this.id, oldState, newState), this.label);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      throw new Error('These should be removed before the transform step');\n    },\n    transformBreak: function(labelSet) {\n      var breakState = arguments[1];\n      if (this.label == null)\n        return new FallThroughState(this.id, breakState, []);\n      if (this.label in labelSet) {\n        return new FallThroughState(this.id, labelSet[this.label].fallThroughState, []);\n      }\n      return this;\n    },\n    transformBreakOrContinue: function(labelSet) {\n      var breakState = arguments[1];\n      var continueState = arguments[2];\n      return this.transformBreak(labelSet, breakState);\n    }\n  }, {}, State);\n  return {get BreakState() {\n      return BreakState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/ContinueState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/ContinueState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/ContinueState\", path);\n  }\n  var FallThroughState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\").FallThroughState;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var ContinueState = function ContinueState(id, label) {\n    $traceurRuntime.superConstructor($ContinueState).call(this, id);\n    this.label = label;\n  };\n  var $ContinueState = ContinueState;\n  ($traceurRuntime.createClass)(ContinueState, {\n    replaceState: function(oldState, newState) {\n      return new $ContinueState(State.replaceStateId(this.id, oldState, newState), this.label);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      throw new Error('These should be removed before the transform step');\n    },\n    transformBreakOrContinue: function(labelSet) {\n      var breakState = arguments[1];\n      var continueState = arguments[2];\n      if (this.label == null)\n        return new FallThroughState(this.id, continueState, []);\n      if (this.label in labelSet) {\n        return new FallThroughState(this.id, labelSet[this.label].continueState, []);\n      }\n      return this;\n    }\n  }, {}, State);\n  return {get ContinueState() {\n      return ContinueState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/BreakContinueTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/BreakContinueTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/BreakContinueTransformer\", path);\n  }\n  var BreakState = System.get(\"traceur@0.0.74/src/codegeneration/generator/BreakState\").BreakState;\n  var ContinueState = System.get(\"traceur@0.0.74/src/codegeneration/generator/ContinueState\").ContinueState;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var StateMachine = System.get(\"traceur@0.0.74/src/syntax/trees/StateMachine\").StateMachine;\n  function safeGetLabel(tree) {\n    return tree.name ? tree.name.value : null;\n  }\n  var BreakContinueTransformer = function BreakContinueTransformer(stateAllocator) {\n    $traceurRuntime.superConstructor($BreakContinueTransformer).call(this);\n    this.transformBreaks_ = true;\n    this.stateAllocator_ = stateAllocator;\n  };\n  var $BreakContinueTransformer = BreakContinueTransformer;\n  ($traceurRuntime.createClass)(BreakContinueTransformer, {\n    allocateState_: function() {\n      return this.stateAllocator_.allocateState();\n    },\n    stateToStateMachine_: function(newState) {\n      var fallThroughState = this.allocateState_();\n      return new StateMachine(newState.id, fallThroughState, [newState], []);\n    },\n    transformBreakStatement: function(tree) {\n      return this.transformBreaks_ || tree.name ? this.stateToStateMachine_(new BreakState(this.allocateState_(), safeGetLabel(tree))) : tree;\n    },\n    transformContinueStatement: function(tree) {\n      return this.stateToStateMachine_(new ContinueState(this.allocateState_(), safeGetLabel(tree)));\n    },\n    transformDoWhileStatement: function(tree) {\n      return tree;\n    },\n    transformForOfStatement: function(tree) {\n      return tree;\n    },\n    transformForStatement: function(tree) {\n      return tree;\n    },\n    transformFunctionDeclaration: function(tree) {\n      return tree;\n    },\n    transformFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformStateMachine: function(tree) {\n      return tree;\n    },\n    transformSwitchStatement: function(tree) {\n      var oldState = this.transformBreaks_;\n      this.transformBreaks_ = false;\n      var result = $traceurRuntime.superGet(this, $BreakContinueTransformer.prototype, \"transformSwitchStatement\").call(this, tree);\n      this.transformBreaks_ = oldState;\n      return result;\n    },\n    transformWhileStatement: function(tree) {\n      return tree;\n    }\n  }, {}, ParseTreeTransformer);\n  return {get BreakContinueTransformer() {\n      return BreakContinueTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/CatchState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/CatchState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/CatchState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var TryState = System.get(\"traceur@0.0.74/src/codegeneration/generator/TryState\").TryState;\n  var CatchState = function CatchState(identifier, catchState, fallThroughState, allStates, nestedTrys) {\n    $traceurRuntime.superConstructor($CatchState).call(this, TryState.Kind.CATCH, allStates, nestedTrys);\n    this.identifier = identifier;\n    this.catchState = catchState;\n    this.fallThroughState = fallThroughState;\n  };\n  var $CatchState = CatchState;\n  ($traceurRuntime.createClass)(CatchState, {replaceState: function(oldState, newState) {\n      return new $CatchState(this.identifier, State.replaceStateId(this.catchState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState));\n    }}, {}, TryState);\n  return {get CatchState() {\n      return CatchState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/ConditionalState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/ConditionalState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/ConditionalState\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.state = (\", \") ? \", \" : \", \";\\n        break\"], {raw: {value: Object.freeze([\"$ctx.state = (\", \") ? \", \" : \", \";\\n        break\"])}}));\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var $__2 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createBlock = $__2.createBlock,\n      createIfStatement = $__2.createIfStatement;\n  var parseStatements = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatements;\n  var ConditionalState = function ConditionalState(id, ifState, elseState, condition) {\n    $traceurRuntime.superConstructor($ConditionalState).call(this, id);\n    this.ifState = ifState;\n    this.elseState = elseState;\n    this.condition = condition;\n  };\n  var $ConditionalState = ConditionalState;\n  ($traceurRuntime.createClass)(ConditionalState, {\n    replaceState: function(oldState, newState) {\n      return new $ConditionalState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.ifState, oldState, newState), State.replaceStateId(this.elseState, oldState, newState), this.condition);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      if (State.isFinallyExit(enclosingFinally, this.ifState) || State.isFinallyExit(enclosingFinally, this.elseState)) {\n        return [createIfStatement(this.condition, createBlock(State.generateJump(enclosingFinally, this.ifState)), createBlock(State.generateJump(enclosingFinally, this.elseState)))];\n      }\n      return parseStatements($__0, this.condition, this.ifState, this.elseState);\n    }\n  }, {}, State);\n  return {get ConditionalState() {\n      return ConditionalState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/FinallyFallThroughState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/FinallyFallThroughState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/FinallyFallThroughState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var FinallyFallThroughState = function FinallyFallThroughState() {\n    $traceurRuntime.superConstructor($FinallyFallThroughState).apply(this, arguments);\n  };\n  var $FinallyFallThroughState = FinallyFallThroughState;\n  ($traceurRuntime.createClass)(FinallyFallThroughState, {\n    replaceState: function(oldState, newState) {\n      return new $FinallyFallThroughState(State.replaceStateId(this.id, oldState, newState));\n    },\n    transformMachineState: function(enclosingFinally, machineEndState, reporter) {\n      return null;\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      throw new Error('these are generated in addFinallyFallThroughDispatches');\n    }\n  }, {}, State);\n  return {get FinallyFallThroughState() {\n      return FinallyFallThroughState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/FinallyState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/FinallyState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/FinallyState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var TryState = System.get(\"traceur@0.0.74/src/codegeneration/generator/TryState\").TryState;\n  var FinallyState = function FinallyState(finallyState, fallThroughState, allStates, nestedTrys) {\n    $traceurRuntime.superConstructor($FinallyState).call(this, TryState.Kind.FINALLY, allStates, nestedTrys);\n    this.finallyState = finallyState;\n    this.fallThroughState = fallThroughState;\n  };\n  var $FinallyState = FinallyState;\n  ($traceurRuntime.createClass)(FinallyState, {replaceState: function(oldState, newState) {\n      return new $FinallyState(State.replaceStateId(this.finallyState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState));\n    }}, {}, TryState);\n  return {get FinallyState() {\n      return FinallyState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/StateAllocator\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/StateAllocator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/StateAllocator\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var StateAllocator = function StateAllocator() {\n    this.nextState_ = State.START_STATE + 1;\n  };\n  ($traceurRuntime.createClass)(StateAllocator, {allocateState: function() {\n      return this.nextState_++;\n    }}, {});\n  return {get StateAllocator() {\n      return StateAllocator;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/SwitchState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/SwitchState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/SwitchState\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      CaseClause = $__0.CaseClause,\n      DefaultClause = $__0.DefaultClause,\n      SwitchStatement = $__0.SwitchStatement;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var createBreakStatement = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createBreakStatement;\n  var SwitchClause = function SwitchClause(first, second) {\n    this.first = first;\n    this.second = second;\n  };\n  ($traceurRuntime.createClass)(SwitchClause, {}, {});\n  var SwitchState = function SwitchState(id, expression, clauses) {\n    $traceurRuntime.superConstructor($SwitchState).call(this, id);\n    this.expression = expression;\n    this.clauses = clauses;\n  };\n  var $SwitchState = SwitchState;\n  ($traceurRuntime.createClass)(SwitchState, {\n    replaceState: function(oldState, newState) {\n      var clauses = this.clauses.map((function(clause) {\n        return new SwitchClause(clause.first, State.replaceStateId(clause.second, oldState, newState));\n      }));\n      return new $SwitchState(State.replaceStateId(this.id, oldState, newState), this.expression, clauses);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      var clauses = [];\n      for (var i = 0; i < this.clauses.length; i++) {\n        var clause = this.clauses[i];\n        if (clause.first == null) {\n          clauses.push(new DefaultClause(null, State.generateJump(enclosingFinally, clause.second)));\n        } else {\n          clauses.push(new CaseClause(null, clause.first, State.generateJump(enclosingFinally, clause.second)));\n        }\n      }\n      return [new SwitchStatement(null, this.expression, clauses), createBreakStatement()];\n    }\n  }, {}, State);\n  return {\n    get SwitchClause() {\n      return SwitchClause;\n    },\n    get SwitchState() {\n      return SwitchState;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/CPSTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/CPSTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/CPSTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.pushTry(\\n            \", \",\\n            \", \");\"], {raw: {value: Object.freeze([\"$ctx.pushTry(\\n            \", \",\\n            \", \");\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"$ctx.popTry();\"], {raw: {value: Object.freeze([\"$ctx.popTry();\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"\\n              $ctx.popTry();\\n              \", \" = $ctx.storedException;\"], {raw: {value: Object.freeze([\"\\n              $ctx.popTry();\\n              \", \" = $ctx.storedException;\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$ctx.popTry();\"], {raw: {value: Object.freeze([\"$ctx.popTry();\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"function($ctx) {\\n      while (true) \", \"\\n    }\"], {raw: {value: Object.freeze([\"function($ctx) {\\n      while (true) \", \"\\n    }\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"var $arguments = arguments;\"], {raw: {value: Object.freeze([\"var $arguments = arguments;\"])}})),\n      $__6 = Object.freeze(Object.defineProperties([\"return \", \"(\\n              \", \",\\n              \", \", this);\"], {raw: {value: Object.freeze([\"return \", \"(\\n              \", \",\\n              \", \", this);\"])}})),\n      $__7 = Object.freeze(Object.defineProperties([\"return \", \"(\\n              \", \", this);\"], {raw: {value: Object.freeze([\"return \", \"(\\n              \", \", this);\"])}})),\n      $__8 = Object.freeze(Object.defineProperties([\"return $ctx.end()\"], {raw: {value: Object.freeze([\"return $ctx.end()\"])}})),\n      $__9 = Object.freeze(Object.defineProperties([\"\\n                  $ctx.state = $ctx.finallyFallThrough;\\n                  $ctx.finallyFallThrough = \", \";\\n                  break;\"], {raw: {value: Object.freeze([\"\\n                  $ctx.state = $ctx.finallyFallThrough;\\n                  $ctx.finallyFallThrough = \", \";\\n                  break;\"])}})),\n      $__10 = Object.freeze(Object.defineProperties([\"\\n                      $ctx.state = $ctx.finallyFallThrough;\\n                      break;\"], {raw: {value: Object.freeze([\"\\n                      $ctx.state = $ctx.finallyFallThrough;\\n                      break;\"])}}));\n  var AlphaRenamer = System.get(\"traceur@0.0.74/src/codegeneration/AlphaRenamer\").AlphaRenamer;\n  var BreakContinueTransformer = System.get(\"traceur@0.0.74/src/codegeneration/generator/BreakContinueTransformer\").BreakContinueTransformer;\n  var $__13 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BLOCK = $__13.BLOCK,\n      CASE_CLAUSE = $__13.CASE_CLAUSE,\n      CONDITIONAL_EXPRESSION = $__13.CONDITIONAL_EXPRESSION,\n      EXPRESSION_STATEMENT = $__13.EXPRESSION_STATEMENT,\n      PAREN_EXPRESSION = $__13.PAREN_EXPRESSION,\n      STATE_MACHINE = $__13.STATE_MACHINE;\n  var $__14 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__14.AnonBlock,\n      Block = $__14.Block,\n      CaseClause = $__14.CaseClause,\n      IfStatement = $__14.IfStatement,\n      SwitchStatement = $__14.SwitchStatement;\n  var CatchState = System.get(\"traceur@0.0.74/src/codegeneration/generator/CatchState\").CatchState;\n  var ConditionalState = System.get(\"traceur@0.0.74/src/codegeneration/generator/ConditionalState\").ConditionalState;\n  var ExplodeExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\").ExplodeExpressionTransformer;\n  var FallThroughState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\").FallThroughState;\n  var FinallyFallThroughState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FinallyFallThroughState\").FinallyFallThroughState;\n  var FinallyState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FinallyState\").FinallyState;\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var $__25 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__25.parseExpression,\n      parseStatement = $__25.parseStatement,\n      parseStatements = $__25.parseStatements;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var StateAllocator = System.get(\"traceur@0.0.74/src/codegeneration/generator/StateAllocator\").StateAllocator;\n  var StateMachine = System.get(\"traceur@0.0.74/src/syntax/trees/StateMachine\").StateMachine;\n  var $__29 = System.get(\"traceur@0.0.74/src/codegeneration/generator/SwitchState\"),\n      SwitchClause = $__29.SwitchClause,\n      SwitchState = $__29.SwitchState;\n  var TryState = System.get(\"traceur@0.0.74/src/codegeneration/generator/TryState\").TryState;\n  var $__31 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignStateStatement = $__31.createAssignStateStatement,\n      createBreakStatement = $__31.createBreakStatement,\n      createCaseClause = $__31.createCaseClause,\n      createDefaultClause = $__31.createDefaultClause,\n      createExpressionStatement = $__31.createExpressionStatement,\n      createFunctionBody = $__31.createFunctionBody,\n      id = $__31.createIdentifierExpression,\n      createMemberExpression = $__31.createMemberExpression,\n      createNumberLiteral = $__31.createNumberLiteral,\n      createSwitchStatement = $__31.createSwitchStatement;\n  var HoistVariablesTransformer = System.get(\"traceur@0.0.74/src/codegeneration/HoistVariablesTransformer\").default;\n  var LabelState = function LabelState(name, continueState, fallThroughState) {\n    this.name = name;\n    this.continueState = continueState;\n    this.fallThroughState = fallThroughState;\n  };\n  ($traceurRuntime.createClass)(LabelState, {}, {});\n  var NeedsStateMachine = function NeedsStateMachine() {\n    $traceurRuntime.superConstructor($NeedsStateMachine).apply(this, arguments);\n  };\n  var $NeedsStateMachine = NeedsStateMachine;\n  ($traceurRuntime.createClass)(NeedsStateMachine, {\n    visitBreakStatement: function(tree) {\n      this.found = true;\n    },\n    visitContinueStatement: function(tree) {\n      this.found = true;\n    },\n    visitStateMachine: function(tree) {\n      this.found = true;\n    },\n    visitYieldExpression: function(tee) {\n      this.found = true;\n    }\n  }, {}, FindInFunctionScope);\n  function needsStateMachine(tree) {\n    var visitor = new NeedsStateMachine(tree);\n    return visitor.found;\n  }\n  var HoistVariables = function HoistVariables() {\n    $traceurRuntime.superConstructor($HoistVariables).call(this, true);\n  };\n  var $HoistVariables = HoistVariables;\n  ($traceurRuntime.createClass)(HoistVariables, {\n    prependVariables: function(statements) {\n      return statements;\n    },\n    prependFunctions: function(statements) {\n      return statements;\n    }\n  }, {}, HoistVariablesTransformer);\n  var CPSTransformer = function CPSTransformer(identifierGenerator, reporter) {\n    $traceurRuntime.superConstructor($CPSTransformer).call(this, identifierGenerator);\n    this.reporter = reporter;\n    this.stateAllocator_ = new StateAllocator();\n    this.labelSet_ = Object.create(null);\n    this.currentLabel_ = null;\n    this.hoistVariablesTransformer_ = new HoistVariables();\n  };\n  var $CPSTransformer = CPSTransformer;\n  ($traceurRuntime.createClass)(CPSTransformer, {\n    expressionNeedsStateMachine: function(tree) {\n      return false;\n    },\n    allocateState: function() {\n      return this.stateAllocator_.allocateState();\n    },\n    transformBlock: function(tree) {\n      var labels = this.getLabels_();\n      var label = this.clearCurrentLabel_();\n      var transformedTree = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformBlock\").call(this, tree);\n      var machine = this.transformStatementList_(transformedTree.statements);\n      if (machine === null)\n        return transformedTree;\n      if (label) {\n        var states = [];\n        for (var i = 0; i < machine.states.length; i++) {\n          var state = machine.states[i];\n          states.push(state.transformBreakOrContinue(labels));\n        }\n        machine = new StateMachine(machine.startState, machine.fallThroughState, states, machine.exceptionBlocks);\n      }\n      return machine;\n    },\n    transformFunctionBody: function(tree) {\n      this.pushTempScope();\n      var oldLabels = this.clearLabels_();\n      var transformedTree = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformFunctionBody\").call(this, tree);\n      var machine = this.transformStatementList_(transformedTree.statements);\n      this.restoreLabels_(oldLabels);\n      this.popTempScope();\n      return machine == null ? transformedTree : machine;\n    },\n    transformStatementList_: function(trees) {\n      var groups = [];\n      var newMachine;\n      for (var i = 0; i < trees.length; i++) {\n        if (trees[i].type === STATE_MACHINE) {\n          groups.push(trees[i]);\n        } else if (needsStateMachine(trees[i])) {\n          newMachine = this.ensureTransformed_(trees[i]);\n          groups.push(newMachine);\n        } else {\n          var last = groups[groups.length - 1];\n          if (!(last instanceof Array))\n            groups.push(last = []);\n          last.push(trees[i]);\n        }\n      }\n      if (groups.length === 1 && groups[0] instanceof Array)\n        return null;\n      var machine = null;\n      for (var i = 0; i < groups.length; i++) {\n        if (groups[i] instanceof Array) {\n          newMachine = this.statementsToStateMachine_(groups[i]);\n        } else {\n          newMachine = groups[i];\n        }\n        if (i === 0)\n          machine = newMachine;\n        else\n          machine = machine.append(newMachine);\n      }\n      return machine;\n    },\n    needsStateMachine_: function(statements) {\n      if (statements instanceof Array) {\n        for (var i = 0; i < statements.length; i++) {\n          if (needsStateMachine(statements[i]))\n            return true;\n        }\n        return false;\n      }\n      assert(statements instanceof SwitchStatement);\n      return needsStateMachine(statements);\n    },\n    transformCaseClause: function(tree) {\n      var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformCaseClause\").call(this, tree);\n      var machine = this.transformStatementList_(result.statements);\n      return machine == null ? result : new CaseClause(null, result.expression, [machine]);\n    },\n    transformDoWhileStatement: function(tree) {\n      var $__37;\n      var $__35,\n          $__36;\n      var labels = this.getLabels_();\n      var label = this.clearCurrentLabel_();\n      var machine,\n          condition,\n          body;\n      if (this.expressionNeedsStateMachine(tree.condition)) {\n        (($__35 = this.expressionToStateMachine(tree.condition), machine = $__35.machine, condition = $__35.expression, $__35));\n        body = this.transformAny(tree.body);\n      } else {\n        var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformDoWhileStatement\").call(this, tree);\n        (($__36 = result, condition = $__36.condition, body = $__36.body, $__36));\n        if (body.type != STATE_MACHINE)\n          return result;\n      }\n      var loopBodyMachine = this.ensureTransformed_(body);\n      var startState = loopBodyMachine.startState;\n      var conditionState = loopBodyMachine.fallThroughState;\n      var fallThroughState = this.allocateState();\n      var states = [];\n      this.addLoopBodyStates_(loopBodyMachine, conditionState, fallThroughState, labels, states);\n      if (machine) {\n        machine = machine.replaceStartState(conditionState);\n        conditionState = machine.fallThroughState;\n        ($__37 = states).push.apply($__37, $traceurRuntime.spread(machine.states));\n      }\n      states.push(new ConditionalState(conditionState, startState, fallThroughState, condition));\n      var machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks);\n      if (label)\n        machine = machine.replaceStateId(conditionState, label.continueState);\n      return machine;\n    },\n    addLoopBodyStates_: function(loopBodyMachine, continueState, breakState, labels, states) {\n      for (var i = 0; i < loopBodyMachine.states.length; i++) {\n        var state = loopBodyMachine.states[i];\n        states.push(state.transformBreakOrContinue(labels, breakState, continueState));\n      }\n    },\n    transformForStatement: function(tree) {\n      var $__37,\n          $__38,\n          $__39;\n      var labels = this.getLabels_();\n      var label = this.clearCurrentLabel_();\n      var tmp;\n      var initializer = null,\n          initializerMachine;\n      if (tree.initializer) {\n        if (this.expressionNeedsStateMachine(tree.initializer)) {\n          tmp = this.expressionToStateMachine(tree.initializer);\n          initializer = tmp.expression;\n          initializerMachine = tmp.machine;\n        } else {\n          initializer = this.transformAny(tree.initializer);\n        }\n      }\n      var condition = null,\n          conditionMachine;\n      if (tree.condition) {\n        if (this.expressionNeedsStateMachine(tree.condition)) {\n          tmp = this.expressionToStateMachine(tree.condition);\n          condition = tmp.expression;\n          conditionMachine = tmp.machine;\n        } else {\n          condition = this.transformAny(tree.condition);\n        }\n      }\n      var increment = null,\n          incrementMachine;\n      if (tree.increment) {\n        if (this.expressionNeedsStateMachine(tree.increment)) {\n          tmp = this.expressionToStateMachine(tree.increment);\n          increment = tmp.expression;\n          incrementMachine = tmp.machine;\n        } else {\n          increment = this.transformAny(tree.increment);\n        }\n      }\n      var body = this.transformAny(tree.body);\n      if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {\n        return tree;\n      }\n      if (!initializerMachine && !conditionMachine && !incrementMachine && body.type !== STATE_MACHINE) {\n        return new ForStatement(tree.location, initializer, condition, increment, body);\n      }\n      var loopBodyMachine = this.ensureTransformed_(body);\n      var bodyFallThroughId = loopBodyMachine.fallThroughState;\n      var fallThroughId = this.allocateState();\n      var startId;\n      var initializerStartId = initializer ? this.allocateState() : State.INVALID_STATE;\n      var conditionStartId = increment ? this.allocateState() : bodyFallThroughId;\n      var loopStartId = loopBodyMachine.startState;\n      var incrementStartId = bodyFallThroughId;\n      var states = [];\n      if (initializer) {\n        startId = initializerStartId;\n        var initialiserFallThroughId;\n        if (condition)\n          initialiserFallThroughId = conditionStartId;\n        else\n          initialiserFallThroughId = loopStartId;\n        var tmpId = initializerStartId;\n        if (initializerMachine) {\n          initializerMachine = initializerMachine.replaceStartState(initializerStartId);\n          tmpId = initializerMachine.fallThroughState;\n          ($__37 = states).push.apply($__37, $traceurRuntime.spread(initializerMachine.states));\n        }\n        states.push(new FallThroughState(tmpId, initialiserFallThroughId, [createExpressionStatement(initializer)]));\n      }\n      if (condition) {\n        if (!initializer)\n          startId = conditionStartId;\n        var tmpId = conditionStartId;\n        if (conditionMachine) {\n          conditionMachine = conditionMachine.replaceStartState(conditionStartId);\n          tmpId = conditionMachine.fallThroughState;\n          ($__38 = states).push.apply($__38, $traceurRuntime.spread(conditionMachine.states));\n        }\n        states.push(new ConditionalState(tmpId, loopStartId, fallThroughId, condition));\n      }\n      if (increment) {\n        var incrementFallThroughId;\n        if (condition)\n          incrementFallThroughId = conditionStartId;\n        else\n          incrementFallThroughId = loopStartId;\n        var tmpId = incrementStartId;\n        if (incrementMachine) {\n          incrementMachine = incrementMachine.replaceStartState(incrementStartId);\n          tmpId = incrementMachine.fallThroughState;\n          ($__39 = states).push.apply($__39, $traceurRuntime.spread(incrementMachine.states));\n        }\n        states.push(new FallThroughState(tmpId, incrementFallThroughId, [createExpressionStatement(increment)]));\n      }\n      if (!initializer && !condition)\n        startId = loopStartId;\n      var continueId;\n      if (increment)\n        continueId = incrementStartId;\n      else if (condition)\n        continueId = conditionStartId;\n      else\n        continueId = loopStartId;\n      if (!increment && !condition) {\n        loopBodyMachine = loopBodyMachine.replaceFallThroughState(loopBodyMachine.startState);\n      }\n      this.addLoopBodyStates_(loopBodyMachine, continueId, fallThroughId, labels, states);\n      var machine = new StateMachine(startId, fallThroughId, states, loopBodyMachine.exceptionBlocks);\n      if (label)\n        machine = machine.replaceStateId(continueId, label.continueState);\n      return machine;\n    },\n    transformForInStatement: function(tree) {\n      return tree;\n    },\n    transformForOfStatement: function(tree) {\n      throw new Error('for of statements should be transformed before this pass');\n    },\n    transformIfStatement: function(tree) {\n      var $__37,\n          $__38,\n          $__39;\n      var $__35,\n          $__36;\n      var machine,\n          condition,\n          ifClause,\n          elseClause;\n      if (this.expressionNeedsStateMachine(tree.condition)) {\n        (($__35 = this.expressionToStateMachine(tree.condition), machine = $__35.machine, condition = $__35.expression, $__35));\n        ifClause = this.transformAny(tree.ifClause);\n        elseClause = this.transformAny(tree.elseClause);\n      } else {\n        var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformIfStatement\").call(this, tree);\n        (($__36 = result, condition = $__36.condition, ifClause = $__36.ifClause, elseClause = $__36.elseClause, $__36));\n        if (ifClause.type !== STATE_MACHINE && (elseClause === null || elseClause.type !== STATE_MACHINE)) {\n          return result;\n        }\n      }\n      ifClause = this.ensureTransformed_(ifClause);\n      elseClause = this.ensureTransformed_(elseClause);\n      var startState = this.allocateState();\n      var fallThroughState = ifClause.fallThroughState;\n      var ifState = ifClause.startState;\n      var elseState = elseClause == null ? fallThroughState : elseClause.startState;\n      var states = [];\n      var exceptionBlocks = [];\n      states.push(new ConditionalState(startState, ifState, elseState, condition));\n      ($__37 = states).push.apply($__37, $traceurRuntime.spread(ifClause.states));\n      ($__38 = exceptionBlocks).push.apply($__38, $traceurRuntime.spread(ifClause.exceptionBlocks));\n      if (elseClause != null) {\n        this.replaceAndAddStates_(elseClause.states, elseClause.fallThroughState, fallThroughState, states);\n        ($__39 = exceptionBlocks).push.apply($__39, $traceurRuntime.spread(State.replaceAllStates(elseClause.exceptionBlocks, elseClause.fallThroughState, fallThroughState)));\n      }\n      var ifMachine = new StateMachine(startState, fallThroughState, states, exceptionBlocks);\n      if (machine)\n        ifMachine = machine.append(ifMachine);\n      return ifMachine;\n    },\n    removeEmptyStates: function(oldStates) {\n      var emptyStates = [],\n          newStates = [];\n      for (var i = 0; i < oldStates.length; i++) {\n        if (oldStates[i] instanceof FallThroughState && oldStates[i].statements.length === 0) {\n          emptyStates.push(oldStates[i]);\n        } else {\n          newStates.push(oldStates[i]);\n        }\n      }\n      for (i = 0; i < newStates.length; i++) {\n        newStates[i] = emptyStates.reduce((function(state, $__35) {\n          var $__36 = $__35,\n              id = $__36.id,\n              fallThroughState = $__36.fallThroughState;\n          return state.replaceState(id, fallThroughState);\n        }), newStates[i]);\n      }\n      return newStates;\n    },\n    replaceAndAddStates_: function(oldStates, oldState, newState, newStates) {\n      for (var i = 0; i < oldStates.length; i++) {\n        newStates.push(oldStates[i].replaceState(oldState, newState));\n      }\n    },\n    transformLabelledStatement: function(tree) {\n      var startState = this.allocateState();\n      var continueState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      var label = new LabelState(tree.name.value, continueState, fallThroughState);\n      var oldLabels = this.addLabel_(label);\n      this.currentLabel_ = label;\n      var result = this.transformAny(tree.statement);\n      if (result === tree.statement) {\n        result = tree;\n      } else if (result.type === STATE_MACHINE) {\n        result = result.replaceStartState(startState);\n        result = result.replaceFallThroughState(fallThroughState);\n      }\n      this.restoreLabels_(oldLabels);\n      return result;\n    },\n    getLabels_: function() {\n      return this.labelSet_;\n    },\n    restoreLabels_: function(oldLabels) {\n      this.labelSet_ = oldLabels;\n    },\n    addLabel_: function(label) {\n      var oldLabels = this.labelSet_;\n      var labelSet = Object.create(null);\n      for (var k in this.labelSet_) {\n        labelSet[k] = this.labelSet_[k];\n      }\n      labelSet[label.name] = label;\n      this.labelSet_ = labelSet;\n      return oldLabels;\n    },\n    clearLabels_: function() {\n      var result = this.labelSet_;\n      this.labelSet_ = Object.create(null);\n      return result;\n    },\n    clearCurrentLabel_: function() {\n      var result = this.currentLabel_;\n      this.currentLabel_ = null;\n      return result;\n    },\n    transformSwitchStatement: function(tree) {\n      var $__35,\n          $__36;\n      var labels = this.getLabels_();\n      var expression,\n          machine,\n          caseClauses;\n      if (this.expressionNeedsStateMachine(tree.expression)) {\n        (($__35 = this.expressionToStateMachine(tree.expression), expression = $__35.expression, machine = $__35.machine, $__35));\n        caseClauses = this.transformList(tree.caseClauses);\n      } else {\n        var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformSwitchStatement\").call(this, tree);\n        if (!needsStateMachine(result))\n          return result;\n        (($__36 = result, expression = $__36.expression, caseClauses = $__36.caseClauses, $__36));\n      }\n      var startState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      var nextState = fallThroughState;\n      var states = [];\n      var clauses = [];\n      var tryStates = [];\n      var hasDefault = false;\n      for (var index = caseClauses.length - 1; index >= 0; index--) {\n        var clause = caseClauses[index];\n        if (clause.type == CASE_CLAUSE) {\n          var caseClause = clause;\n          nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, caseClause.statements, states, tryStates);\n          clauses.push(new SwitchClause(caseClause.expression, nextState));\n        } else {\n          hasDefault = true;\n          var defaultClause = clause;\n          nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, defaultClause.statements, states, tryStates);\n          clauses.push(new SwitchClause(null, nextState));\n        }\n      }\n      if (!hasDefault) {\n        clauses.push(new SwitchClause(null, fallThroughState));\n      }\n      states.push(new SwitchState(startState, expression, clauses.reverse()));\n      var switchMachine = new StateMachine(startState, fallThroughState, states.reverse(), tryStates);\n      if (machine)\n        switchMachine = machine.append(switchMachine);\n      return switchMachine;\n    },\n    addSwitchClauseStates_: function(nextState, fallThroughState, labels, statements, states, tryStates) {\n      var $__37;\n      var machine = this.ensureTransformedList_(statements);\n      for (var i = 0; i < machine.states.length; i++) {\n        var state = machine.states[i];\n        var transformedState = state.transformBreak(labels, fallThroughState);\n        states.push(transformedState.replaceState(machine.fallThroughState, nextState));\n      }\n      ($__37 = tryStates).push.apply($__37, $traceurRuntime.spread(machine.exceptionBlocks));\n      return machine.startState;\n    },\n    transformTryStatement: function(tree) {\n      var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformTryStatement\").call(this, tree);\n      var $__35 = result,\n          body = $__35.body,\n          catchBlock = $__35.catchBlock,\n          finallyBlock = $__35.finallyBlock;\n      if (body.type != STATE_MACHINE && (catchBlock == null || catchBlock.catchBody.type != STATE_MACHINE) && (finallyBlock == null || finallyBlock.block.type != STATE_MACHINE)) {\n        return result;\n      }\n      var outerCatchState = this.allocateState();\n      var outerFinallyState = this.allocateState();\n      var pushTryState = this.statementToStateMachine_(parseStatement($__0, (catchBlock && outerCatchState), (finallyBlock && outerFinallyState)));\n      var tryMachine = this.ensureTransformed_(body);\n      tryMachine = pushTryState.append(tryMachine);\n      if (catchBlock !== null) {\n        var popTry = this.statementToStateMachine_(parseStatement($__1));\n        tryMachine = tryMachine.append(popTry);\n        var exceptionName = catchBlock.binding.identifierToken.value;\n        var catchMachine = this.ensureTransformed_(catchBlock.catchBody);\n        var catchStart = this.allocateState();\n        this.addMachineVariable(exceptionName);\n        var states = $traceurRuntime.spread(tryMachine.states, [new FallThroughState(catchStart, catchMachine.startState, parseStatements($__2, id(exceptionName)))]);\n        this.replaceAndAddStates_(catchMachine.states, catchMachine.fallThroughState, tryMachine.fallThroughState, states);\n        tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states, [new CatchState(exceptionName, catchStart, tryMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]);\n        tryMachine = tryMachine.replaceStateId(catchStart, outerCatchState);\n      }\n      if (finallyBlock != null) {\n        var finallyMachine = this.ensureTransformed_(finallyBlock.block);\n        var popTry = this.statementToStateMachine_(parseStatement($__3));\n        finallyMachine = popTry.append(finallyMachine);\n        var states = $traceurRuntime.spread(tryMachine.states, finallyMachine.states, [new FinallyFallThroughState(finallyMachine.fallThroughState)]);\n        tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states, [new FinallyState(finallyMachine.startState, finallyMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]);\n        tryMachine = tryMachine.replaceStateId(finallyMachine.startState, outerFinallyState);\n      }\n      return tryMachine;\n    },\n    transformWhileStatement: function(tree) {\n      var $__37;\n      var $__35,\n          $__36;\n      var labels = this.getLabels_();\n      var label = this.clearCurrentLabel_();\n      var condition,\n          machine,\n          body;\n      if (this.expressionNeedsStateMachine(tree.condition)) {\n        (($__35 = this.expressionToStateMachine(tree.condition), machine = $__35.machine, condition = $__35.expression, $__35));\n        body = this.transformAny(tree.body);\n      } else {\n        var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformWhileStatement\").call(this, tree);\n        (($__36 = result, condition = $__36.condition, body = $__36.body, $__36));\n        if (body.type !== STATE_MACHINE)\n          return result;\n      }\n      var loopBodyMachine = this.ensureTransformed_(body);\n      var startState = loopBodyMachine.fallThroughState;\n      var fallThroughState = this.allocateState();\n      var states = [];\n      var conditionStart = startState;\n      if (machine) {\n        machine = machine.replaceStartState(startState);\n        conditionStart = machine.fallThroughState;\n        ($__37 = states).push.apply($__37, $traceurRuntime.spread(machine.states));\n      }\n      states.push(new ConditionalState(conditionStart, loopBodyMachine.startState, fallThroughState, condition));\n      this.addLoopBodyStates_(loopBodyMachine, startState, fallThroughState, labels, states);\n      var machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks);\n      if (label)\n        machine = machine.replaceStateId(startState, label.continueState);\n      return machine;\n    },\n    transformWithStatement: function(tree) {\n      var result = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformWithStatement\").call(this, tree);\n      if (result.body.type != STATE_MACHINE) {\n        return result;\n      }\n      throw new Error('Unreachable - with statement not allowed in strict mode/harmony');\n    },\n    generateMachineInnerFunction: function(machine) {\n      var enclosingFinallyState = machine.getEnclosingFinallyMap();\n      var SwitchStatement = createSwitchStatement(createMemberExpression('$ctx', 'state'), this.transformMachineStates(machine, State.END_STATE, State.RETHROW_STATE, enclosingFinallyState));\n      return parseExpression($__4, SwitchStatement);\n    },\n    addTempVar: function() {\n      var name = this.getTempIdentifier();\n      this.addMachineVariable(name);\n      return name;\n    },\n    addMachineVariable: function(name) {\n      this.hoistVariablesTransformer_.addVariable(name);\n    },\n    transformCpsFunctionBody: function(tree, runtimeMethod) {\n      var $__37;\n      var functionRef = arguments[2];\n      var alphaRenamedTree = AlphaRenamer.rename(tree, 'arguments', '$arguments');\n      var hasArguments = alphaRenamedTree !== tree;\n      var hoistedTree = this.hoistVariablesTransformer_.transformAny(alphaRenamedTree);\n      var maybeMachine = this.transformAny(hoistedTree);\n      if (this.reporter.hadError())\n        return tree;\n      var machine;\n      if (maybeMachine.type !== STATE_MACHINE) {\n        machine = this.statementsToStateMachine_(maybeMachine.statements);\n      } else {\n        machine = new StateMachine(maybeMachine.startState, maybeMachine.fallThroughState, this.removeEmptyStates(maybeMachine.states), maybeMachine.exceptionBlocks);\n      }\n      machine = machine.replaceFallThroughState(State.END_STATE).replaceStartState(State.START_STATE);\n      var statements = [];\n      if (this.hoistVariablesTransformer_.hasFunctions())\n        ($__37 = statements).push.apply($__37, $traceurRuntime.spread(this.hoistVariablesTransformer_.getFunctions()));\n      if (this.hoistVariablesTransformer_.hasVariables())\n        statements.push(this.hoistVariablesTransformer_.getVariableStatement());\n      if (hasArguments)\n        statements.push(parseStatement($__5));\n      if (functionRef) {\n        statements.push(parseStatement($__6, runtimeMethod, this.generateMachineInnerFunction(machine), functionRef));\n      } else {\n        statements.push(parseStatement($__7, runtimeMethod, this.generateMachineInnerFunction(machine)));\n      }\n      return createFunctionBody(statements);\n    },\n    transformFunctionDeclaration: function(tree) {\n      return tree;\n    },\n    transformFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformGetAccessor: function(tree) {\n      return tree;\n    },\n    transformSetAccessor: function(tree) {\n      return tree;\n    },\n    transformArrowFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformStateMachine: function(tree) {\n      return tree;\n    },\n    statementToStateMachine_: function(statement) {\n      var statements;\n      if (statement.type === BLOCK)\n        statements = statement.statements;\n      else\n        statements = [statement];\n      return this.statementsToStateMachine_(statements);\n    },\n    statementsToStateMachine_: function(statements) {\n      var startState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      return this.stateToStateMachine_(new FallThroughState(startState, fallThroughState, statements), fallThroughState);\n    },\n    stateToStateMachine_: function(newState, fallThroughState) {\n      return new StateMachine(newState.id, fallThroughState, [newState], []);\n    },\n    transformMachineStates: function(machine, machineEndState, rethrowState, enclosingFinallyState) {\n      var cases = [];\n      for (var i = 0; i < machine.states.length; i++) {\n        var state = machine.states[i];\n        var stateCase = state.transformMachineState(enclosingFinallyState[state.id], machineEndState, this.reporter);\n        if (stateCase != null) {\n          cases.push(stateCase);\n        }\n      }\n      this.addFinallyFallThroughDispatches(null, machine.exceptionBlocks, cases);\n      cases.push(createDefaultClause(parseStatements($__8)));\n      return cases;\n    },\n    addFinallyFallThroughDispatches: function(enclosingFinallyState, tryStates, cases) {\n      for (var i = 0; i < tryStates.length; i++) {\n        var tryState = tryStates[i];\n        if (tryState.kind == TryState.Kind.FINALLY) {\n          var finallyState = tryState;\n          if (enclosingFinallyState != null) {\n            var caseClauses = [];\n            var index = 0;\n            for (var j = 0; j < enclosingFinallyState.tryStates.length; j++) {\n              var destination = enclosingFinallyState.tryStates[j];\n              index++;\n              var statements;\n              if (index < enclosingFinallyState.tryStates.length) {\n                statements = [];\n              } else {\n                statements = parseStatements($__9, State.INVALID_STATE);\n              }\n              caseClauses.push(createCaseClause(createNumberLiteral(destination), statements));\n            }\n            caseClauses.push(createDefaultClause([createAssignStateStatement(enclosingFinallyState.finallyState), createBreakStatement()]));\n            cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), [createSwitchStatement(createMemberExpression('$ctx', 'finallyFallThrough'), caseClauses), createBreakStatement()]));\n          } else {\n            cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), parseStatements($__10)));\n          }\n          this.addFinallyFallThroughDispatches(finallyState, finallyState.nestedTrys, cases);\n        } else {\n          this.addFinallyFallThroughDispatches(enclosingFinallyState, tryState.nestedTrys, cases);\n        }\n      }\n    },\n    transformVariableDeclarationList: function(tree) {\n      this.reporter.reportError(tree.location && tree.location.start, 'Traceur: const/let declarations in a block containing a yield are ' + 'not yet implemented');\n      return tree;\n    },\n    maybeTransformStatement_: function(maybeTransformedStatement) {\n      var breakContinueTransformed = new BreakContinueTransformer(this.stateAllocator_).transformAny(maybeTransformedStatement);\n      if (breakContinueTransformed != maybeTransformedStatement) {\n        breakContinueTransformed = this.transformAny(breakContinueTransformed);\n      }\n      return breakContinueTransformed;\n    },\n    ensureTransformed_: function(statement) {\n      if (statement == null) {\n        return null;\n      }\n      var maybeTransformed = this.maybeTransformStatement_(statement);\n      return maybeTransformed.type == STATE_MACHINE ? maybeTransformed : this.statementToStateMachine_(maybeTransformed);\n    },\n    ensureTransformedList_: function(statements) {\n      var maybeTransformedStatements = [];\n      var foundMachine = false;\n      for (var i = 0; i < statements.length; i++) {\n        var statement = statements[i];\n        var maybeTransformedStatement = this.maybeTransformStatement_(statement);\n        maybeTransformedStatements.push(maybeTransformedStatement);\n        if (maybeTransformedStatement.type == STATE_MACHINE) {\n          foundMachine = true;\n        }\n      }\n      if (!foundMachine) {\n        return this.statementsToStateMachine_(statements);\n      }\n      return this.transformStatementList_(maybeTransformedStatements);\n    },\n    expressionToStateMachine: function(tree) {\n      var commaExpression = new ExplodeExpressionTransformer(this).transformAny(tree);\n      var statements = new NormalizeCommaExpressionToStatementTransformer().transformAny(commaExpression).statements;\n      var lastStatement = statements.pop();\n      assert(lastStatement.type === EXPRESSION_STATEMENT);\n      var expression = lastStatement.expression;\n      statements = $traceurRuntime.superGet(this, $CPSTransformer.prototype, \"transformList\").call(this, statements);\n      var machine = this.transformStatementList_(statements);\n      return {\n        expression: expression,\n        machine: machine\n      };\n    }\n  }, {}, TempVarTransformer);\n  var NormalizeCommaExpressionToStatementTransformer = function NormalizeCommaExpressionToStatementTransformer() {\n    $traceurRuntime.superConstructor($NormalizeCommaExpressionToStatementTransformer).apply(this, arguments);\n  };\n  var $NormalizeCommaExpressionToStatementTransformer = NormalizeCommaExpressionToStatementTransformer;\n  ($traceurRuntime.createClass)(NormalizeCommaExpressionToStatementTransformer, {\n    transformCommaExpression: function(tree) {\n      var $__33 = this;\n      var statements = tree.expressions.map((function(expr) {\n        if (expr.type === CONDITIONAL_EXPRESSION)\n          return $__33.transformAny(expr);\n        return createExpressionStatement(expr);\n      }));\n      return new AnonBlock(tree.location, statements);\n    },\n    transformConditionalExpression: function(tree) {\n      var ifBlock = this.transformAny(tree.left);\n      var elseBlock = this.transformAny(tree.right);\n      return new IfStatement(tree.location, tree.condition, anonBlockToBlock(ifBlock), anonBlockToBlock(elseBlock));\n    }\n  }, {}, ParseTreeTransformer);\n  function anonBlockToBlock(tree) {\n    if (tree.type === PAREN_EXPRESSION)\n      return anonBlockToBlock(tree.expression);\n    return new Block(tree.location, tree.statements);\n  }\n  return {get CPSTransformer() {\n      return CPSTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/EndState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/EndState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/EndState\", path);\n  }\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var EndState = function EndState() {\n    $traceurRuntime.superConstructor($EndState).apply(this, arguments);\n  };\n  var $EndState = EndState;\n  ($traceurRuntime.createClass)(EndState, {\n    replaceState: function(oldState, newState) {\n      return new $EndState(State.replaceStateId(this.id, oldState, newState));\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      return State.generateJump(enclosingFinally, machineEndState);\n    }\n  }, {}, State);\n  return {get EndState() {\n      return EndState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/AsyncTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/AsyncTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/AsyncTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.value\"], {raw: {value: Object.freeze([\"$ctx.value\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"$ctx.returnValue = \", \"\"], {raw: {value: Object.freeze([\"$ctx.returnValue = \", \"\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"$ctx.resolve(\", \")\"], {raw: {value: Object.freeze([\"$ctx.resolve(\", \")\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$traceurRuntime.asyncWrap\"], {raw: {value: Object.freeze([\"$traceurRuntime.asyncWrap\"])}}));\n  var AwaitState = System.get(\"traceur@0.0.74/src/codegeneration/generator/AwaitState\").AwaitState;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      BinaryExpression = $__5.BinaryExpression,\n      ExpressionStatement = $__5.ExpressionStatement;\n  var CPSTransformer = System.get(\"traceur@0.0.74/src/codegeneration/generator/CPSTransformer\").CPSTransformer;\n  var EndState = System.get(\"traceur@0.0.74/src/codegeneration/generator/EndState\").EndState;\n  var FallThroughState = System.get(\"traceur@0.0.74/src/codegeneration/generator/FallThroughState\").FallThroughState;\n  var $__9 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      AWAIT_EXPRESSION = $__9.AWAIT_EXPRESSION,\n      BINARY_EXPRESSION = $__9.BINARY_EXPRESSION,\n      STATE_MACHINE = $__9.STATE_MACHINE;\n  var $__10 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__10.parseExpression,\n      parseStatement = $__10.parseStatement,\n      parseStatements = $__10.parseStatements;\n  var StateMachine = System.get(\"traceur@0.0.74/src/syntax/trees/StateMachine\").StateMachine;\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var createUndefinedExpression = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createUndefinedExpression;\n  function isAwaitAssign(tree) {\n    return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === AWAIT_EXPRESSION && tree.left.isLeftHandSideExpression();\n  }\n  var AwaitFinder = function AwaitFinder() {\n    $traceurRuntime.superConstructor($AwaitFinder).apply(this, arguments);\n  };\n  var $AwaitFinder = AwaitFinder;\n  ($traceurRuntime.createClass)(AwaitFinder, {visitAwaitExpression: function(tree) {\n      this.found = true;\n    }}, {}, FindInFunctionScope);\n  function scopeContainsAwait(tree) {\n    return new AwaitFinder(tree).found;\n  }\n  var AsyncTransformer = function AsyncTransformer() {\n    $traceurRuntime.superConstructor($AsyncTransformer).apply(this, arguments);\n  };\n  var $AsyncTransformer = AsyncTransformer;\n  ($traceurRuntime.createClass)(AsyncTransformer, {\n    expressionNeedsStateMachine: function(tree) {\n      if (tree === null)\n        return false;\n      return scopeContainsAwait(tree);\n    },\n    transformExpressionStatement: function(tree) {\n      var expression = tree.expression;\n      if (expression.type === AWAIT_EXPRESSION)\n        return this.transformAwaitExpression_(expression);\n      if (isAwaitAssign(expression))\n        return this.transformAwaitAssign_(expression);\n      if (this.expressionNeedsStateMachine(expression)) {\n        return this.expressionToStateMachine(expression).machine;\n      }\n      return $traceurRuntime.superGet(this, $AsyncTransformer.prototype, \"transformExpressionStatement\").call(this, tree);\n    },\n    transformAwaitExpression: function(tree) {\n      throw new Error('Internal error');\n    },\n    transformAwaitExpression_: function(tree) {\n      return this.transformAwait_(tree, tree.expression, null, null);\n    },\n    transformAwaitAssign_: function(tree) {\n      return this.transformAwait_(tree, tree.right.expression, tree.left, tree.operator);\n    },\n    transformAwait_: function(tree, inExpression, left, operator) {\n      var $__15;\n      var expression,\n          machine;\n      if (this.expressionNeedsStateMachine(inExpression)) {\n        (($__15 = this.expressionToStateMachine(inExpression), expression = $__15.expression, machine = $__15.machine, $__15));\n      } else {\n        expression = this.transformAny(inExpression);\n      }\n      var createTaskState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      var callbackState = left ? this.allocateState() : fallThroughState;\n      var states = [];\n      states.push(new AwaitState(createTaskState, callbackState, expression));\n      if (left) {\n        var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, operator, parseExpression($__0)));\n        states.push(new FallThroughState(callbackState, fallThroughState, [statement]));\n      }\n      var awaitMachine = new StateMachine(createTaskState, fallThroughState, states, []);\n      if (machine) {\n        awaitMachine = machine.append(awaitMachine);\n      }\n      return awaitMachine;\n    },\n    transformFinally: function(tree) {\n      var result = $traceurRuntime.superGet(this, $AsyncTransformer.prototype, \"transformFinally\").call(this, tree);\n      if (result.block.type != STATE_MACHINE) {\n        return result;\n      }\n      this.reporter.reportError(tree.location.start, 'await not permitted within a finally block.');\n      return result;\n    },\n    transformReturnStatement: function(tree) {\n      var $__15;\n      var expression,\n          machine;\n      if (this.expressionNeedsStateMachine(tree.expression)) {\n        (($__15 = this.expressionToStateMachine(tree.expression), expression = $__15.expression, machine = $__15.machine, $__15));\n      } else {\n        expression = tree.expression || createUndefinedExpression();\n      }\n      var startState = this.allocateState();\n      var endState = this.allocateState();\n      var completeState = new FallThroughState(startState, endState, parseStatements($__1, expression));\n      var end = new EndState(endState);\n      var returnMachine = new StateMachine(startState, this.allocateState(), [completeState, end], []);\n      if (machine)\n        returnMachine = machine.append(returnMachine);\n      return returnMachine;\n    },\n    createCompleteTask_: function(result) {\n      return parseStatement($__2, result);\n    },\n    transformAsyncBody: function(tree) {\n      var runtimeFunction = parseExpression($__3);\n      return this.transformCpsFunctionBody(tree, runtimeFunction);\n    }\n  }, {transformAsyncBody: function(identifierGenerator, reporter, body) {\n      return new $AsyncTransformer(identifierGenerator, reporter).transformAsyncBody(body);\n    }}, CPSTransformer);\n  ;\n  return {get AsyncTransformer() {\n      return AsyncTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/ForInTransformPass\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/ForInTransformPass\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/ForInTransformPass\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BLOCK = $__0.BLOCK,\n      VARIABLE_DECLARATION_LIST = $__0.VARIABLE_DECLARATION_LIST,\n      IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      LENGTH = $__1.LENGTH,\n      PUSH = $__1.PUSH;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      BANG = $__3.BANG,\n      IN = $__3.IN,\n      OPEN_ANGLE = $__3.OPEN_ANGLE,\n      PLUS_PLUS = $__3.PLUS_PLUS,\n      VAR = $__3.VAR;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__4.createArgumentList,\n      createAssignmentStatement = $__4.createAssignmentStatement,\n      createBinaryExpression = $__4.createBinaryExpression,\n      createBlock = $__4.createBlock,\n      createCallStatement = $__4.createCallStatement,\n      createContinueStatement = $__4.createContinueStatement,\n      createEmptyArrayLiteralExpression = $__4.createEmptyArrayLiteralExpression,\n      createForInStatement = $__4.createForInStatement,\n      createForStatement = $__4.createForStatement,\n      createIdentifierExpression = $__4.createIdentifierExpression,\n      createIfStatement = $__4.createIfStatement,\n      createMemberExpression = $__4.createMemberExpression,\n      createMemberLookupExpression = $__4.createMemberLookupExpression,\n      createNumberLiteral = $__4.createNumberLiteral,\n      createOperatorToken = $__4.createOperatorToken,\n      createParenExpression = $__4.createParenExpression,\n      createPostfixExpression = $__4.createPostfixExpression,\n      createUnaryExpression = $__4.createUnaryExpression,\n      createVariableDeclarationList = $__4.createVariableDeclarationList,\n      createVariableStatement = $__4.createVariableStatement;\n  var ForInTransformPass = function ForInTransformPass() {\n    $traceurRuntime.superConstructor($ForInTransformPass).apply(this, arguments);\n  };\n  var $ForInTransformPass = ForInTransformPass;\n  ($traceurRuntime.createClass)(ForInTransformPass, {transformForInStatement: function(tree) {\n      var $__6,\n          $__7;\n      var bodyStatements = [];\n      var body = this.transformAny(tree.body);\n      if (body.type == BLOCK) {\n        ($__6 = bodyStatements).push.apply($__6, $traceurRuntime.spread(body.statements));\n      } else {\n        bodyStatements.push(body);\n      }\n      var elements = [];\n      var keys = this.getTempIdentifier();\n      elements.push(createVariableStatement(VAR, keys, createEmptyArrayLiteralExpression()));\n      var collection = this.getTempIdentifier();\n      elements.push(createVariableStatement(VAR, collection, tree.collection));\n      var p = this.getTempIdentifier();\n      elements.push(createForInStatement(createVariableDeclarationList(VAR, p, null), createIdentifierExpression(collection), createCallStatement(createMemberExpression(keys, PUSH), createArgumentList([createIdentifierExpression(p)]))));\n      var i = this.getTempIdentifier();\n      var lookup = createMemberLookupExpression(createIdentifierExpression(keys), createIdentifierExpression(i));\n      var originalKey,\n          assignOriginalKey;\n      if (tree.initializer.type == VARIABLE_DECLARATION_LIST) {\n        var decList = tree.initializer;\n        originalKey = createIdentifierExpression(decList.declarations[0].lvalue);\n        assignOriginalKey = createVariableStatement(decList.declarationType, originalKey.identifierToken, lookup);\n      } else if (tree.initializer.type == IDENTIFIER_EXPRESSION) {\n        originalKey = tree.initializer;\n        assignOriginalKey = createAssignmentStatement(tree.initializer, lookup);\n      } else {\n        throw new Error('Invalid left hand side of for in loop');\n      }\n      var innerBlock = [];\n      innerBlock.push(assignOriginalKey);\n      innerBlock.push(createIfStatement(createUnaryExpression(createOperatorToken(BANG), createParenExpression(createBinaryExpression(originalKey, createOperatorToken(IN), createIdentifierExpression(collection)))), createContinueStatement(), null));\n      ($__7 = innerBlock).push.apply($__7, $traceurRuntime.spread(bodyStatements));\n      elements.push(createForStatement(createVariableDeclarationList(VAR, i, createNumberLiteral(0)), createBinaryExpression(createIdentifierExpression(i), createOperatorToken(OPEN_ANGLE), createMemberExpression(keys, LENGTH)), createPostfixExpression(createIdentifierExpression(i), createOperatorToken(PLUS_PLUS)), createBlock(innerBlock)));\n      return createBlock(elements);\n    }}, {}, TempVarTransformer);\n  return {get ForInTransformPass() {\n      return ForInTransformPass;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/YieldState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/YieldState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/YieldState\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"return \", \"\"], {raw: {value: Object.freeze([\"return \", \"\"])}}));\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var YieldState = function YieldState(id, fallThroughState, expression) {\n    $traceurRuntime.superConstructor($YieldState).call(this, id);\n    this.fallThroughState = fallThroughState;\n    this.expression = expression;\n  };\n  var $YieldState = YieldState;\n  ($traceurRuntime.createClass)(YieldState, {\n    replaceState: function(oldState, newState) {\n      return new this.constructor(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.expression);\n    },\n    transform: function(enclosingFinally, machineEndState, reporter) {\n      return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, this.fallThroughState), [parseStatement($__0, this.expression)]);\n    }\n  }, {}, State);\n  return {get YieldState() {\n      return YieldState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/ReturnState\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/ReturnState\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/ReturnState\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$ctx.returnValue = \", \"\"], {raw: {value: Object.freeze([\"$ctx.returnValue = \", \"\"])}}));\n  var $__1 = System.get(\"traceur@0.0.74/src/semantics/util\"),\n      isUndefined = $__1.isUndefined,\n      isVoidExpression = $__1.isVoidExpression;\n  var YieldState = System.get(\"traceur@0.0.74/src/codegeneration/generator/YieldState\").YieldState;\n  var State = System.get(\"traceur@0.0.74/src/codegeneration/generator/State\").State;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  var ReturnState = function ReturnState() {\n    $traceurRuntime.superConstructor($ReturnState).apply(this, arguments);\n  };\n  var $ReturnState = ReturnState;\n  ($traceurRuntime.createClass)(ReturnState, {transform: function(enclosingFinally, machineEndState, reporter) {\n      var $__6;\n      var e = this.expression;\n      var statements = [];\n      if (e && !isUndefined(e) && !isVoidExpression(e))\n        statements.push(parseStatement($__0, this.expression));\n      ($__6 = statements).push.apply($__6, $traceurRuntime.spread(State.generateJump(enclosingFinally, machineEndState)));\n      return statements;\n    }}, {}, YieldState);\n  return {get ReturnState() {\n      return ReturnState;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/generator/GeneratorTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/generator/GeneratorTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/generator/GeneratorTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"\\n        \", \" = \", \"[Symbol.iterator]();\\n        // received = void 0;\\n        $ctx.sent = void 0;\\n        // send = true; // roughly equivalent\\n        $ctx.action = 'next';\\n\\n        for (;;) {\\n          \", \" = \", \"[$ctx.action]($ctx.sentIgnoreThrow);\\n          if (\", \".done) {\\n            $ctx.sent = \", \".value;\\n            break;\\n          }\\n          yield \", \".value;\\n        }\"], {raw: {value: Object.freeze([\"\\n        \", \" = \", \"[Symbol.iterator]();\\n        // received = void 0;\\n        $ctx.sent = void 0;\\n        // send = true; // roughly equivalent\\n        $ctx.action = 'next';\\n\\n        for (;;) {\\n          \", \" = \", \"[$ctx.action]($ctx.sentIgnoreThrow);\\n          if (\", \".done) {\\n            $ctx.sent = \", \".value;\\n            break;\\n          }\\n          yield \", \".value;\\n        }\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"$ctx.sentIgnoreThrow\"], {raw: {value: Object.freeze([\"$ctx.sentIgnoreThrow\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"$ctx.sent\"], {raw: {value: Object.freeze([\"$ctx.sent\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$ctx.maybeThrow()\"], {raw: {value: Object.freeze([\"$ctx.maybeThrow()\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"$traceurRuntime.createGeneratorInstance\"], {raw: {value: Object.freeze([\"$traceurRuntime.createGeneratorInstance\"])}}));\n  var CPSTransformer = System.get(\"traceur@0.0.74/src/codegeneration/generator/CPSTransformer\").CPSTransformer;\n  var $__6 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BINARY_EXPRESSION = $__6.BINARY_EXPRESSION,\n      YIELD_EXPRESSION = $__6.YIELD_EXPRESSION;\n  var $__7 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      BinaryExpression = $__7.BinaryExpression,\n      ExpressionStatement = $__7.ExpressionStatement;\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var ReturnState = System.get(\"traceur@0.0.74/src/codegeneration/generator/ReturnState\").ReturnState;\n  var YieldState = System.get(\"traceur@0.0.74/src/codegeneration/generator/YieldState\").YieldState;\n  var $__11 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      id = $__11.createIdentifierExpression,\n      createMemberExpression = $__11.createMemberExpression,\n      createUndefinedExpression = $__11.createUndefinedExpression;\n  var $__12 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__12.parseExpression,\n      parseStatement = $__12.parseStatement,\n      parseStatements = $__12.parseStatements;\n  function isYieldAssign(tree) {\n    return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === YIELD_EXPRESSION && tree.left.isLeftHandSideExpression();\n  }\n  var YieldFinder = function YieldFinder() {\n    $traceurRuntime.superConstructor($YieldFinder).apply(this, arguments);\n  };\n  var $YieldFinder = YieldFinder;\n  ($traceurRuntime.createClass)(YieldFinder, {visitYieldExpression: function(tree) {\n      this.found = true;\n    }}, {}, FindInFunctionScope);\n  function scopeContainsYield(tree) {\n    return new YieldFinder(tree).found;\n  }\n  var GeneratorTransformer = function GeneratorTransformer(identifierGenerator, reporter) {\n    $traceurRuntime.superConstructor($GeneratorTransformer).call(this, identifierGenerator, reporter);\n    this.shouldAppendThrowCloseState_ = true;\n  };\n  var $GeneratorTransformer = GeneratorTransformer;\n  ($traceurRuntime.createClass)(GeneratorTransformer, {\n    expressionNeedsStateMachine: function(tree) {\n      if (tree === null)\n        return false;\n      return scopeContainsYield(tree);\n    },\n    transformYieldExpression_: function(tree) {\n      var $__14;\n      var expression,\n          machine;\n      if (this.expressionNeedsStateMachine(tree.expression)) {\n        (($__14 = this.expressionToStateMachine(tree.expression), expression = $__14.expression, machine = $__14.machine, $__14));\n      } else {\n        expression = this.transformAny(tree.expression);\n        if (!expression)\n          expression = createUndefinedExpression();\n      }\n      if (tree.isYieldFor)\n        return this.transformYieldForExpression_(expression, machine);\n      var startState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      var yieldMachine = this.stateToStateMachine_(new YieldState(startState, fallThroughState, expression), fallThroughState);\n      if (machine)\n        yieldMachine = machine.append(yieldMachine);\n      if (this.shouldAppendThrowCloseState_)\n        yieldMachine = yieldMachine.append(this.createThrowCloseState_());\n      return yieldMachine;\n    },\n    transformYieldForExpression_: function(expression) {\n      var machine = arguments[1];\n      var gName = this.getTempIdentifier();\n      this.addMachineVariable(gName);\n      var g = id(gName);\n      var nextName = this.getTempIdentifier();\n      this.addMachineVariable(nextName);\n      var next = id(nextName);\n      var statements = parseStatements($__0, g, expression, next, g, next, next, next);\n      var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_;\n      this.shouldAppendThrowCloseState_ = false;\n      statements = this.transformList(statements);\n      var yieldMachine = this.transformStatementList_(statements);\n      this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState;\n      if (machine)\n        yieldMachine = machine.append(yieldMachine);\n      return yieldMachine;\n    },\n    transformYieldExpression: function(tree) {\n      this.reporter.reportError(tree.location.start, 'Only \\'a = yield b\\' and \\'var a = yield b\\' currently supported.');\n      return tree;\n    },\n    transformYieldAssign_: function(tree) {\n      var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_;\n      this.shouldAppendThrowCloseState_ = false;\n      var machine = this.transformYieldExpression_(tree.right);\n      var left = this.transformAny(tree.left);\n      var sentExpression = tree.right.isYieldFor ? parseExpression($__1) : parseExpression($__2);\n      var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, tree.operator, sentExpression));\n      var assignMachine = this.statementToStateMachine_(statement);\n      this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState;\n      return machine.append(assignMachine);\n    },\n    createThrowCloseState_: function() {\n      return this.statementToStateMachine_(parseStatement($__3));\n    },\n    transformExpressionStatement: function(tree) {\n      var expression = tree.expression;\n      if (expression.type === YIELD_EXPRESSION)\n        return this.transformYieldExpression_(expression);\n      if (isYieldAssign(expression))\n        return this.transformYieldAssign_(expression);\n      if (this.expressionNeedsStateMachine(expression)) {\n        return this.expressionToStateMachine(expression).machine;\n      }\n      return $traceurRuntime.superGet(this, $GeneratorTransformer.prototype, \"transformExpressionStatement\").call(this, tree);\n    },\n    transformAwaitStatement: function(tree) {\n      this.reporter.reportError(tree.location.start, 'Generator function may not have an await statement.');\n      return tree;\n    },\n    transformReturnStatement: function(tree) {\n      var $__14;\n      var expression,\n          machine;\n      if (this.expressionNeedsStateMachine(tree.expression))\n        (($__14 = this.expressionToStateMachine(tree.expression), expression = $__14.expression, machine = $__14.machine, $__14));\n      else\n        expression = tree.expression;\n      var startState = this.allocateState();\n      var fallThroughState = this.allocateState();\n      var returnMachine = this.stateToStateMachine_(new ReturnState(startState, fallThroughState, this.transformAny(expression)), fallThroughState);\n      if (machine)\n        return machine.append(returnMachine);\n      return returnMachine;\n    },\n    transformGeneratorBody: function(tree, name) {\n      var runtimeFunction = parseExpression($__4);\n      return this.transformCpsFunctionBody(tree, runtimeFunction, name);\n    }\n  }, {transformGeneratorBody: function(identifierGenerator, reporter, body, name) {\n      return new $GeneratorTransformer(identifierGenerator, reporter).transformGeneratorBody(body, name);\n    }}, CPSTransformer);\n  ;\n  return {get GeneratorTransformer() {\n      return GeneratorTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/GeneratorTransformPass\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/GeneratorTransformPass\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/GeneratorTransformPass\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$traceurRuntime.initGeneratorFunction(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.initGeneratorFunction(\", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"var \", \" = \", \"\"], {raw: {value: Object.freeze([\"var \", \" = \", \"\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"$traceurRuntime.initGeneratorFunction(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.initGeneratorFunction(\", \")\"])}}));\n  var ArrowFunctionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ArrowFunctionTransformer\").ArrowFunctionTransformer;\n  var AsyncTransformer = System.get(\"traceur@0.0.74/src/codegeneration/generator/AsyncTransformer\").AsyncTransformer;\n  var ForInTransformPass = System.get(\"traceur@0.0.74/src/codegeneration/generator/ForInTransformPass\").ForInTransformPass;\n  var GeneratorTransformer = System.get(\"traceur@0.0.74/src/codegeneration/generator/GeneratorTransformer\").GeneratorTransformer;\n  var $__7 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__7.parseExpression,\n      parseStatement = $__7.parseStatement;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var FindInFunctionScope = System.get(\"traceur@0.0.74/src/codegeneration/FindInFunctionScope\").FindInFunctionScope;\n  var $__10 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__10.AnonBlock,\n      FunctionDeclaration = $__10.FunctionDeclaration,\n      FunctionExpression = $__10.FunctionExpression;\n  var $__11 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createBindingIdentifier = $__11.createBindingIdentifier,\n      id = $__11.createIdentifierExpression,\n      createIdentifierToken = $__11.createIdentifierToken;\n  var transformOptions = System.get(\"traceur@0.0.74/src/Options\").transformOptions;\n  var ForInFinder = function ForInFinder() {\n    $traceurRuntime.superConstructor($ForInFinder).apply(this, arguments);\n  };\n  var $ForInFinder = ForInFinder;\n  ($traceurRuntime.createClass)(ForInFinder, {visitForInStatement: function(tree) {\n      this.found = true;\n    }}, {}, FindInFunctionScope);\n  function needsTransform(tree) {\n    return transformOptions.generators && tree.isGenerator() || transformOptions.asyncFunctions && tree.isAsyncFunction();\n  }\n  var GeneratorTransformPass = function GeneratorTransformPass(identifierGenerator, reporter) {\n    $traceurRuntime.superConstructor($GeneratorTransformPass).call(this, identifierGenerator);\n    this.reporter_ = reporter;\n    this.inBlock_ = false;\n  };\n  var $GeneratorTransformPass = GeneratorTransformPass;\n  ($traceurRuntime.createClass)(GeneratorTransformPass, {\n    transformFunctionDeclaration: function(tree) {\n      if (!needsTransform(tree))\n        return $traceurRuntime.superGet(this, $GeneratorTransformPass.prototype, \"transformFunctionDeclaration\").call(this, tree);\n      if (tree.isGenerator())\n        return this.transformGeneratorDeclaration_(tree);\n      return this.transformFunction_(tree, FunctionDeclaration, null);\n    },\n    transformGeneratorDeclaration_: function(tree) {\n      var nameIdExpression = id(tree.name.identifierToken);\n      var setupPrototypeExpression = parseExpression($__0, nameIdExpression);\n      var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupPrototypeExpression));\n      var funcDecl = this.transformFunction_(tree, FunctionDeclaration, tmpVar);\n      if (!this.inBlock_)\n        return funcDecl;\n      return new AnonBlock(null, [funcDecl, parseStatement($__1, tmpVar, setupPrototypeExpression)]);\n    },\n    transformFunctionExpression: function(tree) {\n      if (!needsTransform(tree))\n        return $traceurRuntime.superGet(this, $GeneratorTransformPass.prototype, \"transformFunctionExpression\").call(this, tree);\n      if (tree.isGenerator())\n        return this.transformGeneratorExpression_(tree);\n      return this.transformFunction_(tree, FunctionExpression, null);\n    },\n    transformGeneratorExpression_: function(tree) {\n      var name;\n      if (!tree.name) {\n        name = createIdentifierToken(this.getTempIdentifier());\n        tree = new FunctionExpression(tree.location, createBindingIdentifier(name), tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);\n      } else {\n        name = tree.name.identifierToken;\n      }\n      var functionExpression = this.transformFunction_(tree, FunctionExpression, id(name));\n      return parseExpression($__2, functionExpression);\n    },\n    transformFunction_: function(tree, constructor, nameExpression) {\n      var body = $traceurRuntime.superGet(this, $GeneratorTransformPass.prototype, \"transformAny\").call(this, tree.body);\n      var finder = new ForInFinder(body);\n      if (finder.found) {\n        body = new ForInTransformPass(this.identifierGenerator).transformAny(body);\n      }\n      if (transformOptions.generators && tree.isGenerator()) {\n        body = GeneratorTransformer.transformGeneratorBody(this.identifierGenerator, this.reporter_, body, nameExpression);\n      } else if (transformOptions.asyncFunctions && tree.isAsyncFunction()) {\n        body = AsyncTransformer.transformAsyncBody(this.identifierGenerator, this.reporter_, body);\n      }\n      var functionKind = null;\n      return new constructor(tree.location, tree.name, functionKind, tree.parameterList, tree.typeAnnotation || null, tree.annotations || null, body);\n    },\n    transformArrowFunctionExpression: function(tree) {\n      if (!tree.isAsyncFunction())\n        return $traceurRuntime.superGet(this, $GeneratorTransformPass.prototype, \"transformArrowFunctionExpression\").call(this, tree);\n      return this.transformAny(ArrowFunctionTransformer.transform(this, tree));\n    },\n    transformBlock: function(tree) {\n      var inBlock = this.inBlock_;\n      this.inBlock_ = true;\n      var rv = $traceurRuntime.superGet(this, $GeneratorTransformPass.prototype, \"transformBlock\").call(this, tree);\n      this.inBlock_ = inBlock;\n      return rv;\n    }\n  }, {}, TempVarTransformer);\n  return {get GeneratorTransformPass() {\n      return GeneratorTransformPass;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/InlineModuleTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/InlineModuleTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/InlineModuleTransformer\", path);\n  }\n  var VAR = System.get(\"traceur@0.0.74/src/syntax/TokenType\").VAR;\n  var ModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\").ModuleTransformer;\n  var $__2 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createBindingIdentifier = $__2.createBindingIdentifier,\n      createEmptyStatement = $__2.createEmptyStatement,\n      createFunctionBody = $__2.createFunctionBody,\n      createImmediatelyInvokedFunctionExpression = $__2.createImmediatelyInvokedFunctionExpression,\n      createScopedExpression = $__2.createScopedExpression,\n      createVariableStatement = $__2.createVariableStatement;\n  var globalThis = System.get(\"traceur@0.0.74/src/codegeneration/globalThis\").default;\n  var scopeContainsThis = System.get(\"traceur@0.0.74/src/codegeneration/scopeContainsThis\").default;\n  var anonInlineModules = 0;\n  var InlineModuleTransformer = function InlineModuleTransformer() {\n    $traceurRuntime.superConstructor($InlineModuleTransformer).apply(this, arguments);\n  };\n  var $InlineModuleTransformer = InlineModuleTransformer;\n  ($traceurRuntime.createClass)(InlineModuleTransformer, {\n    wrapModule: function(statements) {\n      var seed = this.moduleName || 'anon_' + ++anonInlineModules;\n      var idName = this.getTempVarNameForModuleName(seed);\n      var body = createFunctionBody(statements);\n      var moduleExpression;\n      if (statements.some(scopeContainsThis)) {\n        moduleExpression = createScopedExpression(body, globalThis());\n      } else {\n        moduleExpression = createImmediatelyInvokedFunctionExpression(body);\n      }\n      return [createVariableStatement(VAR, idName, moduleExpression)];\n    },\n    transformNamedExport: function(tree) {\n      return createEmptyStatement();\n    },\n    transformModuleSpecifier: function(tree) {\n      return createBindingIdentifier(this.getTempVarNameForModuleSpecifier(tree));\n    }\n  }, {}, ModuleTransformer);\n  return {get InlineModuleTransformer() {\n      return InlineModuleTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/InstantiateModuleTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/InstantiateModuleTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/InstantiateModuleTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"\", \" = \", \"\"], {raw: {value: Object.freeze([\"\", \" = \", \"\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"$__export(\", \", \", \")\"], {raw: {value: Object.freeze([\"$__export(\", \", \", \")\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"($__export(\", \", \", \" + 1), \", \")\"], {raw: {value: Object.freeze([\"($__export(\", \", \", \" + 1), \", \")\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"($__export(\", \", \", \" - 1), \", \")\"], {raw: {value: Object.freeze([\"($__export(\", \", \", \" - 1), \", \")\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"$__export(\", \", \", \")}\"], {raw: {value: Object.freeze([\"$__export(\", \", \", \")}\"])}})),\n      $__5 = Object.freeze(Object.defineProperties([\"System.register(\", \", \", \", function($__export) {\\n          \", \"\\n        });\"], {raw: {value: Object.freeze([\"System.register(\", \", \", \", function($__export) {\\n          \", \"\\n        });\"])}})),\n      $__6 = Object.freeze(Object.defineProperties([\"System.register(\", \", function($__export) {\\n          \", \"\\n        });\"], {raw: {value: Object.freeze([\"System.register(\", \", function($__export) {\\n          \", \"\\n        });\"])}})),\n      $__7 = Object.freeze(Object.defineProperties([\"\", \" = m.\", \";\"], {raw: {value: Object.freeze([\"\", \" = m.\", \";\"])}})),\n      $__8 = Object.freeze(Object.defineProperties([\"$__export(\", \", m.\", \");\"], {raw: {value: Object.freeze([\"$__export(\", \", m.\", \");\"])}})),\n      $__9 = Object.freeze(Object.defineProperties([\"\", \" = m;\"], {raw: {value: Object.freeze([\"\", \" = m;\"])}})),\n      $__10 = Object.freeze(Object.defineProperties([\"\\n          Object.keys(m).forEach(function(p) {\\n            $__export(p, m[p]);\\n          });\\n        \"], {raw: {value: Object.freeze([\"\\n          Object.keys(m).forEach(function(p) {\\n            $__export(p, m[p]);\\n          });\\n        \"])}})),\n      $__11 = Object.freeze(Object.defineProperties([\"function(m) {\\n          \", \"\\n        }\"], {raw: {value: Object.freeze([\"function(m) {\\n          \", \"\\n        }\"])}})),\n      $__12 = Object.freeze(Object.defineProperties([\"function(m) {}\"], {raw: {value: Object.freeze([\"function(m) {}\"])}})),\n      $__13 = Object.freeze(Object.defineProperties([\"\\n        $__export(\", \", \", \")\\n      \"], {raw: {value: Object.freeze([\"\\n        $__export(\", \", \", \")\\n      \"])}})),\n      $__14 = Object.freeze(Object.defineProperties([\"return {\\n      setters: \", \",\\n      execute: \", \"\\n    }\"], {raw: {value: Object.freeze([\"return {\\n      setters: \", \",\\n      execute: \", \"\\n    }\"])}})),\n      $__15 = Object.freeze(Object.defineProperties([\"$__export(\", \", \", \")\"], {raw: {value: Object.freeze([\"$__export(\", \", \", \")\"])}})),\n      $__16 = Object.freeze(Object.defineProperties([\"$__export(\", \", \", \")\"], {raw: {value: Object.freeze([\"$__export(\", \", \", \")\"])}})),\n      $__17 = Object.freeze(Object.defineProperties([\"var \", \" = $__export(\", \", \", \");\"], {raw: {value: Object.freeze([\"var \", \" = $__export(\", \", \", \");\"])}})),\n      $__18 = Object.freeze(Object.defineProperties([\"var \", \";\"], {raw: {value: Object.freeze([\"var \", \";\"])}})),\n      $__19 = Object.freeze(Object.defineProperties([\"$__export('default', \", \");\"], {raw: {value: Object.freeze([\"$__export('default', \", \");\"])}})),\n      $__20 = Object.freeze(Object.defineProperties([\"$__export(\", \", \", \");\"], {raw: {value: Object.freeze([\"$__export(\", \", \", \");\"])}})),\n      $__21 = Object.freeze(Object.defineProperties([\"var \", \";\"], {raw: {value: Object.freeze([\"var \", \";\"])}}));\n  var $__22 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__22.AnonBlock,\n      ArrayLiteralExpression = $__22.ArrayLiteralExpression,\n      ClassExpression = $__22.ClassExpression,\n      CommaExpression = $__22.CommaExpression,\n      ExpressionStatement = $__22.ExpressionStatement;\n  var $__23 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      CLASS_DECLARATION = $__23.CLASS_DECLARATION,\n      FUNCTION_DECLARATION = $__23.FUNCTION_DECLARATION,\n      IDENTIFIER_EXPRESSION = $__23.IDENTIFIER_EXPRESSION,\n      IMPORT_SPECIFIER_SET = $__23.IMPORT_SPECIFIER_SET;\n  var ScopeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ScopeTransformer\").ScopeTransformer;\n  var $__25 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      id = $__25.createIdentifierExpression,\n      createIdentifierToken = $__25.createIdentifierToken,\n      createVariableStatement = $__25.createVariableStatement,\n      createVariableDeclaration = $__25.createVariableDeclaration,\n      createVariableDeclarationList = $__25.createVariableDeclarationList;\n  var ModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\").ModuleTransformer;\n  var $__27 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      MINUS_MINUS = $__27.MINUS_MINUS,\n      PLUS_PLUS = $__27.PLUS_PLUS,\n      VAR = $__27.VAR;\n  var $__28 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__28.parseExpression,\n      parseStatement = $__28.parseStatement,\n      parseStatements = $__28.parseStatements;\n  var HoistVariablesTransformer = System.get(\"traceur@0.0.74/src/codegeneration/HoistVariablesTransformer\").default;\n  var $__30 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createFunctionExpression = $__30.createFunctionExpression,\n      createEmptyParameterList = $__30.createEmptyParameterList,\n      createFunctionBody = $__30.createFunctionBody;\n  var DeclarationExtractionTransformer = function DeclarationExtractionTransformer() {\n    $traceurRuntime.superConstructor($DeclarationExtractionTransformer).call(this);\n    this.declarations_ = [];\n  };\n  var $DeclarationExtractionTransformer = DeclarationExtractionTransformer;\n  ($traceurRuntime.createClass)(DeclarationExtractionTransformer, {\n    getDeclarationStatements: function() {\n      return $traceurRuntime.spread([this.getVariableStatement()], this.declarations_);\n    },\n    addDeclaration: function(tree) {\n      this.declarations_.push(tree);\n    },\n    transformFunctionDeclaration: function(tree) {\n      this.addDeclaration(tree);\n      return new AnonBlock(null, []);\n    },\n    transformClassDeclaration: function(tree) {\n      this.addVariable(tree.name.identifierToken.value);\n      tree = new ClassExpression(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations);\n      return parseStatement($__0, tree.name.identifierToken, tree);\n    }\n  }, {}, HoistVariablesTransformer);\n  var InsertBindingAssignmentTransformer = function InsertBindingAssignmentTransformer(exportName, bindingName) {\n    $traceurRuntime.superConstructor($InsertBindingAssignmentTransformer).call(this, bindingName);\n    this.bindingName_ = bindingName;\n    this.exportName_ = exportName;\n  };\n  var $InsertBindingAssignmentTransformer = InsertBindingAssignmentTransformer;\n  ($traceurRuntime.createClass)(InsertBindingAssignmentTransformer, {\n    matchesBindingName_: function(binding) {\n      return binding.type === IDENTIFIER_EXPRESSION && binding.identifierToken.value == this.bindingName_;\n    },\n    transformUnaryExpression: function(tree) {\n      if (!this.matchesBindingName_(tree.operand))\n        return $traceurRuntime.superGet(this, $InsertBindingAssignmentTransformer.prototype, \"transformUnaryExpression\").call(this, tree);\n      var operatorType = tree.operator.type;\n      if (operatorType !== PLUS_PLUS && operatorType !== MINUS_MINUS)\n        return $traceurRuntime.superGet(this, $InsertBindingAssignmentTransformer.prototype, \"transformUnaryExpression\").call(this, tree);\n      var operand = this.transformAny(tree.operand);\n      if (operand !== tree.operand)\n        tree = new UnaryExpression(tree.location, tree.operator, operand);\n      return parseExpression($__1, this.exportName_, tree);\n    },\n    transformPostfixExpression: function(tree) {\n      tree = $traceurRuntime.superGet(this, $InsertBindingAssignmentTransformer.prototype, \"transformPostfixExpression\").call(this, tree);\n      if (!this.matchesBindingName_(tree.operand))\n        return tree;\n      switch (tree.operator.type) {\n        case PLUS_PLUS:\n          return parseExpression($__2, this.exportName_, tree.operand, tree);\n        case MINUS_MINUS:\n          return parseExpression($__3, this.exportName_, tree.operand, tree);\n      }\n      return tree;\n    },\n    transformBinaryExpression: function(tree) {\n      tree = $traceurRuntime.superGet(this, $InsertBindingAssignmentTransformer.prototype, \"transformBinaryExpression\").call(this, tree);\n      if (!tree.operator.isAssignmentOperator())\n        return tree;\n      if (!this.matchesBindingName_(tree.left))\n        return tree;\n      return parseExpression($__4, this.exportName_, tree);\n    }\n  }, {}, ScopeTransformer);\n  var InstantiateModuleTransformer = function InstantiateModuleTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($InstantiateModuleTransformer).call(this, identifierGenerator);\n    this.inExport_ = false;\n    this.curDepIndex_ = null;\n    this.dependencies = [];\n    this.externalExportBindings = [];\n    this.importBindings = [];\n    this.localExportBindings = [];\n    this.functionDeclarations = [];\n    this.moduleBindings = [];\n    this.exportStarBindings = [];\n  };\n  var $InstantiateModuleTransformer = InstantiateModuleTransformer;\n  ($traceurRuntime.createClass)(InstantiateModuleTransformer, {\n    wrapModule: function(statements) {\n      if (this.moduleName) {\n        return parseStatements($__5, this.moduleName, this.dependencies, statements);\n      } else {\n        return parseStatements($__6, this.dependencies, statements);\n      }\n    },\n    appendExportStatement: function(statements) {\n      var $__31 = this;\n      var declarationExtractionTransformer = new DeclarationExtractionTransformer();\n      this.localExportBindings.forEach((function(binding) {\n        statements = new InsertBindingAssignmentTransformer(binding.exportName, binding.localName).transformList(statements);\n      }));\n      var executionStatements = statements.map((function(statement) {\n        return declarationExtractionTransformer.transformAny(statement);\n      }));\n      var executionFunction = createFunctionExpression(createEmptyParameterList(), createFunctionBody(executionStatements));\n      var declarationStatements = declarationExtractionTransformer.getDeclarationStatements();\n      var setterFunctions = this.dependencies.map((function(dep, index) {\n        var importBindings = $__31.importBindings[index];\n        var externalExportBindings = $__31.externalExportBindings[index];\n        var exportStarBinding = $__31.exportStarBindings[index];\n        var moduleBinding = $__31.moduleBindings[index];\n        var setterStatements = [];\n        if (importBindings) {\n          importBindings.forEach((function(binding) {\n            setterStatements.push(parseStatement($__7, createIdentifierToken(binding.variableName), binding.exportName));\n          }));\n        }\n        if (externalExportBindings) {\n          externalExportBindings.forEach((function(binding) {\n            setterStatements.push(parseStatement($__8, binding.exportName, binding.importName));\n          }));\n        }\n        if (moduleBinding) {\n          setterStatements.push(parseStatement($__9, id(moduleBinding)));\n        }\n        if (exportStarBinding) {\n          setterStatements = setterStatements.concat(parseStatements($__10));\n        }\n        if (setterStatements.length) {\n          return parseExpression($__11, setterStatements);\n        } else {\n          return parseExpression($__12);\n        }\n      }));\n      declarationStatements = declarationStatements.concat(this.functionDeclarations.map((function(binding) {\n        return parseStatement($__13, binding.exportName, createIdentifierToken(binding.functionName));\n      })));\n      declarationStatements.push(parseStatement($__14, new ArrayLiteralExpression(null, setterFunctions), executionFunction));\n      return declarationStatements;\n    },\n    addLocalExportBinding: function(exportName) {\n      var localName = arguments[1] !== (void 0) ? arguments[1] : exportName;\n      this.localExportBindings.push({\n        exportName: exportName,\n        localName: localName\n      });\n    },\n    addImportBinding: function(depIndex, variableName, exportName) {\n      this.importBindings[depIndex] = this.importBindings[depIndex] || [];\n      this.importBindings[depIndex].push({\n        variableName: variableName,\n        exportName: exportName\n      });\n    },\n    addExternalExportBinding: function(depIndex, exportName, importName) {\n      this.externalExportBindings[depIndex] = this.externalExportBindings[depIndex] || [];\n      this.externalExportBindings[depIndex].push({\n        exportName: exportName,\n        importName: importName\n      });\n    },\n    addExportStarBinding: function(depIndex) {\n      this.exportStarBindings[depIndex] = true;\n    },\n    addModuleBinding: function(depIndex, variableName) {\n      this.moduleBindings[depIndex] = variableName;\n    },\n    addExportFunction: function(exportName) {\n      var functionName = arguments[1] !== (void 0) ? arguments[1] : exportName;\n      this.functionDeclarations.push({\n        exportName: exportName,\n        functionName: functionName\n      });\n    },\n    getOrCreateDependencyIndex: function(moduleSpecifier) {\n      var name = moduleSpecifier.token.processedValue;\n      var depIndex = this.dependencies.indexOf(name);\n      if (depIndex == -1) {\n        depIndex = this.dependencies.length;\n        this.dependencies.push(name);\n      }\n      return depIndex;\n    },\n    transformExportDeclaration: function(tree) {\n      this.inExport_ = true;\n      if (tree.declaration.moduleSpecifier) {\n        this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.declaration.moduleSpecifier);\n      } else {\n        this.curDepIndex_ = null;\n      }\n      var transformed = this.transformAny(tree.declaration);\n      this.inExport_ = false;\n      return transformed;\n    },\n    transformVariableStatement: function(tree) {\n      var $__31 = this;\n      if (!this.inExport_)\n        return $traceurRuntime.superGet(this, $InstantiateModuleTransformer.prototype, \"transformVariableStatement\").call(this, tree);\n      this.inExport_ = false;\n      return createVariableStatement(createVariableDeclarationList(VAR, tree.declarations.declarations.map((function(declaration) {\n        var varName = declaration.lvalue.identifierToken.value;\n        var initializer;\n        $__31.addLocalExportBinding(varName);\n        if (declaration.initializer)\n          initializer = parseExpression($__15, varName, $__31.transformAny(declaration.initializer));\n        else\n          initializer = parseExpression($__16, varName, id(varName));\n        return createVariableDeclaration(varName, initializer);\n      }))));\n    },\n    transformExportStar: function(tree) {\n      this.inExport_ = false;\n      this.addExportStarBinding(this.curDepIndex_);\n      return new AnonBlock(null, []);\n    },\n    transformClassDeclaration: function(tree) {\n      if (!this.inExport_)\n        return $traceurRuntime.superGet(this, $InstantiateModuleTransformer.prototype, \"transformClassDeclaration\").call(this, tree);\n      this.inExport_ = false;\n      var name = this.transformAny(tree.name);\n      var superClass = this.transformAny(tree.superClass);\n      var elements = this.transformList(tree.elements);\n      var annotations = this.transformList(tree.annotations);\n      var varName = name.identifierToken.value;\n      var classExpression = new ClassExpression(tree.location, name, superClass, elements, annotations);\n      this.addLocalExportBinding(varName);\n      return parseStatement($__17, varName, varName, classExpression);\n    },\n    transformFunctionDeclaration: function(tree) {\n      if (this.inExport_) {\n        var name = tree.name.getStringValue();\n        this.addLocalExportBinding(name);\n        this.addExportFunction(name);\n        this.inExport_ = false;\n      }\n      return $traceurRuntime.superGet(this, $InstantiateModuleTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n    },\n    transformNamedExport: function(tree) {\n      this.transformAny(tree.moduleSpecifier);\n      var specifierSet = this.transformAny(tree.specifierSet);\n      if (this.curDepIndex_ === null) {\n        return specifierSet;\n      } else {\n        return new AnonBlock(null, []);\n      }\n    },\n    transformImportDeclaration: function(tree) {\n      this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.moduleSpecifier);\n      var initializer = this.transformAny(tree.moduleSpecifier);\n      if (!tree.importClause)\n        return new AnonBlock(null, []);\n      var importClause = this.transformAny(tree.importClause);\n      if (tree.importClause.type === IMPORT_SPECIFIER_SET) {\n        return importClause;\n      } else {\n        var bindingName = tree.importClause.binding.getStringValue();\n        this.addImportBinding(this.curDepIndex_, bindingName, 'default');\n        return parseStatement($__18, bindingName);\n      }\n      return new AnonBlock(null, []);\n    },\n    transformImportSpecifierSet: function(tree) {\n      return createVariableStatement(createVariableDeclarationList(VAR, this.transformList(tree.specifiers)));\n    },\n    transformExportDefault: function(tree) {\n      this.inExport_ = false;\n      var expression = this.transformAny(tree.expression);\n      this.addLocalExportBinding('default');\n      if (expression.type === CLASS_DECLARATION) {\n        expression = new ClassExpression(expression.location, expression.name, expression.superClass, expression.elements, expression.annotations);\n      }\n      if (expression.type === FUNCTION_DECLARATION) {\n        this.addExportFunction('default', expression.name.identifierToken.value);\n        return expression;\n      } else {\n        return parseStatement($__19, expression);\n      }\n    },\n    transformExportSpecifier: function(tree) {\n      var exportName;\n      var bindingName;\n      if (tree.rhs) {\n        exportName = tree.rhs.value;\n        bindingName = tree.lhs.value;\n      } else {\n        exportName = tree.lhs.value;\n        bindingName = exportName;\n      }\n      if (this.curDepIndex_ !== null) {\n        this.addExternalExportBinding(this.curDepIndex_, exportName, bindingName);\n      } else {\n        this.addLocalExportBinding(exportName, bindingName);\n        return parseExpression($__20, exportName, id(bindingName));\n      }\n    },\n    transformExportSpecifierSet: function(tree) {\n      var specifiers = this.transformList(tree.specifiers);\n      return new ExpressionStatement(tree.location, new CommaExpression(tree.location, specifiers.filter((function(specifier) {\n        return specifier;\n      }))));\n    },\n    transformImportSpecifier: function(tree) {\n      var localBinding = tree.binding.binding;\n      var localBindingToken = localBinding.identifierToken;\n      var importName = (tree.name || localBindingToken).value;\n      this.addImportBinding(this.curDepIndex_, localBindingToken.value, importName);\n      return createVariableDeclaration(localBinding);\n    },\n    transformModuleDeclaration: function(tree) {\n      this.transformAny(tree.expression);\n      var bindingIdentifier = tree.binding.binding;\n      var name = bindingIdentifier.getStringValue();\n      this.addModuleBinding(this.curDepIndex_, name);\n      return parseStatement($__21, bindingIdentifier);\n    },\n    transformModuleSpecifier: function(tree) {\n      this.curDepIndex_ = this.getOrCreateDependencyIndex(tree);\n      return tree;\n    }\n  }, {}, ModuleTransformer);\n  return {get InstantiateModuleTransformer() {\n      return InstantiateModuleTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/MemberVariableTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/MemberVariableTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/MemberVariableTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"get \", \"():\", \"\\n      { return this.\", \"; }\"], {raw: {value: Object.freeze([\"get \", \"():\", \"\\n      { return this.\", \"; }\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"set \", \"(value:\", \")\\n      { this.\", \" = value; }\"], {raw: {value: Object.freeze([\"set \", \"(value:\", \")\\n      { this.\", \" = value; }\"])}}));\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      AnonBlock = $__2.AnonBlock,\n      ClassDeclaration = $__2.ClassDeclaration,\n      ClassExpression = $__2.ClassExpression;\n  var PROPERTY_VARIABLE_DECLARATION = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\").PROPERTY_VARIABLE_DECLARATION;\n  var parsePropertyDefinition = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parsePropertyDefinition;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var MemberVariableTransformer = function MemberVariableTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($MemberVariableTransformer).call(this);\n    this.identifierGenerator_ = identifierGenerator;\n  };\n  var $MemberVariableTransformer = MemberVariableTransformer;\n  ($traceurRuntime.createClass)(MemberVariableTransformer, {\n    transformPropertyVariableDeclaration: function(tree) {\n      var identifier = this.identifierGenerator_.generateUniqueIdentifier();\n      var getter = this.createGetAccessor_(identifier, tree);\n      var setter = this.createSetAccessor_(identifier, tree);\n      return new AnonBlock(tree.location, [getter, setter]);\n    },\n    createGetAccessor_: function(identifier, tree) {\n      var name = tree.name.literalToken;\n      var type = tree.typeAnnotation;\n      var def = parsePropertyDefinition($__0, name, type, identifier);\n      def.isStatic = tree.isStatic;\n      return def;\n    },\n    createSetAccessor_: function(identifier, tree) {\n      var name = tree.name.literalToken;\n      var type = tree.typeAnnotation;\n      var def = parsePropertyDefinition($__1, name, type, identifier);\n      def.isStatic = tree.isStatic;\n      return def;\n    }\n  }, {}, ParseTreeTransformer);\n  return {get MemberVariableTransformer() {\n      return MemberVariableTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BLOCK = $__0.BLOCK,\n      CLASS_DECLARATION = $__0.CLASS_DECLARATION,\n      FUNCTION_DECLARATION = $__0.FUNCTION_DECLARATION,\n      IF_STATEMENT = $__0.IF_STATEMENT,\n      LITERAL_EXPRESSION = $__0.LITERAL_EXPRESSION,\n      POSTFIX_EXPRESSION = $__0.POSTFIX_EXPRESSION,\n      UNARY_EXPRESSION = $__0.UNARY_EXPRESSION;\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      AS = $__2.AS,\n      ASYNC = $__2.ASYNC,\n      AWAIT = $__2.AWAIT,\n      FROM = $__2.FROM,\n      GET = $__2.GET,\n      OF = $__2.OF,\n      SET = $__2.SET;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/Scanner\"),\n      isIdentifierPart = $__3.isIdentifierPart,\n      isWhitespace = $__3.isWhitespace;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      ARROW = $__4.ARROW,\n      AT = $__4.AT,\n      BACK_QUOTE = $__4.BACK_QUOTE,\n      BREAK = $__4.BREAK,\n      CASE = $__4.CASE,\n      CATCH = $__4.CATCH,\n      CLASS = $__4.CLASS,\n      CLOSE_ANGLE = $__4.CLOSE_ANGLE,\n      CLOSE_CURLY = $__4.CLOSE_CURLY,\n      CLOSE_PAREN = $__4.CLOSE_PAREN,\n      CLOSE_SQUARE = $__4.CLOSE_SQUARE,\n      COLON = $__4.COLON,\n      COMMA = $__4.COMMA,\n      CONTINUE = $__4.CONTINUE,\n      DEBUGGER = $__4.DEBUGGER,\n      DEFAULT = $__4.DEFAULT,\n      DO = $__4.DO,\n      DOT_DOT_DOT = $__4.DOT_DOT_DOT,\n      ELSE = $__4.ELSE,\n      EQUAL = $__4.EQUAL,\n      EXPORT = $__4.EXPORT,\n      EXTENDS = $__4.EXTENDS,\n      FINALLY = $__4.FINALLY,\n      FOR = $__4.FOR,\n      FUNCTION = $__4.FUNCTION,\n      IF = $__4.IF,\n      IMPORT = $__4.IMPORT,\n      IN = $__4.IN,\n      MINUS = $__4.MINUS,\n      MINUS_MINUS = $__4.MINUS_MINUS,\n      NEW = $__4.NEW,\n      NUMBER = $__4.NUMBER,\n      OPEN_ANGLE = $__4.OPEN_ANGLE,\n      OPEN_CURLY = $__4.OPEN_CURLY,\n      OPEN_PAREN = $__4.OPEN_PAREN,\n      OPEN_SQUARE = $__4.OPEN_SQUARE,\n      PERIOD = $__4.PERIOD,\n      PLUS = $__4.PLUS,\n      PLUS_PLUS = $__4.PLUS_PLUS,\n      QUESTION = $__4.QUESTION,\n      RETURN = $__4.RETURN,\n      SEMI_COLON = $__4.SEMI_COLON,\n      STAR = $__4.STAR,\n      STATIC = $__4.STATIC,\n      SUPER = $__4.SUPER,\n      SWITCH = $__4.SWITCH,\n      THIS = $__4.THIS,\n      THROW = $__4.THROW,\n      TRY = $__4.TRY,\n      WHILE = $__4.WHILE,\n      WITH = $__4.WITH,\n      YIELD = $__4.YIELD;\n  var NEW_LINE = '\\n';\n  var LINE_LENGTH = 80;\n  var ParseTreeWriter = function ParseTreeWriter() {\n    var $__7,\n        $__8,\n        $__9;\n    var $__6 = arguments[0] !== (void 0) ? arguments[0] : {},\n        highlighted = ($__7 = $__6.highlighted) === void 0 ? false : $__7,\n        showLineNumbers = ($__8 = $__6.showLineNumbers) === void 0 ? false : $__8,\n        prettyPrint = ($__9 = $__6.prettyPrint) === void 0 ? true : $__9;\n    $traceurRuntime.superConstructor($ParseTreeWriter).call(this);\n    this.highlighted_ = highlighted;\n    this.showLineNumbers_ = showLineNumbers;\n    this.prettyPrint_ = prettyPrint;\n    this.result_ = '';\n    this.currentLine_ = '';\n    this.currentLineComment_ = null;\n    this.indentDepth_ = 0;\n    this.currentParameterTypeAnnotation_ = null;\n  };\n  var $ParseTreeWriter = ParseTreeWriter;\n  ($traceurRuntime.createClass)(ParseTreeWriter, {\n    toString: function() {\n      if (this.currentLine_.length > 0) {\n        this.result_ += this.currentLine_;\n        this.currentLine_ = '';\n      }\n      return this.result_;\n    },\n    visitAny: function(tree) {\n      if (!tree) {\n        return;\n      }\n      if (tree === this.highlighted_) {\n        this.write_('\\x1B[41m');\n      }\n      if (tree.location !== null && tree.location.start !== null && this.showLineNumbers_) {\n        var line = tree.location.start.line + 1;\n        var column = tree.location.start.column;\n        this.currentLineComment_ = (\"Line: \" + line + \".\" + column);\n      }\n      $traceurRuntime.superGet(this, $ParseTreeWriter.prototype, \"visitAny\").call(this, tree);\n      if (tree === this.highlighted_) {\n        this.write_('\\x1B[0m');\n      }\n    },\n    visitAnnotation: function(tree) {\n      this.write_(AT);\n      this.visitAny(tree.name);\n      if (tree.args !== null) {\n        this.write_(OPEN_PAREN);\n        this.writeList_(tree.args, COMMA, false);\n        this.write_(CLOSE_PAREN);\n      }\n    },\n    visitArgumentList: function(tree) {\n      this.write_(OPEN_PAREN);\n      this.writeList_(tree.args, COMMA, false);\n      this.write_(CLOSE_PAREN);\n    },\n    visitArrayComprehension: function(tree) {\n      this.write_(OPEN_SQUARE);\n      this.visitList(tree.comprehensionList);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_SQUARE);\n    },\n    visitArrayLiteralExpression: function(tree) {\n      this.write_(OPEN_SQUARE);\n      this.writeList_(tree.elements, COMMA, false);\n      this.write_(CLOSE_SQUARE);\n    },\n    visitArrayPattern: function(tree) {\n      this.write_(OPEN_SQUARE);\n      this.writeList_(tree.elements, COMMA, false);\n      this.write_(CLOSE_SQUARE);\n    },\n    visitArrowFunctionExpression: function(tree) {\n      if (tree.functionKind) {\n        this.write_(tree.functionKind);\n        this.writeSpace_();\n      }\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.parameterList);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.write_(ARROW);\n      this.writeSpace_();\n      this.visitAny(tree.body);\n    },\n    visitAssignmentElement: function(tree) {\n      this.visitAny(tree.assignment);\n      if (tree.initializer) {\n        this.writeSpace_();\n        this.write_(EQUAL);\n        this.writeSpace_();\n        this.visitAny(tree.initializer);\n      }\n    },\n    visitAwaitExpression: function(tree) {\n      this.write_(AWAIT);\n      this.writeSpace_();\n      this.visitAny(tree.expression);\n    },\n    visitBinaryExpression: function(tree) {\n      var left = tree.left;\n      this.visitAny(left);\n      var operator = tree.operator;\n      if (left.type === POSTFIX_EXPRESSION && requiresSpaceBetween(left.operator.type, operator.type)) {\n        this.writeRequiredSpace_();\n      } else {\n        this.writeSpace_();\n      }\n      this.write_(operator);\n      var right = tree.right;\n      if (right.type === UNARY_EXPRESSION && requiresSpaceBetween(operator.type, right.operator.type)) {\n        this.writeRequiredSpace_();\n      } else {\n        this.writeSpace_();\n      }\n      this.visitAny(right);\n    },\n    visitBindingElement: function(tree) {\n      var typeAnnotation = this.currentParameterTypeAnnotation_;\n      this.currentParameterTypeAnnotation_ = null;\n      this.visitAny(tree.binding);\n      this.writeTypeAnnotation_(typeAnnotation);\n      if (tree.initializer) {\n        this.writeSpace_();\n        this.write_(EQUAL);\n        this.writeSpace_();\n        this.visitAny(tree.initializer);\n      }\n    },\n    visitBindingIdentifier: function(tree) {\n      this.write_(tree.identifierToken);\n    },\n    visitBlock: function(tree) {\n      this.write_(OPEN_CURLY);\n      this.writelnList_(tree.statements);\n      this.write_(CLOSE_CURLY);\n    },\n    visitBreakStatement: function(tree) {\n      this.write_(BREAK);\n      if (tree.name !== null) {\n        this.writeSpace_();\n        this.write_(tree.name);\n      }\n      this.write_(SEMI_COLON);\n    },\n    visitCallExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.visitAny(tree.args);\n    },\n    visitCaseClause: function(tree) {\n      this.write_(CASE);\n      this.writeSpace_();\n      this.visitAny(tree.expression);\n      this.write_(COLON);\n      this.indentDepth_++;\n      this.writelnList_(tree.statements);\n      this.indentDepth_--;\n    },\n    visitCatch: function(tree) {\n      this.write_(CATCH);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.binding);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.visitAny(tree.catchBody);\n    },\n    visitClassShared_: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      this.write_(CLASS);\n      this.writeSpace_();\n      this.visitAny(tree.name);\n      if (tree.superClass !== null) {\n        this.writeSpace_();\n        this.write_(EXTENDS);\n        this.writeSpace_();\n        this.visitAny(tree.superClass);\n      }\n      this.writeSpace_();\n      this.write_(OPEN_CURLY);\n      this.writelnList_(tree.elements);\n      this.write_(CLOSE_CURLY);\n    },\n    visitClassDeclaration: function(tree) {\n      this.visitClassShared_(tree);\n    },\n    visitClassExpression: function(tree) {\n      this.visitClassShared_(tree);\n    },\n    visitCommaExpression: function(tree) {\n      this.writeList_(tree.expressions, COMMA, false);\n    },\n    visitComprehensionFor: function(tree) {\n      this.write_(FOR);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.left);\n      this.writeSpace_();\n      this.write_(OF);\n      this.writeSpace_();\n      this.visitAny(tree.iterator);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n    },\n    visitComprehensionIf: function(tree) {\n      this.write_(IF);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n    },\n    visitComputedPropertyName: function(tree) {\n      this.write_(OPEN_SQUARE);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_SQUARE);\n    },\n    visitConditionalExpression: function(tree) {\n      this.visitAny(tree.condition);\n      this.writeSpace_();\n      this.write_(QUESTION);\n      this.writeSpace_();\n      this.visitAny(tree.left);\n      this.writeSpace_();\n      this.write_(COLON);\n      this.writeSpace_();\n      this.visitAny(tree.right);\n    },\n    visitContinueStatement: function(tree) {\n      this.write_(CONTINUE);\n      if (tree.name !== null) {\n        this.writeSpace_();\n        this.write_(tree.name);\n      }\n      this.write_(SEMI_COLON);\n    },\n    visitCoverInitializedName: function(tree) {\n      this.write_(tree.name);\n      this.writeSpace_();\n      this.write_(tree.equalToken);\n      this.writeSpace_();\n      this.visitAny(tree.initializer);\n    },\n    visitDebuggerStatement: function(tree) {\n      this.write_(DEBUGGER);\n      this.write_(SEMI_COLON);\n    },\n    visitDefaultClause: function(tree) {\n      this.write_(DEFAULT);\n      this.write_(COLON);\n      this.indentDepth_++;\n      this.writelnList_(tree.statements);\n      this.indentDepth_--;\n    },\n    visitDoWhileStatement: function(tree) {\n      this.write_(DO);\n      this.visitAnyBlockOrIndent_(tree.body);\n      this.writeSpace_();\n      this.write_(WHILE);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.condition);\n      this.write_(CLOSE_PAREN);\n      this.write_(SEMI_COLON);\n    },\n    visitEmptyStatement: function(tree) {\n      this.write_(SEMI_COLON);\n    },\n    visitExportDeclaration: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      this.write_(EXPORT);\n      this.writeSpace_();\n      this.visitAny(tree.declaration);\n    },\n    visitExportDefault: function(tree) {\n      this.write_(DEFAULT);\n      this.writeSpace_();\n      this.visitAny(tree.expression);\n      switch (tree.expression.type) {\n        case CLASS_DECLARATION:\n        case FUNCTION_DECLARATION:\n          break;\n        default:\n          this.write_(SEMI_COLON);\n      }\n    },\n    visitNamedExport: function(tree) {\n      this.visitAny(tree.specifierSet);\n      if (tree.moduleSpecifier) {\n        this.writeSpace_();\n        this.write_(FROM);\n        this.writeSpace_();\n        this.visitAny(tree.moduleSpecifier);\n      }\n      this.write_(SEMI_COLON);\n    },\n    visitExportSpecifier: function(tree) {\n      this.write_(tree.lhs);\n      if (tree.rhs) {\n        this.writeSpace_();\n        this.write_(AS);\n        this.writeSpace_();\n        this.write_(tree.rhs);\n      }\n    },\n    visitExportSpecifierSet: function(tree) {\n      this.write_(OPEN_CURLY);\n      this.writeList_(tree.specifiers, COMMA, false);\n      this.write_(CLOSE_CURLY);\n    },\n    visitExportStar: function(tree) {\n      this.write_(STAR);\n    },\n    visitExpressionStatement: function(tree) {\n      this.visitAny(tree.expression);\n      this.write_(SEMI_COLON);\n    },\n    visitFinally: function(tree) {\n      this.write_(FINALLY);\n      this.writeSpace_();\n      this.visitAny(tree.block);\n    },\n    visitForOfStatement: function(tree) {\n      this.write_(FOR);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.initializer);\n      this.writeSpace_();\n      this.write_(OF);\n      this.writeSpace_();\n      this.visitAny(tree.collection);\n      this.write_(CLOSE_PAREN);\n      this.visitAnyBlockOrIndent_(tree.body);\n    },\n    visitForInStatement: function(tree) {\n      this.write_(FOR);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.initializer);\n      this.writeSpace_();\n      this.write_(IN);\n      this.writeSpace_();\n      this.visitAny(tree.collection);\n      this.write_(CLOSE_PAREN);\n      this.visitAnyBlockOrIndent_(tree.body);\n    },\n    visitForStatement: function(tree) {\n      this.write_(FOR);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.initializer);\n      this.write_(SEMI_COLON);\n      this.writeSpace_();\n      this.visitAny(tree.condition);\n      this.write_(SEMI_COLON);\n      this.writeSpace_();\n      this.visitAny(tree.increment);\n      this.write_(CLOSE_PAREN);\n      this.visitAnyBlockOrIndent_(tree.body);\n    },\n    visitFormalParameterList: function(tree) {\n      var first = true;\n      for (var i = 0; i < tree.parameters.length; i++) {\n        var parameter = tree.parameters[i];\n        if (first) {\n          first = false;\n        } else {\n          this.write_(COMMA);\n          this.writeSpace_();\n        }\n        this.visitAny(parameter);\n      }\n    },\n    visitFormalParameter: function(tree) {\n      this.writeAnnotations_(tree.annotations, false);\n      this.currentParameterTypeAnnotation_ = tree.typeAnnotation;\n      this.visitAny(tree.parameter);\n      this.currentParameterTypeAnnotation_ = null;\n    },\n    visitFunctionBody: function(tree) {\n      this.write_(OPEN_CURLY);\n      this.writelnList_(tree.statements);\n      this.write_(CLOSE_CURLY);\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitFunctionExpression: function(tree) {\n      this.visitFunction_(tree);\n    },\n    visitFunction_: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      if (tree.isAsyncFunction())\n        this.write_(tree.functionKind);\n      this.write_(FUNCTION);\n      if (tree.isGenerator())\n        this.write_(tree.functionKind);\n      if (tree.name) {\n        this.writeSpace_();\n        this.visitAny(tree.name);\n      }\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.parameterList);\n      this.write_(CLOSE_PAREN);\n      this.writeTypeAnnotation_(tree.typeAnnotation);\n      this.writeSpace_();\n      this.visitAny(tree.body);\n    },\n    visitGeneratorComprehension: function(tree) {\n      this.write_(OPEN_PAREN);\n      this.visitList(tree.comprehensionList);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_PAREN);\n    },\n    visitGetAccessor: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      if (tree.isStatic) {\n        this.write_(STATIC);\n        this.writeSpace_();\n      }\n      this.write_(GET);\n      this.writeSpace_();\n      this.visitAny(tree.name);\n      this.write_(OPEN_PAREN);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.writeTypeAnnotation_(tree.typeAnnotation);\n      this.visitAny(tree.body);\n    },\n    visitIdentifierExpression: function(tree) {\n      this.write_(tree.identifierToken);\n    },\n    visitIfStatement: function(tree) {\n      this.write_(IF);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.condition);\n      this.write_(CLOSE_PAREN);\n      this.visitAnyBlockOrIndent_(tree.ifClause);\n      if (tree.elseClause) {\n        if (tree.ifClause.type === BLOCK)\n          this.writeSpace_();\n        this.write_(ELSE);\n        if (tree.elseClause.type === IF_STATEMENT) {\n          this.writeSpace_();\n          this.visitAny(tree.elseClause);\n        } else {\n          this.visitAnyBlockOrIndent_(tree.elseClause);\n        }\n      }\n    },\n    visitAnyBlockOrIndent_: function(tree) {\n      if (tree.type === BLOCK) {\n        this.writeSpace_();\n        this.visitAny(tree);\n      } else {\n        this.visitAnyIndented_(tree);\n      }\n    },\n    visitAnyIndented_: function(tree) {\n      var indent = arguments[1] !== (void 0) ? arguments[1] : 1;\n      if (this.prettyPrint_) {\n        this.indentDepth_ += indent;\n        this.writeln_();\n      }\n      this.visitAny(tree);\n      if (this.prettyPrint_) {\n        this.indentDepth_ -= indent;\n        this.writeln_();\n      }\n    },\n    visitImportDeclaration: function(tree) {\n      this.write_(IMPORT);\n      this.writeSpace_();\n      if (tree.importClause) {\n        this.visitAny(tree.importClause);\n        this.writeSpace_();\n        this.write_(FROM);\n        this.writeSpace_();\n      }\n      this.visitAny(tree.moduleSpecifier);\n      this.write_(SEMI_COLON);\n    },\n    visitImportSpecifier: function(tree) {\n      if (tree.name) {\n        this.write_(tree.name);\n        this.writeSpace_();\n        this.write_(AS);\n        this.writeSpace_();\n      }\n      this.visitAny(tree.binding);\n    },\n    visitImportSpecifierSet: function(tree) {\n      if (tree.specifiers.type == STAR) {\n        this.write_(STAR);\n      } else {\n        this.write_(OPEN_CURLY);\n        this.writelnList_(tree.specifiers, COMMA);\n        this.write_(CLOSE_CURLY);\n      }\n    },\n    visitLabelledStatement: function(tree) {\n      this.write_(tree.name);\n      this.write_(COLON);\n      this.writeSpace_();\n      this.visitAny(tree.statement);\n    },\n    visitLiteralExpression: function(tree) {\n      this.write_(tree.literalToken);\n    },\n    visitLiteralPropertyName: function(tree) {\n      this.write_(tree.literalToken);\n    },\n    visitMemberExpression: function(tree) {\n      this.visitAny(tree.operand);\n      if (tree.operand.type === LITERAL_EXPRESSION && tree.operand.literalToken.type === NUMBER) {\n        if (!/\\.|e|E/.test(tree.operand.literalToken.value))\n          this.writeRequiredSpace_();\n      }\n      this.write_(PERIOD);\n      this.write_(tree.memberName);\n    },\n    visitMemberLookupExpression: function(tree) {\n      this.visitAny(tree.operand);\n      this.write_(OPEN_SQUARE);\n      this.visitAny(tree.memberExpression);\n      this.write_(CLOSE_SQUARE);\n    },\n    visitSyntaxErrorTree: function(tree) {\n      this.write_('(function() {' + (\"throw SyntaxError(\" + JSON.stringify(tree.message) + \");\") + '})()');\n    },\n    visitModule: function(tree) {\n      this.writelnList_(tree.scriptItemList, null);\n    },\n    visitModuleSpecifier: function(tree) {\n      this.write_(tree.token);\n    },\n    visitModuleDeclaration: function(tree) {\n      this.write_(IMPORT);\n      this.writeSpace_();\n      this.write_(STAR);\n      this.writeSpace_();\n      this.write_(AS);\n      this.visitAny(tree.binding);\n      this.writeSpace_();\n      this.write_(FROM);\n      this.writeSpace_();\n      this.visitAny(tree.expression);\n      this.write_(SEMI_COLON);\n    },\n    visitNewExpression: function(tree) {\n      this.write_(NEW);\n      this.writeSpace_();\n      this.visitAny(tree.operand);\n      this.visitAny(tree.args);\n    },\n    visitObjectLiteralExpression: function(tree) {\n      this.write_(OPEN_CURLY);\n      if (tree.propertyNameAndValues.length > 1)\n        this.writeln_();\n      this.writelnList_(tree.propertyNameAndValues, COMMA);\n      if (tree.propertyNameAndValues.length > 1)\n        this.writeln_();\n      this.write_(CLOSE_CURLY);\n    },\n    visitObjectPattern: function(tree) {\n      this.write_(OPEN_CURLY);\n      this.writelnList_(tree.fields, COMMA);\n      this.write_(CLOSE_CURLY);\n    },\n    visitObjectPatternField: function(tree) {\n      this.visitAny(tree.name);\n      if (tree.element !== null) {\n        this.write_(COLON);\n        this.writeSpace_();\n        this.visitAny(tree.element);\n      }\n    },\n    visitParenExpression: function(tree) {\n      this.write_(OPEN_PAREN);\n      $traceurRuntime.superGet(this, $ParseTreeWriter.prototype, \"visitParenExpression\").call(this, tree);\n      this.write_(CLOSE_PAREN);\n    },\n    visitPostfixExpression: function(tree) {\n      this.visitAny(tree.operand);\n      if (tree.operand.type === POSTFIX_EXPRESSION && tree.operand.operator.type === tree.operator.type) {\n        this.writeRequiredSpace_();\n      }\n      this.write_(tree.operator);\n    },\n    visitPredefinedType: function(tree) {\n      this.write_(tree.typeToken);\n    },\n    visitScript: function(tree) {\n      this.writelnList_(tree.scriptItemList, null);\n    },\n    visitPropertyMethodAssignment: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      if (tree.isStatic) {\n        this.write_(STATIC);\n        this.writeSpace_();\n      }\n      if (tree.isGenerator())\n        this.write_(STAR);\n      if (tree.isAsyncFunction())\n        this.write_(ASYNC);\n      this.visitAny(tree.name);\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.parameterList);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.writeTypeAnnotation_(tree.typeAnnotation);\n      this.visitAny(tree.body);\n    },\n    visitPropertyNameAssignment: function(tree) {\n      this.visitAny(tree.name);\n      this.write_(COLON);\n      this.writeSpace_();\n      this.visitAny(tree.value);\n    },\n    visitPropertyNameShorthand: function(tree) {\n      this.write_(tree.name);\n    },\n    visitPropertyVariableDeclaration: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      if (tree.isStatic) {\n        this.write_(STATIC);\n        this.writeSpace_();\n      }\n      this.visitAny(tree.name);\n      this.writeTypeAnnotation_(tree.typeAnnotation);\n      this.write_(SEMI_COLON);\n    },\n    visitTemplateLiteralExpression: function(tree) {\n      if (tree.operand) {\n        this.visitAny(tree.operand);\n        this.writeSpace_();\n      }\n      this.writeRaw_(BACK_QUOTE);\n      this.visitList(tree.elements);\n      this.writeRaw_(BACK_QUOTE);\n    },\n    visitTemplateLiteralPortion: function(tree) {\n      this.writeRaw_(tree.value);\n    },\n    visitTemplateSubstitution: function(tree) {\n      this.writeRaw_('$');\n      this.writeRaw_(OPEN_CURLY);\n      this.visitAny(tree.expression);\n      this.writeRaw_(CLOSE_CURLY);\n    },\n    visitReturnStatement: function(tree) {\n      this.write_(RETURN);\n      this.writeSpace_(tree.expression);\n      this.visitAny(tree.expression);\n      this.write_(SEMI_COLON);\n    },\n    visitRestParameter: function(tree) {\n      this.write_(DOT_DOT_DOT);\n      this.write_(tree.identifier.identifierToken);\n      this.writeTypeAnnotation_(this.currentParameterTypeAnnotation_);\n    },\n    visitSetAccessor: function(tree) {\n      this.writeAnnotations_(tree.annotations);\n      if (tree.isStatic) {\n        this.write_(STATIC);\n        this.writeSpace_();\n      }\n      this.write_(SET);\n      this.writeSpace_();\n      this.visitAny(tree.name);\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.parameterList);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.visitAny(tree.body);\n    },\n    visitSpreadExpression: function(tree) {\n      this.write_(DOT_DOT_DOT);\n      this.visitAny(tree.expression);\n    },\n    visitSpreadPatternElement: function(tree) {\n      this.write_(DOT_DOT_DOT);\n      this.visitAny(tree.lvalue);\n    },\n    visitStateMachine: function(tree) {\n      throw new Error('State machines cannot be converted to source');\n    },\n    visitSuperExpression: function(tree) {\n      this.write_(SUPER);\n    },\n    visitSwitchStatement: function(tree) {\n      this.write_(SWITCH);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.write_(OPEN_CURLY);\n      this.writelnList_(tree.caseClauses);\n      this.write_(CLOSE_CURLY);\n    },\n    visitThisExpression: function(tree) {\n      this.write_(THIS);\n    },\n    visitThrowStatement: function(tree) {\n      this.write_(THROW);\n      this.writeSpace_();\n      this.visitAny(tree.value);\n      this.write_(SEMI_COLON);\n    },\n    visitTryStatement: function(tree) {\n      this.write_(TRY);\n      this.writeSpace_();\n      this.visitAny(tree.body);\n      if (tree.catchBlock) {\n        this.writeSpace_();\n        this.visitAny(tree.catchBlock);\n      }\n      if (tree.finallyBlock) {\n        this.writeSpace_();\n        this.visitAny(tree.finallyBlock);\n      }\n    },\n    visitTypeArguments: function(tree) {\n      this.write_(OPEN_ANGLE);\n      var args = tree.args;\n      this.visitAny(args[0]);\n      for (var i = 1; i < args.length; i++) {\n        this.write_(COMMA);\n        this.writeSpace_();\n        this.visitAny(args[i]);\n      }\n      this.write_(CLOSE_ANGLE);\n    },\n    visitTypeName: function(tree) {\n      if (tree.moduleName) {\n        this.visitAny(tree.moduleName);\n        this.write_(PERIOD);\n      }\n      this.write_(tree.name);\n    },\n    visitUnaryExpression: function(tree) {\n      var op = tree.operator;\n      this.write_(op);\n      var operand = tree.operand;\n      if (operand.type === UNARY_EXPRESSION && requiresSpaceBetween(op.type, operand.operator.type)) {\n        this.writeRequiredSpace_();\n      }\n      this.visitAny(operand);\n    },\n    visitVariableDeclarationList: function(tree) {\n      this.write_(tree.declarationType);\n      this.writeSpace_();\n      this.writeList_(tree.declarations, COMMA, true, 2);\n    },\n    visitVariableDeclaration: function(tree) {\n      this.visitAny(tree.lvalue);\n      this.writeTypeAnnotation_(tree.typeAnnotation);\n      if (tree.initializer !== null) {\n        this.writeSpace_();\n        this.write_(EQUAL);\n        this.writeSpace_();\n        this.visitAny(tree.initializer);\n      }\n    },\n    visitVariableStatement: function(tree) {\n      $traceurRuntime.superGet(this, $ParseTreeWriter.prototype, \"visitVariableStatement\").call(this, tree);\n      this.write_(SEMI_COLON);\n    },\n    visitWhileStatement: function(tree) {\n      this.write_(WHILE);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.condition);\n      this.write_(CLOSE_PAREN);\n      this.visitAnyBlockOrIndent_(tree.body);\n    },\n    visitWithStatement: function(tree) {\n      this.write_(WITH);\n      this.writeSpace_();\n      this.write_(OPEN_PAREN);\n      this.visitAny(tree.expression);\n      this.write_(CLOSE_PAREN);\n      this.writeSpace_();\n      this.visitAny(tree.body);\n    },\n    visitYieldExpression: function(tree) {\n      this.write_(YIELD);\n      if (tree.isYieldFor)\n        this.write_(STAR);\n      if (tree.expression) {\n        this.writeSpace_();\n        this.visitAny(tree.expression);\n      }\n    },\n    writeCurrentln_: function() {\n      this.result_ += this.currentLine_ + NEW_LINE;\n    },\n    writeln_: function() {\n      if (this.currentLineComment_) {\n        while (this.currentLine_.length < LINE_LENGTH) {\n          this.currentLine_ += ' ';\n        }\n        this.currentLine_ += ' // ' + this.currentLineComment_;\n        this.currentLineComment_ = null;\n      }\n      if (this.currentLine_)\n        this.writeCurrentln_();\n      this.currentLine_ = '';\n    },\n    writelnList_: function(list, delimiter) {\n      if (delimiter) {\n        this.writeList_(list, delimiter, true);\n      } else {\n        if (list.length > 0)\n          this.writeln_();\n        this.writeList_(list, null, true);\n        if (list.length > 0)\n          this.writeln_();\n      }\n    },\n    writeList_: function(list, delimiter, writeNewLine) {\n      var indent = arguments[3] !== (void 0) ? arguments[3] : 0;\n      var first = true;\n      for (var i = 0; i < list.length; i++) {\n        var element = list[i];\n        if (first) {\n          first = false;\n        } else {\n          if (delimiter !== null) {\n            this.write_(delimiter);\n            if (!writeNewLine)\n              this.writeSpace_();\n          }\n          if (writeNewLine) {\n            if (i === 1)\n              this.indentDepth_ += indent;\n            this.writeln_();\n          }\n        }\n        this.visitAny(element);\n      }\n      if (writeNewLine && list.length > 1)\n        this.indentDepth_ -= indent;\n    },\n    writeRaw_: function(value) {\n      this.currentLine_ += value;\n    },\n    write_: function(value) {\n      if (value === CLOSE_CURLY)\n        this.indentDepth_--;\n      if (value !== null) {\n        if (this.prettyPrint_) {\n          if (!this.currentLine_) {\n            for (var i = 0,\n                indent = this.indentDepth_; i < indent; i++) {\n              this.currentLine_ += '  ';\n            }\n          }\n        }\n        if (this.needsSpace_(value))\n          this.currentLine_ += ' ';\n        this.currentLine_ += value;\n      }\n      if (value === OPEN_CURLY)\n        this.indentDepth_++;\n    },\n    writeSpace_: function() {\n      var useSpace = arguments[0] !== (void 0) ? arguments[0] : this.prettyPrint_;\n      if (useSpace && !endsWithSpace(this.currentLine_))\n        this.currentLine_ += ' ';\n    },\n    writeRequiredSpace_: function() {\n      this.writeSpace_(true);\n    },\n    writeTypeAnnotation_: function(typeAnnotation) {\n      if (typeAnnotation !== null) {\n        this.write_(COLON);\n        this.writeSpace_();\n        this.visitAny(typeAnnotation);\n      }\n    },\n    writeAnnotations_: function(annotations) {\n      var writeNewLine = arguments[1] !== (void 0) ? arguments[1] : this.prettyPrint_;\n      if (annotations.length > 0) {\n        this.writeList_(annotations, null, writeNewLine);\n        if (writeNewLine)\n          this.writeln_();\n      }\n    },\n    needsSpace_: function(token) {\n      var line = this.currentLine_;\n      if (!line)\n        return false;\n      var lastCode = line.charCodeAt(line.length - 1);\n      if (isWhitespace(lastCode))\n        return false;\n      var firstCode = token.toString().charCodeAt(0);\n      return isIdentifierPart(firstCode) && (isIdentifierPart(lastCode) || lastCode === 47);\n    }\n  }, {}, ParseTreeVisitor);\n  function requiresSpaceBetween(first, second) {\n    return (first === MINUS || first === MINUS_MINUS) && (second === MINUS || second === MINUS_MINUS) || (first === PLUS || first === PLUS_PLUS) && (second === PLUS || second === PLUS_PLUS);\n  }\n  function endsWithSpace(s) {\n    return isWhitespace(s.charCodeAt(s.length - 1));\n  }\n  return {get ParseTreeWriter() {\n      return ParseTreeWriter;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\", path);\n  }\n  var ParseTreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\").ParseTreeWriter;\n  var ParseTreeMapWriter = function ParseTreeMapWriter(sourceMapGenerator, sourceRoot) {\n    var options = arguments[2];\n    $traceurRuntime.superConstructor($ParseTreeMapWriter).call(this, options);\n    this.sourceMapGenerator_ = sourceMapGenerator;\n    this.sourceRoot_ = sourceRoot;\n    this.outputLineCount_ = 1;\n    this.isFirstMapping_ = true;\n  };\n  var $ParseTreeMapWriter = ParseTreeMapWriter;\n  ($traceurRuntime.createClass)(ParseTreeMapWriter, {\n    visitAny: function(tree) {\n      if (!tree) {\n        return;\n      }\n      if (tree.location)\n        this.enterBranch(tree.location);\n      $traceurRuntime.superGet(this, $ParseTreeMapWriter.prototype, \"visitAny\").call(this, tree);\n      if (tree.location)\n        this.exitBranch(tree.location);\n    },\n    writeCurrentln_: function() {\n      $traceurRuntime.superGet(this, $ParseTreeMapWriter.prototype, \"writeCurrentln_\").call(this);\n      this.flushMappings();\n      this.outputLineCount_++;\n      this.generated_ = {\n        line: this.outputLineCount_,\n        column: 0\n      };\n      this.flushMappings();\n    },\n    write_: function(value) {\n      if (this.entered_) {\n        this.generate();\n        $traceurRuntime.superGet(this, $ParseTreeMapWriter.prototype, \"write_\").call(this, value);\n        this.generate();\n      } else {\n        this.generate();\n        $traceurRuntime.superGet(this, $ParseTreeMapWriter.prototype, \"write_\").call(this, value);\n        this.generate();\n      }\n    },\n    generate: function() {\n      var column = this.currentLine_.length ? this.currentLine_.length - 1 : 0;\n      this.generated_ = {\n        line: this.outputLineCount_,\n        column: column\n      };\n      this.flushMappings();\n    },\n    enterBranch: function(location) {\n      this.originate(location.start);\n      this.entered_ = true;\n    },\n    exitBranch: function(location) {\n      var position = location.end;\n      var endOfPreviousToken = {\n        line: position.line,\n        column: position.column ? position.column - 1 : 0,\n        source: {\n          name: position.source.name,\n          contents: position.source.contents\n        }\n      };\n      this.originate(endOfPreviousToken);\n      this.entered_ = false;\n    },\n    originate: function(position) {\n      var line = position.line + 1;\n      if (this.original_ && this.original_.line !== line)\n        this.flushMappings();\n      this.original_ = {\n        line: line,\n        column: position.column || 0\n      };\n      if (position.source.name !== this.sourceName_) {\n        this.sourceName_ = relativeToSourceRoot(position.source.name, this.sourceRoot_);\n        this.sourceMapGenerator_.setSourceContent(position.source.name, position.source.contents);\n      }\n      this.flushMappings();\n    },\n    flushMappings: function() {\n      if (this.original_ && this.generated_) {\n        this.addMapping();\n        this.original_ = null;\n        this.generated_ = null;\n      }\n    },\n    isSame: function(lhs, rhs) {\n      return lhs.line === rhs.line && lhs.column === rhs.column;\n    },\n    isSameMapping: function() {\n      if (!this.previousMapping_)\n        return false;\n      if (this.isSame(this.previousMapping_.generated, this.generated_) && this.isSame(this.previousMapping_.original, this.original_))\n        return true;\n      ;\n    },\n    addMapping: function() {\n      if (this.isSameMapping())\n        return;\n      var mapping = {\n        generated: this.generated_,\n        original: this.original_,\n        source: this.sourceName_\n      };\n      this.sourceMapGenerator_.addMapping(mapping);\n      this.previousMapping_ = mapping;\n    }\n  }, {}, ParseTreeWriter);\n  function relativeToSourceRoot(name, sourceRoot) {\n    var $__2;\n    if (!name || name[0] === '@')\n      return name;\n    if (!sourceRoot)\n      return name;\n    var nameSegments = name.split('/');\n    var rootSegments = sourceRoot.split('/');\n    if (rootSegments[rootSegments.length - 1]) {\n      rootSegments.push('');\n    }\n    var commonSegmentsLength = 0;\n    var uniqueSegments = [];\n    nameSegments.forEach((function(segment, index) {\n      if (segment === rootSegments[index]) {\n        commonSegmentsLength++;\n        return false;\n      }\n      uniqueSegments.push(segment);\n    }));\n    if (commonSegmentsLength < 1 || commonSegmentsLength === rootSegments.length)\n      return name;\n    var dotDotSegments = rootSegments.length - commonSegmentsLength - 1;\n    var segments = [];\n    while (dotDotSegments--) {\n      segments.push('..');\n    }\n    ($__2 = segments).push.apply($__2, $traceurRuntime.spread(uniqueSegments));\n    return segments.join('/');\n  }\n  return {\n    get ParseTreeMapWriter() {\n      return ParseTreeMapWriter;\n    },\n    get relativeToSourceRoot() {\n      return relativeToSourceRoot;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\", path);\n  }\n  function makeDefine(mapping, id) {\n    var require = function(id) {\n      return mapping[id];\n    };\n    var exports = mapping[id] = {};\n    var module = null;\n    return function(factory) {\n      factory(require, exports, module);\n    };\n  }\n  var define,\n      m = {};\n  define = makeDefine(m, './util');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    function getArg(aArgs, aName, aDefaultValue) {\n      if (aName in aArgs) {\n        return aArgs[aName];\n      } else if (arguments.length === 3) {\n        return aDefaultValue;\n      } else {\n        throw new Error('\"' + aName + '\" is a required argument.');\n      }\n    }\n    exports.getArg = getArg;\n    var urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n    var dataUrlRegexp = /^data:.+\\,.+$/;\n    function urlParse(aUrl) {\n      var match = aUrl.match(urlRegexp);\n      if (!match) {\n        return null;\n      }\n      return {\n        scheme: match[1],\n        auth: match[2],\n        host: match[3],\n        port: match[4],\n        path: match[5]\n      };\n    }\n    exports.urlParse = urlParse;\n    function urlGenerate(aParsedUrl) {\n      var url = '';\n      if (aParsedUrl.scheme) {\n        url += aParsedUrl.scheme + ':';\n      }\n      url += '//';\n      if (aParsedUrl.auth) {\n        url += aParsedUrl.auth + '@';\n      }\n      if (aParsedUrl.host) {\n        url += aParsedUrl.host;\n      }\n      if (aParsedUrl.port) {\n        url += \":\" + aParsedUrl.port;\n      }\n      if (aParsedUrl.path) {\n        url += aParsedUrl.path;\n      }\n      return url;\n    }\n    exports.urlGenerate = urlGenerate;\n    function normalize(aPath) {\n      var path = aPath;\n      var url = urlParse(aPath);\n      if (url) {\n        if (!url.path) {\n          return aPath;\n        }\n        path = url.path;\n      }\n      var isAbsolute = (path.charAt(0) === '/');\n      var parts = path.split(/\\/+/);\n      for (var part,\n          up = 0,\n          i = parts.length - 1; i >= 0; i--) {\n        part = parts[i];\n        if (part === '.') {\n          parts.splice(i, 1);\n        } else if (part === '..') {\n          up++;\n        } else if (up > 0) {\n          if (part === '') {\n            parts.splice(i + 1, up);\n            up = 0;\n          } else {\n            parts.splice(i, 2);\n            up--;\n          }\n        }\n      }\n      path = parts.join('/');\n      if (path === '') {\n        path = isAbsolute ? '/' : '.';\n      }\n      if (url) {\n        url.path = path;\n        return urlGenerate(url);\n      }\n      return path;\n    }\n    exports.normalize = normalize;\n    function join(aRoot, aPath) {\n      var aPathUrl = urlParse(aPath);\n      var aRootUrl = urlParse(aRoot);\n      if (aRootUrl) {\n        aRoot = aRootUrl.path || '/';\n      }\n      if (aPathUrl && !aPathUrl.scheme) {\n        if (aRootUrl) {\n          aPathUrl.scheme = aRootUrl.scheme;\n        }\n        return urlGenerate(aPathUrl);\n      }\n      if (aPathUrl || aPath.match(dataUrlRegexp)) {\n        return aPath;\n      }\n      if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n        aRootUrl.host = aPath;\n        return urlGenerate(aRootUrl);\n      }\n      var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n      if (aRootUrl) {\n        aRootUrl.path = joined;\n        return urlGenerate(aRootUrl);\n      }\n      return joined;\n    }\n    exports.join = join;\n    function toSetString(aStr) {\n      return '$' + aStr;\n    }\n    exports.toSetString = toSetString;\n    function fromSetString(aStr) {\n      return aStr.substr(1);\n    }\n    exports.fromSetString = fromSetString;\n    function relative(aRoot, aPath) {\n      aRoot = aRoot.replace(/\\/$/, '');\n      var url = urlParse(aRoot);\n      if (aPath.charAt(0) == \"/\" && url && url.path == \"/\") {\n        return aPath.slice(1);\n      }\n      return aPath.indexOf(aRoot + '/') === 0 ? aPath.substr(aRoot.length + 1) : aPath;\n    }\n    exports.relative = relative;\n    function strcmp(aStr1, aStr2) {\n      var s1 = aStr1 || \"\";\n      var s2 = aStr2 || \"\";\n      return (s1 > s2) - (s1 < s2);\n    }\n    function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n      var cmp;\n      cmp = strcmp(mappingA.source, mappingB.source);\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.originalLine - mappingB.originalLine;\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.originalColumn - mappingB.originalColumn;\n      if (cmp || onlyCompareOriginal) {\n        return cmp;\n      }\n      cmp = strcmp(mappingA.name, mappingB.name);\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.generatedLine - mappingB.generatedLine;\n      if (cmp) {\n        return cmp;\n      }\n      return mappingA.generatedColumn - mappingB.generatedColumn;\n    }\n    ;\n    exports.compareByOriginalPositions = compareByOriginalPositions;\n    function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) {\n      var cmp;\n      cmp = mappingA.generatedLine - mappingB.generatedLine;\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n      if (cmp || onlyCompareGenerated) {\n        return cmp;\n      }\n      cmp = strcmp(mappingA.source, mappingB.source);\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.originalLine - mappingB.originalLine;\n      if (cmp) {\n        return cmp;\n      }\n      cmp = mappingA.originalColumn - mappingB.originalColumn;\n      if (cmp) {\n        return cmp;\n      }\n      return strcmp(mappingA.name, mappingB.name);\n    }\n    ;\n    exports.compareByGeneratedPositions = compareByGeneratedPositions;\n  });\n  define = makeDefine(m, './array-set');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var util = require('./util');\n    function ArraySet() {\n      this._array = [];\n      this._set = {};\n    }\n    ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n      var set = new ArraySet();\n      for (var i = 0,\n          len = aArray.length; i < len; i++) {\n        set.add(aArray[i], aAllowDuplicates);\n      }\n      return set;\n    };\n    ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n      var isDuplicate = this.has(aStr);\n      var idx = this._array.length;\n      if (!isDuplicate || aAllowDuplicates) {\n        this._array.push(aStr);\n      }\n      if (!isDuplicate) {\n        this._set[util.toSetString(aStr)] = idx;\n      }\n    };\n    ArraySet.prototype.has = function ArraySet_has(aStr) {\n      return Object.prototype.hasOwnProperty.call(this._set, util.toSetString(aStr));\n    };\n    ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n      if (this.has(aStr)) {\n        return this._set[util.toSetString(aStr)];\n      }\n      throw new Error('\"' + aStr + '\" is not in the set.');\n    };\n    ArraySet.prototype.at = function ArraySet_at(aIdx) {\n      if (aIdx >= 0 && aIdx < this._array.length) {\n        return this._array[aIdx];\n      }\n      throw new Error('No element indexed by ' + aIdx);\n    };\n    ArraySet.prototype.toArray = function ArraySet_toArray() {\n      return this._array.slice();\n    };\n    exports.ArraySet = ArraySet;\n  });\n  define = makeDefine(m, './base64');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var charToIntMap = {};\n    var intToCharMap = {};\n    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('').forEach(function(ch, index) {\n      charToIntMap[ch] = index;\n      intToCharMap[index] = ch;\n    });\n    exports.encode = function base64_encode(aNumber) {\n      if (aNumber in intToCharMap) {\n        return intToCharMap[aNumber];\n      }\n      throw new TypeError(\"Must be between 0 and 63: \" + aNumber);\n    };\n    exports.decode = function base64_decode(aChar) {\n      if (aChar in charToIntMap) {\n        return charToIntMap[aChar];\n      }\n      throw new TypeError(\"Not a valid base 64 digit: \" + aChar);\n    };\n  });\n  define = makeDefine(m, './base64-vlq');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var base64 = require('./base64');\n    var VLQ_BASE_SHIFT = 5;\n    var VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n    var VLQ_BASE_MASK = VLQ_BASE - 1;\n    var VLQ_CONTINUATION_BIT = VLQ_BASE;\n    function toVLQSigned(aValue) {\n      return aValue < 0 ? ((-aValue) << 1) + 1 : (aValue << 1) + 0;\n    }\n    function fromVLQSigned(aValue) {\n      var isNegative = (aValue & 1) === 1;\n      var shifted = aValue >> 1;\n      return isNegative ? -shifted : shifted;\n    }\n    exports.encode = function base64VLQ_encode(aValue) {\n      var encoded = \"\";\n      var digit;\n      var vlq = toVLQSigned(aValue);\n      do {\n        digit = vlq & VLQ_BASE_MASK;\n        vlq >>>= VLQ_BASE_SHIFT;\n        if (vlq > 0) {\n          digit |= VLQ_CONTINUATION_BIT;\n        }\n        encoded += base64.encode(digit);\n      } while (vlq > 0);\n      return encoded;\n    };\n    exports.decode = function base64VLQ_decode(aStr) {\n      var i = 0;\n      var strLen = aStr.length;\n      var result = 0;\n      var shift = 0;\n      var continuation,\n          digit;\n      do {\n        if (i >= strLen) {\n          throw new Error(\"Expected more digits in base 64 VLQ value.\");\n        }\n        digit = base64.decode(aStr.charAt(i++));\n        continuation = !!(digit & VLQ_CONTINUATION_BIT);\n        digit &= VLQ_BASE_MASK;\n        result = result + (digit << shift);\n        shift += VLQ_BASE_SHIFT;\n      } while (continuation);\n      return {\n        value: fromVLQSigned(result),\n        rest: aStr.slice(i)\n      };\n    };\n  });\n  define = makeDefine(m, './binary-search');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {\n      var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n      var cmp = aCompare(aNeedle, aHaystack[mid], true);\n      if (cmp === 0) {\n        return aHaystack[mid];\n      } else if (cmp > 0) {\n        if (aHigh - mid > 1) {\n          return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare);\n        }\n        return aHaystack[mid];\n      } else {\n        if (mid - aLow > 1) {\n          return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare);\n        }\n        return aLow < 0 ? null : aHaystack[aLow];\n      }\n    }\n    exports.search = function search(aNeedle, aHaystack, aCompare) {\n      return aHaystack.length > 0 ? recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare) : null;\n    };\n  });\n  define = makeDefine(m, './source-map-generator');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var base64VLQ = require('./base64-vlq');\n    var util = require('./util');\n    var ArraySet = require('./array-set').ArraySet;\n    function SourceMapGenerator(aArgs) {\n      if (!aArgs) {\n        aArgs = {};\n      }\n      this._file = util.getArg(aArgs, 'file', null);\n      this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n      this._sources = new ArraySet();\n      this._names = new ArraySet();\n      this._mappings = [];\n      this._sourcesContents = null;\n    }\n    SourceMapGenerator.prototype._version = 3;\n    SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n      var sourceRoot = aSourceMapConsumer.sourceRoot;\n      var generator = new SourceMapGenerator({\n        file: aSourceMapConsumer.file,\n        sourceRoot: sourceRoot\n      });\n      aSourceMapConsumer.eachMapping(function(mapping) {\n        var newMapping = {generated: {\n            line: mapping.generatedLine,\n            column: mapping.generatedColumn\n          }};\n        if (mapping.source) {\n          newMapping.source = mapping.source;\n          if (sourceRoot) {\n            newMapping.source = util.relative(sourceRoot, newMapping.source);\n          }\n          newMapping.original = {\n            line: mapping.originalLine,\n            column: mapping.originalColumn\n          };\n          if (mapping.name) {\n            newMapping.name = mapping.name;\n          }\n        }\n        generator.addMapping(newMapping);\n      });\n      aSourceMapConsumer.sources.forEach(function(sourceFile) {\n        var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n        if (content) {\n          generator.setSourceContent(sourceFile, content);\n        }\n      });\n      return generator;\n    };\n    SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {\n      var generated = util.getArg(aArgs, 'generated');\n      var original = util.getArg(aArgs, 'original', null);\n      var source = util.getArg(aArgs, 'source', null);\n      var name = util.getArg(aArgs, 'name', null);\n      this._validateMapping(generated, original, source, name);\n      if (source && !this._sources.has(source)) {\n        this._sources.add(source);\n      }\n      if (name && !this._names.has(name)) {\n        this._names.add(name);\n      }\n      this._mappings.push({\n        generatedLine: generated.line,\n        generatedColumn: generated.column,\n        originalLine: original != null && original.line,\n        originalColumn: original != null && original.column,\n        source: source,\n        name: name\n      });\n    };\n    SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n      var source = aSourceFile;\n      if (this._sourceRoot) {\n        source = util.relative(this._sourceRoot, source);\n      }\n      if (aSourceContent !== null) {\n        if (!this._sourcesContents) {\n          this._sourcesContents = {};\n        }\n        this._sourcesContents[util.toSetString(source)] = aSourceContent;\n      } else {\n        delete this._sourcesContents[util.toSetString(source)];\n        if (Object.keys(this._sourcesContents).length === 0) {\n          this._sourcesContents = null;\n        }\n      }\n    };\n    SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n      if (!aSourceFile) {\n        if (!aSourceMapConsumer.file) {\n          throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\\'s \"file\" property. Both were omitted.');\n        }\n        aSourceFile = aSourceMapConsumer.file;\n      }\n      var sourceRoot = this._sourceRoot;\n      if (sourceRoot) {\n        aSourceFile = util.relative(sourceRoot, aSourceFile);\n      }\n      var newSources = new ArraySet();\n      var newNames = new ArraySet();\n      this._mappings.forEach(function(mapping) {\n        if (mapping.source === aSourceFile && mapping.originalLine) {\n          var original = aSourceMapConsumer.originalPositionFor({\n            line: mapping.originalLine,\n            column: mapping.originalColumn\n          });\n          if (original.source !== null) {\n            mapping.source = original.source;\n            if (aSourceMapPath) {\n              mapping.source = util.join(aSourceMapPath, mapping.source);\n            }\n            if (sourceRoot) {\n              mapping.source = util.relative(sourceRoot, mapping.source);\n            }\n            mapping.originalLine = original.line;\n            mapping.originalColumn = original.column;\n            if (original.name !== null && mapping.name !== null) {\n              mapping.name = original.name;\n            }\n          }\n        }\n        var source = mapping.source;\n        if (source && !newSources.has(source)) {\n          newSources.add(source);\n        }\n        var name = mapping.name;\n        if (name && !newNames.has(name)) {\n          newNames.add(name);\n        }\n      }, this);\n      this._sources = newSources;\n      this._names = newNames;\n      aSourceMapConsumer.sources.forEach(function(sourceFile) {\n        var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n        if (content) {\n          if (aSourceMapPath) {\n            sourceFile = util.join(aSourceMapPath, sourceFile);\n          }\n          if (sourceRoot) {\n            sourceFile = util.relative(sourceRoot, sourceFile);\n          }\n          this.setSourceContent(sourceFile, content);\n        }\n      }, this);\n    };\n    SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {\n      if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {\n        return;\n      } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {\n        return;\n      } else {\n        throw new Error('Invalid mapping: ' + JSON.stringify({\n          generated: aGenerated,\n          source: aSource,\n          original: aOriginal,\n          name: aName\n        }));\n      }\n    };\n    SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {\n      var previousGeneratedColumn = 0;\n      var previousGeneratedLine = 1;\n      var previousOriginalColumn = 0;\n      var previousOriginalLine = 0;\n      var previousName = 0;\n      var previousSource = 0;\n      var result = '';\n      var mapping;\n      this._mappings.sort(util.compareByGeneratedPositions);\n      for (var i = 0,\n          len = this._mappings.length; i < len; i++) {\n        mapping = this._mappings[i];\n        if (mapping.generatedLine !== previousGeneratedLine) {\n          previousGeneratedColumn = 0;\n          while (mapping.generatedLine !== previousGeneratedLine) {\n            result += ';';\n            previousGeneratedLine++;\n          }\n        } else {\n          if (i > 0) {\n            if (!util.compareByGeneratedPositions(mapping, this._mappings[i - 1])) {\n              continue;\n            }\n            result += ',';\n          }\n        }\n        result += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);\n        previousGeneratedColumn = mapping.generatedColumn;\n        if (mapping.source) {\n          result += base64VLQ.encode(this._sources.indexOf(mapping.source) - previousSource);\n          previousSource = this._sources.indexOf(mapping.source);\n          result += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);\n          previousOriginalLine = mapping.originalLine - 1;\n          result += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);\n          previousOriginalColumn = mapping.originalColumn;\n          if (mapping.name) {\n            result += base64VLQ.encode(this._names.indexOf(mapping.name) - previousName);\n            previousName = this._names.indexOf(mapping.name);\n          }\n        }\n      }\n      return result;\n    };\n    SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n      return aSources.map(function(source) {\n        if (!this._sourcesContents) {\n          return null;\n        }\n        if (aSourceRoot) {\n          source = util.relative(aSourceRoot, source);\n        }\n        var key = util.toSetString(source);\n        return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;\n      }, this);\n    };\n    SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {\n      var map = {\n        version: this._version,\n        file: this._file,\n        sources: this._sources.toArray(),\n        names: this._names.toArray(),\n        mappings: this._serializeMappings()\n      };\n      if (this._sourceRoot) {\n        map.sourceRoot = this._sourceRoot;\n      }\n      if (this._sourcesContents) {\n        map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n      }\n      return map;\n    };\n    SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {\n      return JSON.stringify(this);\n    };\n    exports.SourceMapGenerator = SourceMapGenerator;\n  });\n  define = makeDefine(m, './source-map-consumer');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var util = require('./util');\n    var binarySearch = require('./binary-search');\n    var ArraySet = require('./array-set').ArraySet;\n    var base64VLQ = require('./base64-vlq');\n    function SourceMapConsumer(aSourceMap) {\n      var sourceMap = aSourceMap;\n      if (typeof aSourceMap === 'string') {\n        sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n      }\n      var version = util.getArg(sourceMap, 'version');\n      var sources = util.getArg(sourceMap, 'sources');\n      var names = util.getArg(sourceMap, 'names', []);\n      var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n      var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n      var mappings = util.getArg(sourceMap, 'mappings');\n      var file = util.getArg(sourceMap, 'file', null);\n      if (version != this._version) {\n        throw new Error('Unsupported version: ' + version);\n      }\n      this._names = ArraySet.fromArray(names, true);\n      this._sources = ArraySet.fromArray(sources, true);\n      this.sourceRoot = sourceRoot;\n      this.sourcesContent = sourcesContent;\n      this._mappings = mappings;\n      this.file = file;\n    }\n    SourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {\n      var smc = Object.create(SourceMapConsumer.prototype);\n      smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n      smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n      smc.sourceRoot = aSourceMap._sourceRoot;\n      smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);\n      smc.file = aSourceMap._file;\n      smc.__generatedMappings = aSourceMap._mappings.slice().sort(util.compareByGeneratedPositions);\n      smc.__originalMappings = aSourceMap._mappings.slice().sort(util.compareByOriginalPositions);\n      return smc;\n    };\n    SourceMapConsumer.prototype._version = 3;\n    Object.defineProperty(SourceMapConsumer.prototype, 'sources', {get: function() {\n        return this._sources.toArray().map(function(s) {\n          return this.sourceRoot ? util.join(this.sourceRoot, s) : s;\n        }, this);\n      }});\n    SourceMapConsumer.prototype.__generatedMappings = null;\n    Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {get: function() {\n        if (!this.__generatedMappings) {\n          this.__generatedMappings = [];\n          this.__originalMappings = [];\n          this._parseMappings(this._mappings, this.sourceRoot);\n        }\n        return this.__generatedMappings;\n      }});\n    SourceMapConsumer.prototype.__originalMappings = null;\n    Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {get: function() {\n        if (!this.__originalMappings) {\n          this.__generatedMappings = [];\n          this.__originalMappings = [];\n          this._parseMappings(this._mappings, this.sourceRoot);\n        }\n        return this.__originalMappings;\n      }});\n    SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n      var generatedLine = 1;\n      var previousGeneratedColumn = 0;\n      var previousOriginalLine = 0;\n      var previousOriginalColumn = 0;\n      var previousSource = 0;\n      var previousName = 0;\n      var mappingSeparator = /^[,;]/;\n      var str = aStr;\n      var mapping;\n      var temp;\n      while (str.length > 0) {\n        if (str.charAt(0) === ';') {\n          generatedLine++;\n          str = str.slice(1);\n          previousGeneratedColumn = 0;\n        } else if (str.charAt(0) === ',') {\n          str = str.slice(1);\n        } else {\n          mapping = {};\n          mapping.generatedLine = generatedLine;\n          temp = base64VLQ.decode(str);\n          mapping.generatedColumn = previousGeneratedColumn + temp.value;\n          previousGeneratedColumn = mapping.generatedColumn;\n          str = temp.rest;\n          if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) {\n            temp = base64VLQ.decode(str);\n            mapping.source = this._sources.at(previousSource + temp.value);\n            previousSource += temp.value;\n            str = temp.rest;\n            if (str.length === 0 || mappingSeparator.test(str.charAt(0))) {\n              throw new Error('Found a source, but no line and column');\n            }\n            temp = base64VLQ.decode(str);\n            mapping.originalLine = previousOriginalLine + temp.value;\n            previousOriginalLine = mapping.originalLine;\n            mapping.originalLine += 1;\n            str = temp.rest;\n            if (str.length === 0 || mappingSeparator.test(str.charAt(0))) {\n              throw new Error('Found a source and line, but no column');\n            }\n            temp = base64VLQ.decode(str);\n            mapping.originalColumn = previousOriginalColumn + temp.value;\n            previousOriginalColumn = mapping.originalColumn;\n            str = temp.rest;\n            if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) {\n              temp = base64VLQ.decode(str);\n              mapping.name = this._names.at(previousName + temp.value);\n              previousName += temp.value;\n              str = temp.rest;\n            }\n          }\n          this.__generatedMappings.push(mapping);\n          if (typeof mapping.originalLine === 'number') {\n            this.__originalMappings.push(mapping);\n          }\n        }\n      }\n      this.__generatedMappings.sort(util.compareByGeneratedPositions);\n      this.__originalMappings.sort(util.compareByOriginalPositions);\n    };\n    SourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator) {\n      if (aNeedle[aLineName] <= 0) {\n        throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);\n      }\n      if (aNeedle[aColumnName] < 0) {\n        throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);\n      }\n      return binarySearch.search(aNeedle, aMappings, aComparator);\n    };\n    SourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {\n      var needle = {\n        generatedLine: util.getArg(aArgs, 'line'),\n        generatedColumn: util.getArg(aArgs, 'column')\n      };\n      var mapping = this._findMapping(needle, this._generatedMappings, \"generatedLine\", \"generatedColumn\", util.compareByGeneratedPositions);\n      if (mapping && mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source && this.sourceRoot) {\n          source = util.join(this.sourceRoot, source);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: util.getArg(mapping, 'name', null)\n        };\n      }\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    };\n    SourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource) {\n      if (!this.sourcesContent) {\n        return null;\n      }\n      if (this.sourceRoot) {\n        aSource = util.relative(this.sourceRoot, aSource);\n      }\n      if (this._sources.has(aSource)) {\n        return this.sourcesContent[this._sources.indexOf(aSource)];\n      }\n      var url;\n      if (this.sourceRoot && (url = util.urlParse(this.sourceRoot))) {\n        var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n        if (url.scheme == \"file\" && this._sources.has(fileUriAbsPath)) {\n          return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n        }\n        if ((!url.path || url.path == \"/\") && this._sources.has(\"/\" + aSource)) {\n          return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n        }\n      }\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    };\n    SourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {\n      var needle = {\n        source: util.getArg(aArgs, 'source'),\n        originalLine: util.getArg(aArgs, 'line'),\n        originalColumn: util.getArg(aArgs, 'column')\n      };\n      if (this.sourceRoot) {\n        needle.source = util.relative(this.sourceRoot, needle.source);\n      }\n      var mapping = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions);\n      if (mapping) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null)\n        };\n      }\n      return {\n        line: null,\n        column: null\n      };\n    };\n    SourceMapConsumer.GENERATED_ORDER = 1;\n    SourceMapConsumer.ORIGINAL_ORDER = 2;\n    SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n      var context = aContext || null;\n      var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n      var mappings;\n      switch (order) {\n        case SourceMapConsumer.GENERATED_ORDER:\n          mappings = this._generatedMappings;\n          break;\n        case SourceMapConsumer.ORIGINAL_ORDER:\n          mappings = this._originalMappings;\n          break;\n        default:\n          throw new Error(\"Unknown order of iteration.\");\n      }\n      var sourceRoot = this.sourceRoot;\n      mappings.map(function(mapping) {\n        var source = mapping.source;\n        if (source && sourceRoot) {\n          source = util.join(sourceRoot, source);\n        }\n        return {\n          source: source,\n          generatedLine: mapping.generatedLine,\n          generatedColumn: mapping.generatedColumn,\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: mapping.name\n        };\n      }).forEach(aCallback, context);\n    };\n    exports.SourceMapConsumer = SourceMapConsumer;\n  });\n  define = makeDefine(m, './source-node');\n  if (typeof define !== 'function') {\n    var define = require('amdefine')(module, require);\n  }\n  define(function(require, exports, module) {\n    var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\n    var util = require('./util');\n    var REGEX_NEWLINE = /(\\r?\\n)/g;\n    var REGEX_CHARACTER = /\\r\\n|[\\s\\S]/g;\n    function SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n      this.children = [];\n      this.sourceContents = {};\n      this.line = aLine === undefined ? null : aLine;\n      this.column = aColumn === undefined ? null : aColumn;\n      this.source = aSource === undefined ? null : aSource;\n      this.name = aName === undefined ? null : aName;\n      if (aChunks != null)\n        this.add(aChunks);\n    }\n    SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer) {\n      var node = new SourceNode();\n      var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n      var shiftNextLine = function() {\n        var lineContents = remainingLines.shift();\n        var newLine = remainingLines.shift() || \"\";\n        return lineContents + newLine;\n      };\n      var lastGeneratedLine = 1,\n          lastGeneratedColumn = 0;\n      var lastMapping = null;\n      aSourceMapConsumer.eachMapping(function(mapping) {\n        if (lastMapping !== null) {\n          if (lastGeneratedLine < mapping.generatedLine) {\n            var code = \"\";\n            addMappingWithCode(lastMapping, shiftNextLine());\n            lastGeneratedLine++;\n            lastGeneratedColumn = 0;\n          } else {\n            var nextLine = remainingLines[0];\n            var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);\n            remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);\n            lastGeneratedColumn = mapping.generatedColumn;\n            addMappingWithCode(lastMapping, code);\n            lastMapping = mapping;\n            return;\n          }\n        }\n        while (lastGeneratedLine < mapping.generatedLine) {\n          node.add(shiftNextLine());\n          lastGeneratedLine++;\n        }\n        if (lastGeneratedColumn < mapping.generatedColumn) {\n          var nextLine = remainingLines[0];\n          node.add(nextLine.substr(0, mapping.generatedColumn));\n          remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n        }\n        lastMapping = mapping;\n      }, this);\n      if (remainingLines.length > 0) {\n        if (lastMapping) {\n          addMappingWithCode(lastMapping, shiftNextLine());\n        }\n        node.add(remainingLines.join(\"\"));\n      }\n      aSourceMapConsumer.sources.forEach(function(sourceFile) {\n        var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n        if (content) {\n          node.setSourceContent(sourceFile, content);\n        }\n      });\n      return node;\n      function addMappingWithCode(mapping, code) {\n        if (mapping === null || mapping.source === undefined) {\n          node.add(code);\n        } else {\n          node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, mapping.source, code, mapping.name));\n        }\n      }\n    };\n    SourceNode.prototype.add = function SourceNode_add(aChunk) {\n      if (Array.isArray(aChunk)) {\n        aChunk.forEach(function(chunk) {\n          this.add(chunk);\n        }, this);\n      } else if (aChunk instanceof SourceNode || typeof aChunk === \"string\") {\n        if (aChunk) {\n          this.children.push(aChunk);\n        }\n      } else {\n        throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n      }\n      return this;\n    };\n    SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n      if (Array.isArray(aChunk)) {\n        for (var i = aChunk.length - 1; i >= 0; i--) {\n          this.prepend(aChunk[i]);\n        }\n      } else if (aChunk instanceof SourceNode || typeof aChunk === \"string\") {\n        this.children.unshift(aChunk);\n      } else {\n        throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n      }\n      return this;\n    };\n    SourceNode.prototype.walk = function SourceNode_walk(aFn) {\n      var chunk;\n      for (var i = 0,\n          len = this.children.length; i < len; i++) {\n        chunk = this.children[i];\n        if (chunk instanceof SourceNode) {\n          chunk.walk(aFn);\n        } else {\n          if (chunk !== '') {\n            aFn(chunk, {\n              source: this.source,\n              line: this.line,\n              column: this.column,\n              name: this.name\n            });\n          }\n        }\n      }\n    };\n    SourceNode.prototype.join = function SourceNode_join(aSep) {\n      var newChildren;\n      var i;\n      var len = this.children.length;\n      if (len > 0) {\n        newChildren = [];\n        for (i = 0; i < len - 1; i++) {\n          newChildren.push(this.children[i]);\n          newChildren.push(aSep);\n        }\n        newChildren.push(this.children[i]);\n        this.children = newChildren;\n      }\n      return this;\n    };\n    SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n      var lastChild = this.children[this.children.length - 1];\n      if (lastChild instanceof SourceNode) {\n        lastChild.replaceRight(aPattern, aReplacement);\n      } else if (typeof lastChild === 'string') {\n        this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n      } else {\n        this.children.push(''.replace(aPattern, aReplacement));\n      }\n      return this;\n    };\n    SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n      this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n    };\n    SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {\n      for (var i = 0,\n          len = this.children.length; i < len; i++) {\n        if (this.children[i] instanceof SourceNode) {\n          this.children[i].walkSourceContents(aFn);\n        }\n      }\n      var sources = Object.keys(this.sourceContents);\n      for (var i = 0,\n          len = sources.length; i < len; i++) {\n        aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n      }\n    };\n    SourceNode.prototype.toString = function SourceNode_toString() {\n      var str = \"\";\n      this.walk(function(chunk) {\n        str += chunk;\n      });\n      return str;\n    };\n    SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n      var generated = {\n        code: \"\",\n        line: 1,\n        column: 0\n      };\n      var map = new SourceMapGenerator(aArgs);\n      var sourceMappingActive = false;\n      var lastOriginalSource = null;\n      var lastOriginalLine = null;\n      var lastOriginalColumn = null;\n      var lastOriginalName = null;\n      this.walk(function(chunk, original) {\n        generated.code += chunk;\n        if (original.source !== null && original.line !== null && original.column !== null) {\n          if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {\n            map.addMapping({\n              source: original.source,\n              original: {\n                line: original.line,\n                column: original.column\n              },\n              generated: {\n                line: generated.line,\n                column: generated.column\n              },\n              name: original.name\n            });\n          }\n          lastOriginalSource = original.source;\n          lastOriginalLine = original.line;\n          lastOriginalColumn = original.column;\n          lastOriginalName = original.name;\n          sourceMappingActive = true;\n        } else if (sourceMappingActive) {\n          map.addMapping({generated: {\n              line: generated.line,\n              column: generated.column\n            }});\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        }\n        chunk.match(REGEX_CHARACTER).forEach(function(ch, idx, array) {\n          if (REGEX_NEWLINE.test(ch)) {\n            generated.line++;\n            generated.column = 0;\n            if (idx + 1 === array.length) {\n              lastOriginalSource = null;\n              sourceMappingActive = false;\n            } else if (sourceMappingActive) {\n              map.addMapping({\n                source: original.source,\n                original: {\n                  line: original.line,\n                  column: original.column\n                },\n                generated: {\n                  line: generated.line,\n                  column: generated.column\n                },\n                name: original.name\n              });\n            }\n          } else {\n            generated.column += ch.length;\n          }\n        });\n      });\n      this.walkSourceContents(function(sourceFile, sourceContent) {\n        map.setSourceContent(sourceFile, sourceContent);\n      });\n      return {\n        code: generated.code,\n        map: map\n      };\n    };\n    exports.SourceNode = SourceNode;\n  });\n  var SourceMapGenerator = m['./source-map-generator'].SourceMapGenerator;\n  var SourceMapConsumer = m['./source-map-consumer'].SourceMapConsumer;\n  var SourceNode = m['./source-node'].SourceNode;\n  var join = m['./util'].join;\n  return {\n    get SourceMapGenerator() {\n      return SourceMapGenerator;\n    },\n    get SourceMapConsumer() {\n      return SourceMapConsumer;\n    },\n    get SourceNode() {\n      return SourceNode;\n    },\n    get join() {\n      return join;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/toSource\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/toSource\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/toSource\", path);\n  }\n  var ParseTreeMapWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\").ParseTreeMapWriter;\n  var ParseTreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\").ParseTreeWriter;\n  var SourceMapGenerator = System.get(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\").SourceMapGenerator;\n  function toSource(tree) {\n    var options = arguments[1];\n    var outputName = arguments[2] !== (void 0) ? arguments[2] : '<toSourceOutput>';\n    var sourceRoot = arguments[3];\n    var sourceMapGenerator = options && options.sourceMapGenerator;\n    var sourcemaps = options && options.sourceMaps;\n    if (!sourceMapGenerator && sourcemaps) {\n      sourceMapGenerator = new SourceMapGenerator({\n        file: outputName,\n        sourceRoot: sourceRoot\n      });\n    }\n    var writer;\n    if (sourceMapGenerator)\n      writer = new ParseTreeMapWriter(sourceMapGenerator, sourceRoot, options);\n    else\n      writer = new ParseTreeWriter(options);\n    writer.visitAny(tree);\n    return [writer.toString(), sourceMapGenerator && sourceMapGenerator.toString()];\n  }\n  return {get toSource() {\n      return toSource;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/TreeWriter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/TreeWriter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/TreeWriter\", path);\n  }\n  var toSource = System.get(\"traceur@0.0.74/src/outputgeneration/toSource\").toSource;\n  function write(tree) {\n    var options = arguments[1];\n    var outputName = arguments[2] !== (void 0) ? arguments[2] : '<TreeWriter-output>';\n    var sourceRoot = arguments[3];\n    var $__1 = toSource(tree, options, outputName, sourceRoot),\n        result = $__1[0],\n        sourceMap = $__1[1];\n    if (sourceMap)\n      options.generatedSourceMap = sourceMap;\n    return result;\n  }\n  var TreeWriter = function TreeWriter() {};\n  ($traceurRuntime.createClass)(TreeWriter, {}, {});\n  TreeWriter.write = write;\n  return {\n    get write() {\n      return write;\n    },\n    get TreeWriter() {\n      return TreeWriter;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/syntax/ParseTreeValidator\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/syntax/ParseTreeValidator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/syntax/ParseTreeValidator\", path);\n  }\n  var NewExpression = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").NewExpression;\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var TreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/TreeWriter\").TreeWriter;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      AMPERSAND = $__3.AMPERSAND,\n      AMPERSAND_EQUAL = $__3.AMPERSAND_EQUAL,\n      AND = $__3.AND,\n      BAR = $__3.BAR,\n      BAR_EQUAL = $__3.BAR_EQUAL,\n      CARET = $__3.CARET,\n      CARET_EQUAL = $__3.CARET_EQUAL,\n      CLOSE_ANGLE = $__3.CLOSE_ANGLE,\n      EQUAL = $__3.EQUAL,\n      EQUAL_EQUAL = $__3.EQUAL_EQUAL,\n      EQUAL_EQUAL_EQUAL = $__3.EQUAL_EQUAL_EQUAL,\n      GREATER_EQUAL = $__3.GREATER_EQUAL,\n      IDENTIFIER = $__3.IDENTIFIER,\n      IN = $__3.IN,\n      INSTANCEOF = $__3.INSTANCEOF,\n      LEFT_SHIFT = $__3.LEFT_SHIFT,\n      LEFT_SHIFT_EQUAL = $__3.LEFT_SHIFT_EQUAL,\n      LESS_EQUAL = $__3.LESS_EQUAL,\n      MINUS = $__3.MINUS,\n      MINUS_EQUAL = $__3.MINUS_EQUAL,\n      NOT_EQUAL = $__3.NOT_EQUAL,\n      NOT_EQUAL_EQUAL = $__3.NOT_EQUAL_EQUAL,\n      NUMBER = $__3.NUMBER,\n      OPEN_ANGLE = $__3.OPEN_ANGLE,\n      OR = $__3.OR,\n      PERCENT = $__3.PERCENT,\n      PERCENT_EQUAL = $__3.PERCENT_EQUAL,\n      PLUS = $__3.PLUS,\n      PLUS_EQUAL = $__3.PLUS_EQUAL,\n      RIGHT_SHIFT = $__3.RIGHT_SHIFT,\n      RIGHT_SHIFT_EQUAL = $__3.RIGHT_SHIFT_EQUAL,\n      SLASH = $__3.SLASH,\n      SLASH_EQUAL = $__3.SLASH_EQUAL,\n      STAR = $__3.STAR,\n      STAR_EQUAL = $__3.STAR_EQUAL,\n      STAR_STAR = $__3.STAR_STAR,\n      STAR_STAR_EQUAL = $__3.STAR_STAR_EQUAL,\n      STRING = $__3.STRING,\n      UNSIGNED_RIGHT_SHIFT = $__3.UNSIGNED_RIGHT_SHIFT,\n      UNSIGNED_RIGHT_SHIFT_EQUAL = $__3.UNSIGNED_RIGHT_SHIFT_EQUAL;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      ARRAY_PATTERN = $__4.ARRAY_PATTERN,\n      ASSIGNMENT_ELEMENT = $__4.ASSIGNMENT_ELEMENT,\n      BINDING_ELEMENT = $__4.BINDING_ELEMENT,\n      BINDING_IDENTIFIER = $__4.BINDING_IDENTIFIER,\n      BLOCK = $__4.BLOCK,\n      CASE_CLAUSE = $__4.CASE_CLAUSE,\n      CATCH = $__4.CATCH,\n      CLASS_DECLARATION = $__4.CLASS_DECLARATION,\n      COMPUTED_PROPERTY_NAME = $__4.COMPUTED_PROPERTY_NAME,\n      DEFAULT_CLAUSE = $__4.DEFAULT_CLAUSE,\n      EXPORT_DEFAULT = $__4.EXPORT_DEFAULT,\n      EXPORT_SPECIFIER = $__4.EXPORT_SPECIFIER,\n      EXPORT_SPECIFIER_SET = $__4.EXPORT_SPECIFIER_SET,\n      EXPORT_STAR = $__4.EXPORT_STAR,\n      FINALLY = $__4.FINALLY,\n      FORMAL_PARAMETER = $__4.FORMAL_PARAMETER,\n      FORMAL_PARAMETER_LIST = $__4.FORMAL_PARAMETER_LIST,\n      FUNCTION_BODY = $__4.FUNCTION_BODY,\n      FUNCTION_DECLARATION = $__4.FUNCTION_DECLARATION,\n      GET_ACCESSOR = $__4.GET_ACCESSOR,\n      IDENTIFIER_EXPRESSION = $__4.IDENTIFIER_EXPRESSION,\n      IMPORTED_BINDING = $__4.IMPORTED_BINDING,\n      LITERAL_PROPERTY_NAME = $__4.LITERAL_PROPERTY_NAME,\n      MODULE_DECLARATION = $__4.MODULE_DECLARATION,\n      MODULE_SPECIFIER = $__4.MODULE_SPECIFIER,\n      NAMED_EXPORT = $__4.NAMED_EXPORT,\n      OBJECT_PATTERN = $__4.OBJECT_PATTERN,\n      OBJECT_PATTERN_FIELD = $__4.OBJECT_PATTERN_FIELD,\n      PROPERTY_METHOD_ASSIGNMENT = $__4.PROPERTY_METHOD_ASSIGNMENT,\n      PROPERTY_NAME_ASSIGNMENT = $__4.PROPERTY_NAME_ASSIGNMENT,\n      PROPERTY_NAME_SHORTHAND = $__4.PROPERTY_NAME_SHORTHAND,\n      PROPERTY_VARIABLE_DECLARATION = $__4.PROPERTY_VARIABLE_DECLARATION,\n      REST_PARAMETER = $__4.REST_PARAMETER,\n      SET_ACCESSOR = $__4.SET_ACCESSOR,\n      TEMPLATE_LITERAL_PORTION = $__4.TEMPLATE_LITERAL_PORTION,\n      TEMPLATE_SUBSTITUTION = $__4.TEMPLATE_SUBSTITUTION,\n      TYPE_ARGUMENTS = $__4.TYPE_ARGUMENTS,\n      TYPE_NAME = $__4.TYPE_NAME,\n      VARIABLE_DECLARATION_LIST = $__4.VARIABLE_DECLARATION_LIST,\n      VARIABLE_STATEMENT = $__4.VARIABLE_STATEMENT;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var ValidationError = function ValidationError(tree, message) {\n    this.tree = tree;\n    this.message = message;\n  };\n  ($traceurRuntime.createClass)(ValidationError, {}, {}, Error);\n  var ParseTreeValidator = function ParseTreeValidator() {\n    $traceurRuntime.superConstructor($ParseTreeValidator).apply(this, arguments);\n  };\n  var $ParseTreeValidator = ParseTreeValidator;\n  ($traceurRuntime.createClass)(ParseTreeValidator, {\n    fail_: function(tree, message) {\n      throw new ValidationError(tree, message);\n    },\n    check_: function(condition, tree, message) {\n      if (!condition) {\n        this.fail_(tree, message);\n      }\n    },\n    checkVisit_: function(condition, tree, message) {\n      this.check_(condition, tree, message);\n      this.visitAny(tree);\n    },\n    checkType_: function(type, tree, message) {\n      this.checkVisit_(tree.type === type, tree, message);\n    },\n    visitArgumentList: function(tree) {\n      for (var i = 0; i < tree.args.length; i++) {\n        var argument = tree.args[i];\n        this.checkVisit_(argument.isAssignmentOrSpread(), argument, 'assignment or spread expected');\n      }\n    },\n    visitArrayLiteralExpression: function(tree) {\n      for (var i = 0; i < tree.elements.length; i++) {\n        var element = tree.elements[i];\n        this.checkVisit_(element === null || element.isAssignmentOrSpread(), element, 'assignment or spread expected');\n      }\n    },\n    visitArrayPattern: function(tree) {\n      for (var i = 0; i < tree.elements.length; i++) {\n        var element = tree.elements[i];\n        this.checkVisit_(element === null || element.type === BINDING_ELEMENT || element.type == ASSIGNMENT_ELEMENT || element.isLeftHandSideExpression() || element.isPattern() || element.isSpreadPatternElement(), element, 'null, sub pattern, left hand side expression or spread expected');\n        if (element && element.isSpreadPatternElement()) {\n          this.check_(i === (tree.elements.length - 1), element, 'spread in array patterns must be the last element');\n        }\n      }\n    },\n    visitBinaryExpression: function(tree) {\n      switch (tree.operator.type) {\n        case EQUAL:\n        case STAR_EQUAL:\n        case STAR_STAR_EQUAL:\n        case SLASH_EQUAL:\n        case PERCENT_EQUAL:\n        case PLUS_EQUAL:\n        case MINUS_EQUAL:\n        case LEFT_SHIFT_EQUAL:\n        case RIGHT_SHIFT_EQUAL:\n        case UNSIGNED_RIGHT_SHIFT_EQUAL:\n        case AMPERSAND_EQUAL:\n        case CARET_EQUAL:\n        case BAR_EQUAL:\n          this.check_(tree.left.isLeftHandSideExpression() || tree.left.isPattern(), tree.left, 'left hand side expression or pattern expected');\n          this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected');\n          break;\n        case AND:\n        case OR:\n        case BAR:\n        case CARET:\n        case AMPERSAND:\n        case EQUAL_EQUAL:\n        case NOT_EQUAL:\n        case EQUAL_EQUAL_EQUAL:\n        case NOT_EQUAL_EQUAL:\n        case OPEN_ANGLE:\n        case CLOSE_ANGLE:\n        case GREATER_EQUAL:\n        case LESS_EQUAL:\n        case INSTANCEOF:\n        case IN:\n        case LEFT_SHIFT:\n        case RIGHT_SHIFT:\n        case UNSIGNED_RIGHT_SHIFT:\n        case PLUS:\n        case MINUS:\n        case STAR:\n        case SLASH:\n        case PERCENT:\n        case STAR_STAR:\n          this.check_(tree.left.isAssignmentExpression(), tree.left, 'assignment expression expected');\n          this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected');\n          break;\n        default:\n          this.fail_(tree, 'unexpected binary operator');\n      }\n      this.visitAny(tree.left);\n      this.visitAny(tree.right);\n    },\n    visitBindingElement: function(tree) {\n      var binding = tree.binding;\n      this.checkVisit_(binding.type == BINDING_IDENTIFIER || binding.type == OBJECT_PATTERN || binding.type == ARRAY_PATTERN, binding, 'expected valid binding element');\n      this.visitAny(tree.initializer);\n    },\n    visitAssignmentElement: function(tree) {\n      var assignment = tree.assignment;\n      this.checkVisit_(assignment.type == OBJECT_PATTERN || assignment.type == ARRAY_PATTERN || assignment.isLeftHandSideExpression(), assignment, 'expected valid assignment element');\n      this.visitAny(tree.initializer);\n    },\n    visitBlock: function(tree) {\n      for (var i = 0; i < tree.statements.length; i++) {\n        var statement = tree.statements[i];\n        this.checkVisit_(statement.isStatementListItem(), statement, 'statement or function declaration expected');\n      }\n    },\n    visitCallExpression: function(tree) {\n      this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');\n      if (tree.operand instanceof NewExpression) {\n        this.check_(tree.operand.args !== null, tree.operand, 'new args expected');\n      }\n      this.visitAny(tree.operand);\n      this.visitAny(tree.args);\n    },\n    visitCaseClause: function(tree) {\n      this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      for (var i = 0; i < tree.statements.length; i++) {\n        var statement = tree.statements[i];\n        this.checkVisit_(statement.isStatement(), statement, 'statement expected');\n      }\n    },\n    visitCatch: function(tree) {\n      this.checkVisit_(tree.binding.isPattern() || tree.binding.type == BINDING_IDENTIFIER, tree.binding, 'binding identifier expected');\n      this.checkVisit_(tree.catchBody.type === BLOCK, tree.catchBody, 'block expected');\n    },\n    visitClassDeclaration: function(tree) {\n      for (var i = 0; i < tree.elements.length; i++) {\n        var element = tree.elements[i];\n        switch (element.type) {\n          case GET_ACCESSOR:\n          case SET_ACCESSOR:\n          case PROPERTY_METHOD_ASSIGNMENT:\n          case PROPERTY_VARIABLE_DECLARATION:\n            break;\n          default:\n            this.fail_(element, 'class element expected');\n        }\n        this.visitAny(element);\n      }\n    },\n    visitCommaExpression: function(tree) {\n      for (var i = 0; i < tree.expressions.length; i++) {\n        var expression = tree.expressions[i];\n        this.checkVisit_(expression.isAssignmentExpression(), expression, 'expression expected');\n      }\n    },\n    visitConditionalExpression: function(tree) {\n      this.checkVisit_(tree.condition.isAssignmentExpression(), tree.condition, 'expression expected');\n      this.checkVisit_(tree.left.isAssignmentExpression(), tree.left, 'expression expected');\n      this.checkVisit_(tree.right.isAssignmentExpression(), tree.right, 'expression expected');\n    },\n    visitCoverFormals: function(tree) {\n      this.fail_(tree, 'CoverFormals should have been removed');\n    },\n    visitCoverInitializedName: function(tree) {\n      this.fail_(tree, 'CoverInitializedName should have been removed');\n    },\n    visitDefaultClause: function(tree) {\n      for (var i = 0; i < tree.statements.length; i++) {\n        var statement = tree.statements[i];\n        this.checkVisit_(statement.isStatement(), statement, 'statement expected');\n      }\n    },\n    visitDoWhileStatement: function(tree) {\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n      this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');\n    },\n    visitExportDeclaration: function(tree) {\n      var declType = tree.declaration.type;\n      this.checkVisit_(declType == VARIABLE_STATEMENT || declType == FUNCTION_DECLARATION || declType == MODULE_DECLARATION || declType == CLASS_DECLARATION || declType == NAMED_EXPORT || declType == EXPORT_DEFAULT, tree.declaration, 'expected valid export tree');\n    },\n    visitNamedExport: function(tree) {\n      if (tree.moduleSpecifier) {\n        this.checkVisit_(tree.moduleSpecifier.type == MODULE_SPECIFIER, tree.moduleSpecifier, 'module expression expected');\n      }\n      var specifierType = tree.specifierSet.type;\n      this.checkVisit_(specifierType == EXPORT_SPECIFIER_SET || specifierType == EXPORT_STAR, tree.specifierSet, 'specifier set or identifier expected');\n    },\n    visitExportSpecifierSet: function(tree) {\n      this.check_(tree.specifiers.length > 0, tree, 'expected at least one identifier');\n      for (var i = 0; i < tree.specifiers.length; i++) {\n        var specifier = tree.specifiers[i];\n        this.checkVisit_(specifier.type == EXPORT_SPECIFIER || specifier.type == IDENTIFIER_EXPRESSION, specifier, 'expected valid export specifier');\n      }\n    },\n    visitExpressionStatement: function(tree) {\n      this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n    },\n    visitFinally: function(tree) {\n      this.checkVisit_(tree.block.type === BLOCK, tree.block, 'block expected');\n    },\n    visitForOfStatement: function(tree) {\n      this.checkVisit_(tree.initializer.isPattern() || tree.initializer.type === IDENTIFIER_EXPRESSION || tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarations.length === 1, tree.initializer, 'for-each statement may not have more than one variable declaration');\n      this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected');\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n    },\n    visitForInStatement: function(tree) {\n      if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {\n        this.checkVisit_(tree.initializer.declarations.length <= 1, tree.initializer, 'for-in statement may not have more than one variable declaration');\n      } else {\n        this.checkVisit_(tree.initializer.isPattern() || tree.initializer.isExpression(), tree.initializer, 'variable declaration, expression or ' + 'pattern expected');\n      }\n      this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected');\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n    },\n    visitFormalParameterList: function(tree) {\n      for (var i = 0; i < tree.parameters.length; i++) {\n        var parameter = tree.parameters[i];\n        assert(parameter.type === FORMAL_PARAMETER);\n        parameter = parameter.parameter;\n        switch (parameter.type) {\n          case BINDING_ELEMENT:\n            break;\n          case REST_PARAMETER:\n            this.checkVisit_(i === tree.parameters.length - 1, parameter, 'rest parameters must be the last parameter in a parameter list');\n            this.checkType_(BINDING_IDENTIFIER, parameter.identifier, 'binding identifier expected');\n            break;\n          default:\n            this.fail_(parameter, 'parameters must be identifiers or rest' + (\" parameters. Found: \" + parameter.type));\n            break;\n        }\n        this.visitAny(parameter);\n      }\n    },\n    visitForStatement: function(tree) {\n      if (tree.initializer !== null) {\n        this.checkVisit_(tree.initializer.isExpression() || tree.initializer.type === VARIABLE_DECLARATION_LIST, tree.initializer, 'variable declaration list or expression expected');\n      }\n      if (tree.condition !== null) {\n        this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');\n      }\n      if (tree.increment !== null) {\n        this.checkVisit_(tree.increment.isExpression(), tree.increment, 'expression expected');\n      }\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n    },\n    visitFunctionBody: function(tree) {\n      for (var i = 0; i < tree.statements.length; i++) {\n        var statement = tree.statements[i];\n        this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected');\n      }\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected');\n      this.visitFunction_(tree);\n    },\n    visitFunctionExpression: function(tree) {\n      if (tree.name !== null) {\n        this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected');\n      }\n      this.visitFunction_(tree);\n    },\n    visitFunction_: function(tree) {\n      this.checkType_(FORMAL_PARAMETER_LIST, tree.parameterList, 'formal parameters expected');\n      this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');\n    },\n    visitGetAccessor: function(tree) {\n      this.checkPropertyName_(tree.name);\n      this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');\n    },\n    visitIfStatement: function(tree) {\n      this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');\n      this.checkVisit_(tree.ifClause.isStatement(), tree.ifClause, 'statement expected');\n      if (tree.elseClause !== null) {\n        this.checkVisit_(tree.elseClause.isStatement(), tree.elseClause, 'statement expected');\n      }\n    },\n    visitImportSpecifier: function(tree) {\n      this.checkType_(IMPORTED_BINDING, tree.binding, 'ImportedBinding expected');\n    },\n    visitImportedBinding: function(tree) {\n      this.checkType_(BINDING_IDENTIFIER, tree.binding, 'binding identifier expected');\n    },\n    visitLabelledStatement: function(tree) {\n      this.checkVisit_(tree.statement.isStatement(), tree.statement, 'statement expected');\n    },\n    visitMemberExpression: function(tree) {\n      this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');\n      if (tree.operand instanceof NewExpression) {\n        this.check_(tree.operand.args !== null, tree.operand, 'new args expected');\n      }\n      this.visitAny(tree.operand);\n    },\n    visitMemberLookupExpression: function(tree) {\n      this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');\n      if (tree.operand instanceof NewExpression) {\n        this.check_(tree.operand.args !== null, tree.operand, 'new args expected');\n      }\n      this.visitAny(tree.operand);\n    },\n    visitSyntaxErrorTree: function(tree) {\n      this.fail_(tree, (\"parse tree contains SyntaxError: \" + tree.message));\n    },\n    visitModuleSpecifier: function(tree) {\n      this.check_(tree.token.type == STRING || tree.moduleName, 'string or identifier expected');\n    },\n    visitModuleDeclaration: function(tree) {\n      this.checkType_(IMPORTED_BINDING, tree.binding, 'ImportedBinding expected');\n      this.checkType_(MODULE_SPECIFIER, tree.expression, 'module expression expected');\n    },\n    visitNewExpression: function(tree) {\n      this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');\n      this.visitAny(tree.args);\n    },\n    visitObjectLiteralExpression: function(tree) {\n      for (var i = 0; i < tree.propertyNameAndValues.length; i++) {\n        var propertyNameAndValue = tree.propertyNameAndValues[i];\n        switch (propertyNameAndValue.type) {\n          case GET_ACCESSOR:\n          case SET_ACCESSOR:\n          case PROPERTY_METHOD_ASSIGNMENT:\n            this.check_(!propertyNameAndValue.isStatic, propertyNameAndValue, 'static is not allowed in object literal expression');\n          case PROPERTY_NAME_ASSIGNMENT:\n          case PROPERTY_NAME_SHORTHAND:\n            break;\n          default:\n            this.fail_(propertyNameAndValue, 'accessor, property name ' + 'assignment or property method assigment expected');\n        }\n        this.visitAny(propertyNameAndValue);\n      }\n    },\n    visitObjectPattern: function(tree) {\n      for (var i = 0; i < tree.fields.length; i++) {\n        var field = tree.fields[i];\n        this.checkVisit_(field.type === OBJECT_PATTERN_FIELD || field.type === ASSIGNMENT_ELEMENT || field.type === BINDING_ELEMENT, field, 'object pattern field expected');\n      }\n    },\n    visitObjectPatternField: function(tree) {\n      this.checkPropertyName_(tree.name);\n      this.checkVisit_(tree.element.type === ASSIGNMENT_ELEMENT || tree.element.type === BINDING_ELEMENT || tree.element.isPattern() || tree.element.isLeftHandSideExpression(), tree.element, 'binding element expected');\n    },\n    visitParenExpression: function(tree) {\n      if (tree.expression.isPattern()) {\n        this.visitAny(tree.expression);\n      } else {\n        this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      }\n    },\n    visitPostfixExpression: function(tree) {\n      this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected');\n    },\n    visitPredefinedType: function(tree) {},\n    visitScript: function(tree) {\n      for (var i = 0; i < tree.scriptItemList.length; i++) {\n        var scriptItemList = tree.scriptItemList[i];\n        this.checkVisit_(scriptItemList.isScriptElement(), scriptItemList, 'global script item expected');\n      }\n    },\n    checkPropertyName_: function(tree) {\n      this.checkVisit_(tree.type === LITERAL_PROPERTY_NAME || tree.type === COMPUTED_PROPERTY_NAME, tree, 'property name expected');\n    },\n    visitPropertyNameAssignment: function(tree) {\n      this.checkPropertyName_(tree.name);\n      this.checkVisit_(tree.value.isAssignmentExpression(), tree.value, 'assignment expression expected');\n    },\n    visitPropertyNameShorthand: function(tree) {\n      this.check_(tree.name.type === IDENTIFIER, tree, 'identifier token expected');\n    },\n    visitLiteralPropertyName: function(tree) {\n      var type = tree.literalToken.type;\n      this.check_(tree.literalToken.isKeyword() || type === IDENTIFIER || type === NUMBER || type === STRING, tree, 'Unexpected token in literal property name');\n    },\n    visitTemplateLiteralExpression: function(tree) {\n      if (tree.operand) {\n        this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member or call expression expected');\n      }\n      for (var i = 0; i < tree.elements.length; i++) {\n        var element = tree.elements[i];\n        if (i % 2) {\n          this.checkType_(TEMPLATE_SUBSTITUTION, element, 'Template literal substitution expected');\n        } else {\n          this.checkType_(TEMPLATE_LITERAL_PORTION, element, 'Template literal portion expected');\n        }\n      }\n    },\n    visitReturnStatement: function(tree) {\n      if (tree.expression !== null) {\n        this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      }\n    },\n    visitSetAccessor: function(tree) {\n      this.checkPropertyName_(tree.name);\n      this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');\n    },\n    visitSpreadExpression: function(tree) {\n      this.checkVisit_(tree.expression.isAssignmentExpression(), tree.expression, 'assignment expression expected');\n    },\n    visitStateMachine: function(tree) {\n      this.fail_(tree, 'State machines are never valid outside of the ' + 'GeneratorTransformer pass.');\n    },\n    visitSwitchStatement: function(tree) {\n      this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      var defaultCount = 0;\n      for (var i = 0; i < tree.caseClauses.length; i++) {\n        var caseClause = tree.caseClauses[i];\n        if (caseClause.type === DEFAULT_CLAUSE) {\n          ++defaultCount;\n          this.checkVisit_(defaultCount <= 1, caseClause, 'no more than one default clause allowed');\n        } else {\n          this.checkType_(CASE_CLAUSE, caseClause, 'case or default clause expected');\n        }\n      }\n    },\n    visitThrowStatement: function(tree) {\n      if (tree.value === null) {\n        return;\n      }\n      this.checkVisit_(tree.value.isExpression(), tree.value, 'expression expected');\n    },\n    visitTryStatement: function(tree) {\n      this.checkType_(BLOCK, tree.body, 'block expected');\n      if (tree.catchBlock !== null) {\n        this.checkType_(CATCH, tree.catchBlock, 'catch block expected');\n      }\n      if (tree.finallyBlock !== null) {\n        this.checkType_(FINALLY, tree.finallyBlock, 'finally block expected');\n      }\n      if (tree.catchBlock === null && tree.finallyBlock === null) {\n        this.fail_(tree, 'either catch or finally must be present');\n      }\n    },\n    visitTypeArguments: function(tree) {\n      var args = tree.args;\n      for (var i = 0; i < args.length; i++) {\n        this.checkVisit_(args[i].isType(), args[i], 'Type arguments must be type expressions');\n      }\n    },\n    visitTypeName: function(tree) {\n      this.checkVisit_(tree.moduleName === null || tree.moduleName.type === TYPE_NAME, tree.moduleName, 'moduleName must be null or a TypeName');\n      this.check_(tree.name.type === IDENTIFIER, tree, 'name must be an identifier');\n    },\n    visitTypeReference: function(tree) {\n      this.checkType_(TYPE_NAME, tree.typeName, 'typeName must be a TypeName');\n      this.checkType_(TYPE_ARGUMENTS, tree.args, 'args must be a TypeArguments');\n    },\n    visitUnaryExpression: function(tree) {\n      this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected');\n    },\n    visitVariableDeclaration: function(tree) {\n      this.checkVisit_(tree.lvalue.isPattern() || tree.lvalue.type == BINDING_IDENTIFIER, tree.lvalue, 'binding identifier expected, found: ' + tree.lvalue.type);\n      if (tree.initializer !== null) {\n        this.checkVisit_(tree.initializer.isAssignmentExpression(), tree.initializer, 'assignment expression expected');\n      }\n    },\n    visitWhileStatement: function(tree) {\n      this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n    },\n    visitWithStatement: function(tree) {\n      this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');\n    },\n    visitYieldExpression: function(tree) {\n      if (tree.expression !== null) {\n        this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');\n      }\n    }\n  }, {}, ParseTreeVisitor);\n  ParseTreeValidator.validate = function(tree) {\n    var validator = new ParseTreeValidator();\n    try {\n      validator.visitAny(tree);\n    } catch (e) {\n      if (!(e instanceof ValidationError)) {\n        throw e;\n      }\n      var location = null;\n      if (e.tree !== null) {\n        location = e.tree.location;\n      }\n      if (location === null) {\n        location = tree.location;\n      }\n      var locationString = location !== null ? location.start.toString() : '(unknown)';\n      throw new Error((\"Parse tree validation failure '\" + e.message + \"' at \" + locationString + \":\") + '\\n\\n' + TreeWriter.write(tree, {\n        highlighted: e.tree,\n        showLineNumbers: true\n      }) + '\\n');\n    }\n  };\n  return {get ParseTreeValidator() {\n      return ParseTreeValidator;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/MultiTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/MultiTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/MultiTransformer\", path);\n  }\n  var ParseTreeValidator = System.get(\"traceur@0.0.74/src/syntax/ParseTreeValidator\").ParseTreeValidator;\n  var MultiTransformer = function MultiTransformer(reporter, validate) {\n    this.reporter_ = reporter;\n    this.validate_ = validate;\n    this.treeTransformers_ = [];\n  };\n  ($traceurRuntime.createClass)(MultiTransformer, {\n    append: function(treeTransformer) {\n      this.treeTransformers_.push(treeTransformer);\n    },\n    transform: function(tree) {\n      var reporter = this.reporter_;\n      var validate = this.validate_;\n      this.treeTransformers_.every((function(transformTree) {\n        tree = transformTree(tree);\n        if (reporter.hadError())\n          return false;\n        if (validate)\n          ParseTreeValidator.validate(tree);\n        return true;\n      }));\n      return tree;\n    }\n  }, {});\n  return {get MultiTransformer() {\n      return MultiTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/NumericLiteralTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/NumericLiteralTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/NumericLiteralTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      LiteralExpression = $__1.LiteralExpression,\n      LiteralPropertyName = $__1.LiteralPropertyName;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var NUMBER = System.get(\"traceur@0.0.74/src/syntax/TokenType\").NUMBER;\n  function needsTransform(token) {\n    return token.type === NUMBER && /^0[bBoO]/.test(token.value);\n  }\n  function transformToken(token) {\n    return new LiteralToken(NUMBER, String(token.processedValue), token.location);\n  }\n  var NumericLiteralTransformer = function NumericLiteralTransformer() {\n    $traceurRuntime.superConstructor($NumericLiteralTransformer).apply(this, arguments);\n  };\n  var $NumericLiteralTransformer = NumericLiteralTransformer;\n  ($traceurRuntime.createClass)(NumericLiteralTransformer, {\n    transformLiteralExpression: function(tree) {\n      var token = tree.literalToken;\n      if (needsTransform(token))\n        return new LiteralExpression(tree.location, transformToken(token));\n      return tree;\n    },\n    transformLiteralPropertyName: function(tree) {\n      var token = tree.literalToken;\n      if (needsTransform(token))\n        return new LiteralPropertyName(tree.location, transformToken(token));\n      return tree;\n    }\n  }, {}, ParseTreeTransformer);\n  return {get NumericLiteralTransformer() {\n      return NumericLiteralTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/ObjectLiteralTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/ObjectLiteralTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/ObjectLiteralTransformer\", path);\n  }\n  var FindVisitor = System.get(\"traceur@0.0.74/src/codegeneration/FindVisitor\").FindVisitor;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      FunctionExpression = $__1.FunctionExpression,\n      IdentifierExpression = $__1.IdentifierExpression,\n      LiteralExpression = $__1.LiteralExpression;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var IDENTIFIER = System.get(\"traceur@0.0.74/src/syntax/TokenType\").IDENTIFIER;\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      COMPUTED_PROPERTY_NAME = $__4.COMPUTED_PROPERTY_NAME,\n      LITERAL_PROPERTY_NAME = $__4.LITERAL_PROPERTY_NAME;\n  var $__5 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createAssignmentExpression = $__5.createAssignmentExpression,\n      createCommaExpression = $__5.createCommaExpression,\n      createDefineProperty = $__5.createDefineProperty,\n      createEmptyParameterList = $__5.createEmptyParameterList,\n      createFunctionExpression = $__5.createFunctionExpression,\n      createIdentifierExpression = $__5.createIdentifierExpression,\n      createObjectCreate = $__5.createObjectCreate,\n      createObjectLiteralExpression = $__5.createObjectLiteralExpression,\n      createParenExpression = $__5.createParenExpression,\n      createPropertyNameAssignment = $__5.createPropertyNameAssignment,\n      createStringLiteral = $__5.createStringLiteral;\n  var propName = System.get(\"traceur@0.0.74/src/staticsemantics/PropName\").propName;\n  var transformOptions = System.get(\"traceur@0.0.74/src/Options\").transformOptions;\n  var FindAdvancedProperty = function FindAdvancedProperty(tree) {\n    this.protoExpression = null;\n    $traceurRuntime.superConstructor($FindAdvancedProperty).call(this, tree, true);\n  };\n  var $FindAdvancedProperty = FindAdvancedProperty;\n  ($traceurRuntime.createClass)(FindAdvancedProperty, {\n    visitPropertyNameAssignment: function(tree) {\n      if (isProtoName(tree.name))\n        this.protoExpression = tree.value;\n      else\n        $traceurRuntime.superGet(this, $FindAdvancedProperty.prototype, \"visitPropertyNameAssignment\").call(this, tree);\n    },\n    visitComputedPropertyName: function(tree) {\n      if (transformOptions.computedPropertyNames)\n        this.found = true;\n    }\n  }, {}, FindVisitor);\n  function isProtoName(tree) {\n    return propName(tree) === '__proto__';\n  }\n  var ObjectLiteralTransformer = function ObjectLiteralTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($ObjectLiteralTransformer).call(this, identifierGenerator);\n    this.protoExpression = null;\n    this.needsAdvancedTransform = false;\n    this.seenAccessors = null;\n  };\n  var $ObjectLiteralTransformer = ObjectLiteralTransformer;\n  ($traceurRuntime.createClass)(ObjectLiteralTransformer, {\n    findSeenAccessor_: function(name) {\n      if (name.type === COMPUTED_PROPERTY_NAME)\n        return null;\n      var s = propName(name);\n      return this.seenAccessors[s];\n    },\n    removeSeenAccessor_: function(name) {\n      if (name.type === COMPUTED_PROPERTY_NAME)\n        return;\n      var s = propName(name);\n      delete this.seenAccessors[s];\n    },\n    addSeenAccessor_: function(name, descr) {\n      if (name.type === COMPUTED_PROPERTY_NAME)\n        return;\n      var s = propName(name);\n      this.seenAccessors[s] = descr;\n    },\n    createProperty_: function(name, descr) {\n      var expression;\n      if (name.type === LITERAL_PROPERTY_NAME) {\n        if (this.needsAdvancedTransform)\n          expression = this.getPropertyName_(name);\n        else\n          expression = name;\n      } else {\n        expression = name.expression;\n      }\n      if (descr.get || descr.set) {\n        var oldAccessor = this.findSeenAccessor_(name);\n        if (oldAccessor) {\n          oldAccessor.get = descr.get || oldAccessor.get;\n          oldAccessor.set = descr.set || oldAccessor.set;\n          this.removeSeenAccessor_(name);\n          return null;\n        } else {\n          this.addSeenAccessor_(name, descr);\n        }\n      }\n      return [expression, descr];\n    },\n    getPropertyName_: function(nameTree) {\n      var token = nameTree.literalToken;\n      switch (token.type) {\n        case IDENTIFIER:\n          return createStringLiteral(token.value);\n        default:\n          if (token.isKeyword())\n            return createStringLiteral(token.type);\n          return new LiteralExpression(token.location, token);\n      }\n    },\n    transformClassDeclaration: function(tree) {\n      return tree;\n    },\n    transformClassExpression: function(tree) {\n      return tree;\n    },\n    transformObjectLiteralExpression: function(tree) {\n      var oldNeedsTransform = this.needsAdvancedTransform;\n      var oldSeenAccessors = this.seenAccessors;\n      try {\n        var finder = new FindAdvancedProperty(tree);\n        if (!finder.found) {\n          this.needsAdvancedTransform = false;\n          return $traceurRuntime.superGet(this, $ObjectLiteralTransformer.prototype, \"transformObjectLiteralExpression\").call(this, tree);\n        }\n        this.needsAdvancedTransform = true;\n        this.seenAccessors = Object.create(null);\n        var properties = this.transformList(tree.propertyNameAndValues);\n        properties = properties.filter((function(tree) {\n          return tree;\n        }));\n        var tempVar = this.addTempVar();\n        var tempVarIdentifierExpression = createIdentifierExpression(tempVar);\n        var expressions = properties.map((function(property) {\n          var expression = property[0];\n          var descr = property[1];\n          return createDefineProperty(tempVarIdentifierExpression, expression, descr);\n        }));\n        var protoExpression = this.transformAny(finder.protoExpression);\n        var objectExpression;\n        if (protoExpression)\n          objectExpression = createObjectCreate(protoExpression);\n        else\n          objectExpression = createObjectLiteralExpression([]);\n        expressions.unshift(createAssignmentExpression(tempVarIdentifierExpression, objectExpression));\n        expressions.push(tempVarIdentifierExpression);\n        return createParenExpression(createCommaExpression(expressions));\n      } finally {\n        this.needsAdvancedTransform = oldNeedsTransform;\n        this.seenAccessors = oldSeenAccessors;\n      }\n    },\n    transformPropertyNameAssignment: function(tree) {\n      if (!this.needsAdvancedTransform)\n        return $traceurRuntime.superGet(this, $ObjectLiteralTransformer.prototype, \"transformPropertyNameAssignment\").call(this, tree);\n      if (isProtoName(tree.name))\n        return null;\n      return this.createProperty_(tree.name, {\n        value: this.transformAny(tree.value),\n        configurable: true,\n        enumerable: true,\n        writable: true\n      });\n    },\n    transformGetAccessor: function(tree) {\n      if (!this.needsAdvancedTransform)\n        return $traceurRuntime.superGet(this, $ObjectLiteralTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n      var body = this.transformAny(tree.body);\n      var func = createFunctionExpression(createEmptyParameterList(), body);\n      return this.createProperty_(tree.name, {\n        get: func,\n        configurable: true,\n        enumerable: true\n      });\n    },\n    transformSetAccessor: function(tree) {\n      if (!this.needsAdvancedTransform)\n        return $traceurRuntime.superGet(this, $ObjectLiteralTransformer.prototype, \"transformSetAccessor\").call(this, tree);\n      var body = this.transformAny(tree.body);\n      var parameterList = this.transformAny(tree.parameterList);\n      var func = createFunctionExpression(parameterList, body);\n      return this.createProperty_(tree.name, {\n        set: func,\n        configurable: true,\n        enumerable: true\n      });\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      var func = new FunctionExpression(tree.location, null, tree.functionKind, this.transformAny(tree.parameterList), tree.typeAnnotation, [], this.transformAny(tree.body));\n      if (!this.needsAdvancedTransform) {\n        return createPropertyNameAssignment(tree.name, func);\n      }\n      var expression = this.transformAny(tree.name);\n      return this.createProperty_(tree.name, {\n        value: func,\n        configurable: true,\n        enumerable: true,\n        writable: true\n      });\n    },\n    transformPropertyNameShorthand: function(tree) {\n      if (!this.needsAdvancedTransform)\n        return $traceurRuntime.superGet(this, $ObjectLiteralTransformer.prototype, \"transformPropertyNameShorthand\").call(this, tree);\n      var expression = this.transformAny(tree.name);\n      return this.createProperty_(tree.name, {\n        value: new IdentifierExpression(tree.location, tree.name.identifierToken),\n        configurable: true,\n        enumerable: false,\n        writable: true\n      });\n    }\n  }, {}, TempVarTransformer);\n  return {get ObjectLiteralTransformer() {\n      return ObjectLiteralTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/PropertyNameShorthandTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/PropertyNameShorthandTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/PropertyNameShorthandTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      IdentifierExpression = $__0.IdentifierExpression,\n      LiteralPropertyName = $__0.LiteralPropertyName,\n      PropertyNameAssignment = $__0.PropertyNameAssignment;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var PropertyNameShorthandTransformer = function PropertyNameShorthandTransformer() {\n    $traceurRuntime.superConstructor($PropertyNameShorthandTransformer).apply(this, arguments);\n  };\n  var $PropertyNameShorthandTransformer = PropertyNameShorthandTransformer;\n  ($traceurRuntime.createClass)(PropertyNameShorthandTransformer, {transformPropertyNameShorthand: function(tree) {\n      return new PropertyNameAssignment(tree.location, new LiteralPropertyName(tree.location, tree.name), new IdentifierExpression(tree.location, tree.name));\n    }}, {}, ParseTreeTransformer);\n  return {get PropertyNameShorthandTransformer() {\n      return PropertyNameShorthandTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/outputgeneration/regexpuRewritePattern\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/outputgeneration/regexpuRewritePattern\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/outputgeneration/regexpuRewritePattern\", path);\n  }\n  var modules = {};\n  var module = {};\n  var exports = module.exports = {};\n  var require = function(id) {\n    return modules[id];\n  };\n  ;\n  (function(root) {\n    var freeExports = typeof exports == 'object' && exports;\n    var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;\n    var freeGlobal = typeof global == 'object' && global;\n    if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n      root = freeGlobal;\n    }\n    var ERRORS = {\n      'rangeOrder': 'A range\\u2019s `stop` value must be greater than or equal ' + 'to the `start` value.',\n      'codePointRange': 'Invalid code point value. Code points range from ' + 'U+000000 to U+10FFFF.'\n    };\n    var HIGH_SURROGATE_MIN = 0xD800;\n    var HIGH_SURROGATE_MAX = 0xDBFF;\n    var LOW_SURROGATE_MIN = 0xDC00;\n    var LOW_SURROGATE_MAX = 0xDFFF;\n    var regexNull = /\\\\x00([^0123456789]|$)/g;\n    var object = {};\n    var hasOwnProperty = object.hasOwnProperty;\n    var extend = function(destination, source) {\n      var key;\n      for (key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          destination[key] = source[key];\n        }\n      }\n      return destination;\n    };\n    var forEach = function(array, callback) {\n      var index = -1;\n      var length = array.length;\n      while (++index < length) {\n        callback(array[index], index);\n      }\n    };\n    var toString = object.toString;\n    var isArray = function(value) {\n      return toString.call(value) == '[object Array]';\n    };\n    var isNumber = function(value) {\n      return typeof value == 'number' || toString.call(value) == '[object Number]';\n    };\n    var zeroes = '0000';\n    var pad = function(number, totalCharacters) {\n      var string = String(number);\n      return string.length < totalCharacters ? (zeroes + string).slice(-totalCharacters) : string;\n    };\n    var hex = function(number) {\n      return Number(number).toString(16).toUpperCase();\n    };\n    var slice = [].slice;\n    var dataFromCodePoints = function(codePoints) {\n      var index = -1;\n      var length = codePoints.length;\n      var max = length - 1;\n      var result = [];\n      var isStart = true;\n      var tmp;\n      var previous = 0;\n      while (++index < length) {\n        tmp = codePoints[index];\n        if (isStart) {\n          result.push(tmp);\n          previous = tmp;\n          isStart = false;\n        } else {\n          if (tmp == previous + 1) {\n            if (index != max) {\n              previous = tmp;\n              continue;\n            } else {\n              isStart = true;\n              result.push(tmp + 1);\n            }\n          } else {\n            result.push(previous + 1, tmp);\n            previous = tmp;\n          }\n        }\n      }\n      if (!isStart) {\n        result.push(tmp + 1);\n      }\n      return result;\n    };\n    var dataRemove = function(data, codePoint) {\n      var index = 0;\n      var start;\n      var end;\n      var length = data.length;\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1];\n        if (codePoint >= start && codePoint < end) {\n          if (codePoint == start) {\n            if (end == start + 1) {\n              data.splice(index, 2);\n              return data;\n            } else {\n              data[index] = codePoint + 1;\n              return data;\n            }\n          } else if (codePoint == end - 1) {\n            data[index + 1] = codePoint;\n            return data;\n          } else {\n            data.splice(index, 2, start, codePoint, codePoint + 1, end);\n            return data;\n          }\n        }\n        index += 2;\n      }\n      return data;\n    };\n    var dataRemoveRange = function(data, rangeStart, rangeEnd) {\n      if (rangeEnd < rangeStart) {\n        throw Error(ERRORS.rangeOrder);\n      }\n      var index = 0;\n      var start;\n      var end;\n      while (index < data.length) {\n        start = data[index];\n        end = data[index + 1] - 1;\n        if (start > rangeEnd) {\n          return data;\n        }\n        if (rangeStart <= start && rangeEnd >= end) {\n          data.splice(index, 2);\n          continue;\n        }\n        if (rangeStart >= start && rangeEnd < end) {\n          if (rangeStart == start) {\n            data[index] = rangeEnd + 1;\n            data[index + 1] = end + 1;\n            return data;\n          }\n          data.splice(index, 2, start, rangeStart, rangeEnd + 1, end + 1);\n          return data;\n        }\n        if (rangeStart >= start && rangeStart <= end) {\n          data[index + 1] = rangeStart;\n        } else if (rangeEnd >= start && rangeEnd <= end) {\n          data[index] = rangeEnd + 1;\n          return data;\n        }\n        index += 2;\n      }\n      return data;\n    };\n    var dataAdd = function(data, codePoint) {\n      var index = 0;\n      var start;\n      var end;\n      var lastIndex = null;\n      var length = data.length;\n      if (codePoint < 0x0 || codePoint > 0x10FFFF) {\n        throw RangeError(ERRORS.codePointRange);\n      }\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1];\n        if (codePoint >= start && codePoint < end) {\n          return data;\n        }\n        if (codePoint == start - 1) {\n          data[index] = codePoint;\n          return data;\n        }\n        if (start > codePoint) {\n          data.splice(lastIndex != null ? lastIndex + 2 : 0, 0, codePoint, codePoint + 1);\n          return data;\n        }\n        if (codePoint == end) {\n          if (codePoint + 1 == data[index + 2]) {\n            data.splice(index, 4, start, data[index + 3]);\n            return data;\n          }\n          data[index + 1] = codePoint + 1;\n          return data;\n        }\n        lastIndex = index;\n        index += 2;\n      }\n      data.push(codePoint, codePoint + 1);\n      return data;\n    };\n    var dataAddData = function(dataA, dataB) {\n      var index = 0;\n      var start;\n      var end;\n      var data = dataA.slice();\n      var length = dataB.length;\n      while (index < length) {\n        start = dataB[index];\n        end = dataB[index + 1] - 1;\n        if (start == end) {\n          data = dataAdd(data, start);\n        } else {\n          data = dataAddRange(data, start, end);\n        }\n        index += 2;\n      }\n      return data;\n    };\n    var dataRemoveData = function(dataA, dataB) {\n      var index = 0;\n      var start;\n      var end;\n      var data = dataA.slice();\n      var length = dataB.length;\n      while (index < length) {\n        start = dataB[index];\n        end = dataB[index + 1] - 1;\n        if (start == end) {\n          data = dataRemove(data, start);\n        } else {\n          data = dataRemoveRange(data, start, end);\n        }\n        index += 2;\n      }\n      return data;\n    };\n    var dataAddRange = function(data, rangeStart, rangeEnd) {\n      if (rangeEnd < rangeStart) {\n        throw Error(ERRORS.rangeOrder);\n      }\n      if (rangeStart < 0x0 || rangeStart > 0x10FFFF || rangeEnd < 0x0 || rangeEnd > 0x10FFFF) {\n        throw RangeError(ERRORS.codePointRange);\n      }\n      var index = 0;\n      var start;\n      var end;\n      var added = false;\n      var length = data.length;\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1];\n        if (added) {\n          if (start == rangeEnd + 1) {\n            data.splice(index - 1, 2);\n            return data;\n          }\n          if (start > rangeEnd) {\n            return data;\n          }\n          if (start >= rangeStart && start <= rangeEnd) {\n            if (end > rangeStart && end - 1 <= rangeEnd) {\n              data.splice(index, 2);\n              index -= 2;\n            } else {\n              data.splice(index - 1, 2);\n              index -= 2;\n            }\n          }\n        } else if (start == rangeEnd + 1) {\n          data[index] = rangeStart;\n          return data;\n        } else if (start > rangeEnd) {\n          data.splice(index, 0, rangeStart, rangeEnd + 1);\n          return data;\n        } else if (rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end) {\n          return data;\n        } else if ((rangeStart >= start && rangeStart < end) || end == rangeStart) {\n          data[index + 1] = rangeEnd + 1;\n          added = true;\n        } else if (rangeStart <= start && rangeEnd + 1 >= end) {\n          data[index] = rangeStart;\n          data[index + 1] = rangeEnd + 1;\n          added = true;\n        }\n        index += 2;\n      }\n      if (!added) {\n        data.push(rangeStart, rangeEnd + 1);\n      }\n      return data;\n    };\n    var dataContains = function(data, codePoint) {\n      var index = 0;\n      var start;\n      var end;\n      var length = data.length;\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1];\n        if (codePoint >= start && codePoint < end) {\n          return true;\n        }\n        index += 2;\n      }\n      return false;\n    };\n    var dataIntersection = function(data, codePoints) {\n      var index = 0;\n      var length = codePoints.length;\n      var codePoint;\n      var result = [];\n      while (index < length) {\n        codePoint = codePoints[index];\n        if (dataContains(data, codePoint)) {\n          result.push(codePoint);\n        }\n        ++index;\n      }\n      return dataFromCodePoints(result);\n    };\n    var dataIsEmpty = function(data) {\n      return !data.length;\n    };\n    var dataIsSingleton = function(data) {\n      return data.length == 2 && data[0] + 1 == data[1];\n    };\n    var dataToArray = function(data) {\n      var index = 0;\n      var start;\n      var end;\n      var result = [];\n      var length = data.length;\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1];\n        while (start < end) {\n          result.push(start);\n          ++start;\n        }\n        index += 2;\n      }\n      return result;\n    };\n    var floor = Math.floor;\n    var highSurrogate = function(codePoint) {\n      return parseInt(floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN, 10);\n    };\n    var lowSurrogate = function(codePoint) {\n      return parseInt((codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN, 10);\n    };\n    var stringFromCharCode = String.fromCharCode;\n    var codePointToString = function(codePoint) {\n      var string;\n      if (codePoint == 0x09) {\n        string = '\\\\t';\n      } else if (codePoint == 0x0A) {\n        string = '\\\\n';\n      } else if (codePoint == 0x0C) {\n        string = '\\\\f';\n      } else if (codePoint == 0x0D) {\n        string = '\\\\r';\n      } else if (codePoint == 0x5C) {\n        string = '\\\\\\\\';\n      } else if (codePoint == 0x24 || (codePoint >= 0x28 && codePoint <= 0x2B) || codePoint == 0x2D || codePoint == 0x2E || codePoint == 0x3F || (codePoint >= 0x5B && codePoint <= 0x5E) || (codePoint >= 0x7B && codePoint <= 0x7D)) {\n        string = '\\\\' + stringFromCharCode(codePoint);\n      } else if (codePoint >= 0x20 && codePoint <= 0x7E) {\n        string = stringFromCharCode(codePoint);\n      } else if (codePoint <= 0xFF) {\n        string = '\\\\x' + pad(hex(codePoint), 2);\n      } else {\n        string = '\\\\u' + pad(hex(codePoint), 4);\n      }\n      return string;\n    };\n    var symbolToCodePoint = function(symbol) {\n      var length = symbol.length;\n      var first = symbol.charCodeAt(0);\n      var second;\n      if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > 1) {\n        second = symbol.charCodeAt(1);\n        return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n      }\n      return first;\n    };\n    var createBMPCharacterClasses = function(data) {\n      var result = '';\n      var index = 0;\n      var start;\n      var end;\n      var length = data.length;\n      if (dataIsSingleton(data)) {\n        return codePointToString(data[0]);\n      }\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1] - 1;\n        if (start == end) {\n          result += codePointToString(start);\n        } else if (start + 1 == end) {\n          result += codePointToString(start) + codePointToString(end);\n        } else {\n          result += codePointToString(start) + '-' + codePointToString(end);\n        }\n        index += 2;\n      }\n      return '[' + result + ']';\n    };\n    var splitAtBMP = function(data) {\n      var loneHighSurrogates = [];\n      var bmp = [];\n      var astral = [];\n      var index = 0;\n      var start;\n      var end;\n      var length = data.length;\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1] - 1;\n        if (start <= 0xFFFF && end <= 0xFFFF) {\n          if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) {\n            if (end <= HIGH_SURROGATE_MAX) {\n              loneHighSurrogates.push(start, end + 1);\n            } else {\n              loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);\n              bmp.push(HIGH_SURROGATE_MAX + 1, end + 1);\n            }\n          } else if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) {\n            bmp.push(start, HIGH_SURROGATE_MIN);\n            loneHighSurrogates.push(HIGH_SURROGATE_MIN, end + 1);\n          } else if (start < HIGH_SURROGATE_MIN && end > HIGH_SURROGATE_MAX) {\n            bmp.push(start, HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1, end + 1);\n            loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);\n          } else {\n            bmp.push(start, end + 1);\n          }\n        } else if (start <= 0xFFFF && end > 0xFFFF) {\n          if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) {\n            loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);\n            bmp.push(HIGH_SURROGATE_MAX + 1, 0xFFFF + 1);\n          } else if (start < HIGH_SURROGATE_MIN) {\n            bmp.push(start, HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1, 0xFFFF + 1);\n            loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);\n          } else {\n            bmp.push(start, 0xFFFF + 1);\n          }\n          astral.push(0xFFFF + 1, end + 1);\n        } else {\n          astral.push(start, end + 1);\n        }\n        index += 2;\n      }\n      return {\n        'loneHighSurrogates': loneHighSurrogates,\n        'bmp': bmp,\n        'astral': astral\n      };\n    };\n    var optimizeSurrogateMappings = function(surrogateMappings) {\n      var result = [];\n      var tmpLow = [];\n      var addLow = false;\n      var mapping;\n      var nextMapping;\n      var highSurrogates;\n      var lowSurrogates;\n      var nextHighSurrogates;\n      var nextLowSurrogates;\n      var index = -1;\n      var length = surrogateMappings.length;\n      while (++index < length) {\n        mapping = surrogateMappings[index];\n        nextMapping = surrogateMappings[index + 1];\n        if (!nextMapping) {\n          result.push(mapping);\n          continue;\n        }\n        highSurrogates = mapping[0];\n        lowSurrogates = mapping[1];\n        nextHighSurrogates = nextMapping[0];\n        nextLowSurrogates = nextMapping[1];\n        tmpLow = lowSurrogates;\n        while (nextHighSurrogates && highSurrogates[0] == nextHighSurrogates[0] && highSurrogates[1] == nextHighSurrogates[1]) {\n          if (dataIsSingleton(nextLowSurrogates)) {\n            tmpLow = dataAdd(tmpLow, nextLowSurrogates[0]);\n          } else {\n            tmpLow = dataAddRange(tmpLow, nextLowSurrogates[0], nextLowSurrogates[1] - 1);\n          }\n          ++index;\n          mapping = surrogateMappings[index];\n          highSurrogates = mapping[0];\n          lowSurrogates = mapping[1];\n          nextMapping = surrogateMappings[index + 1];\n          nextHighSurrogates = nextMapping && nextMapping[0];\n          nextLowSurrogates = nextMapping && nextMapping[1];\n          addLow = true;\n        }\n        result.push([highSurrogates, addLow ? tmpLow : lowSurrogates]);\n        addLow = false;\n      }\n      return optimizeByLowSurrogates(result);\n    };\n    var optimizeByLowSurrogates = function(surrogateMappings) {\n      if (surrogateMappings.length == 1) {\n        return surrogateMappings;\n      }\n      var index = -1;\n      var innerIndex = -1;\n      while (++index < surrogateMappings.length) {\n        var mapping = surrogateMappings[index];\n        var lowSurrogates = mapping[1];\n        var lowSurrogateStart = lowSurrogates[0];\n        var lowSurrogateEnd = lowSurrogates[1];\n        innerIndex = index;\n        while (++innerIndex < surrogateMappings.length) {\n          var otherMapping = surrogateMappings[innerIndex];\n          var otherLowSurrogates = otherMapping[1];\n          var otherLowSurrogateStart = otherLowSurrogates[0];\n          var otherLowSurrogateEnd = otherLowSurrogates[1];\n          if (lowSurrogateStart == otherLowSurrogateStart && lowSurrogateEnd == otherLowSurrogateEnd) {\n            if (dataIsSingleton(otherMapping[0])) {\n              mapping[0] = dataAdd(mapping[0], otherMapping[0][0]);\n            } else {\n              mapping[0] = dataAddRange(mapping[0], otherMapping[0][0], otherMapping[0][1] - 1);\n            }\n            surrogateMappings.splice(innerIndex, 1);\n            --innerIndex;\n          }\n        }\n      }\n      return surrogateMappings;\n    };\n    var surrogateSet = function(data) {\n      if (!data.length) {\n        return [];\n      }\n      var index = 0;\n      var start;\n      var end;\n      var startHigh;\n      var startLow;\n      var prevStartHigh = 0;\n      var prevEndHigh = 0;\n      var tmpLow = [];\n      var endHigh;\n      var endLow;\n      var surrogateMappings = [];\n      var length = data.length;\n      var dataHigh = [];\n      while (index < length) {\n        start = data[index];\n        end = data[index + 1] - 1;\n        startHigh = highSurrogate(start);\n        startLow = lowSurrogate(start);\n        endHigh = highSurrogate(end);\n        endLow = lowSurrogate(end);\n        var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN;\n        var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX;\n        var complete = false;\n        if (startHigh == endHigh || startsWithLowestLowSurrogate && endsWithHighestLowSurrogate) {\n          surrogateMappings.push([[startHigh, endHigh + 1], [startLow, endLow + 1]]);\n          complete = true;\n        } else {\n          surrogateMappings.push([[startHigh, startHigh + 1], [startLow, LOW_SURROGATE_MAX + 1]]);\n        }\n        if (!complete && startHigh + 1 < endHigh) {\n          if (endsWithHighestLowSurrogate) {\n            surrogateMappings.push([[startHigh + 1, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]);\n            complete = true;\n          } else {\n            surrogateMappings.push([[startHigh + 1, endHigh], [LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1]]);\n          }\n        }\n        if (!complete) {\n          surrogateMappings.push([[endHigh, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]);\n        }\n        prevStartHigh = startHigh;\n        prevEndHigh = endHigh;\n        index += 2;\n      }\n      return optimizeSurrogateMappings(surrogateMappings);\n    };\n    var createSurrogateCharacterClasses = function(surrogateMappings) {\n      var result = [];\n      forEach(surrogateMappings, function(surrogateMapping) {\n        var highSurrogates = surrogateMapping[0];\n        var lowSurrogates = surrogateMapping[1];\n        result.push(createBMPCharacterClasses(highSurrogates) + createBMPCharacterClasses(lowSurrogates));\n      });\n      return result.join('|');\n    };\n    var createCharacterClassesFromData = function(data) {\n      var result = [];\n      var parts = splitAtBMP(data);\n      var loneHighSurrogates = parts.loneHighSurrogates;\n      var bmp = parts.bmp;\n      var astral = parts.astral;\n      var hasAstral = !dataIsEmpty(parts.astral);\n      var hasLoneSurrogates = !dataIsEmpty(loneHighSurrogates);\n      var surrogateMappings = surrogateSet(astral);\n      if (!hasAstral && hasLoneSurrogates) {\n        bmp = dataAddData(bmp, loneHighSurrogates);\n      }\n      if (!dataIsEmpty(bmp)) {\n        result.push(createBMPCharacterClasses(bmp));\n      }\n      if (surrogateMappings.length) {\n        result.push(createSurrogateCharacterClasses(surrogateMappings));\n      }\n      if (hasAstral && hasLoneSurrogates) {\n        result.push(createBMPCharacterClasses(loneHighSurrogates));\n      }\n      return result.join('|');\n    };\n    var regenerate = function(value) {\n      if (arguments.length > 1) {\n        value = slice.call(arguments);\n      }\n      if (this instanceof regenerate) {\n        this.data = [];\n        return value ? this.add(value) : this;\n      }\n      return (new regenerate).add(value);\n    };\n    regenerate.version = '1.0.1';\n    var proto = regenerate.prototype;\n    extend(proto, {\n      'add': function(value) {\n        var $this = this;\n        if (value == null) {\n          return $this;\n        }\n        if (value instanceof regenerate) {\n          $this.data = dataAddData($this.data, value.data);\n          return $this;\n        }\n        if (arguments.length > 1) {\n          value = slice.call(arguments);\n        }\n        if (isArray(value)) {\n          forEach(value, function(item) {\n            $this.add(item);\n          });\n          return $this;\n        }\n        $this.data = dataAdd($this.data, isNumber(value) ? value : symbolToCodePoint(value));\n        return $this;\n      },\n      'remove': function(value) {\n        var $this = this;\n        if (value == null) {\n          return $this;\n        }\n        if (value instanceof regenerate) {\n          $this.data = dataRemoveData($this.data, value.data);\n          return $this;\n        }\n        if (arguments.length > 1) {\n          value = slice.call(arguments);\n        }\n        if (isArray(value)) {\n          forEach(value, function(item) {\n            $this.remove(item);\n          });\n          return $this;\n        }\n        $this.data = dataRemove($this.data, isNumber(value) ? value : symbolToCodePoint(value));\n        return $this;\n      },\n      'addRange': function(start, end) {\n        var $this = this;\n        $this.data = dataAddRange($this.data, isNumber(start) ? start : symbolToCodePoint(start), isNumber(end) ? end : symbolToCodePoint(end));\n        return $this;\n      },\n      'removeRange': function(start, end) {\n        var $this = this;\n        var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start);\n        var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end);\n        $this.data = dataRemoveRange($this.data, startCodePoint, endCodePoint);\n        return $this;\n      },\n      'intersection': function(argument) {\n        var $this = this;\n        var array = argument instanceof regenerate ? dataToArray(argument.data) : argument;\n        $this.data = dataIntersection($this.data, array);\n        return $this;\n      },\n      'contains': function(codePoint) {\n        return dataContains(this.data, isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint));\n      },\n      'clone': function() {\n        var set = new regenerate;\n        set.data = this.data.slice(0);\n        return set;\n      },\n      'toString': function() {\n        var result = createCharacterClassesFromData(this.data);\n        return result.replace(regexNull, '\\\\0$1');\n      },\n      'toRegExp': function(flags) {\n        return RegExp(this.toString(), flags || '');\n      },\n      'valueOf': function() {\n        return dataToArray(this.data);\n      }\n    });\n    proto.toArray = proto.valueOf;\n    if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n      define(function() {\n        return regenerate;\n      });\n    } else if (freeExports && !freeExports.nodeType) {\n      if (freeModule) {\n        freeModule.exports = regenerate;\n      } else {\n        freeExports.regenerate = regenerate;\n      }\n    } else {\n      root.regenerate = regenerate;\n    }\n  }(this));\n  modules['regenerate'] = module.exports || window.regenerate;\n  ;\n  (function() {\n    'use strict';\n    var objectTypes = {\n      'function': true,\n      'object': true\n    };\n    var root = (objectTypes[typeof window] && window) || this;\n    var oldRoot = root;\n    var freeExports = objectTypes[typeof exports] && exports;\n    var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n    var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;\n    if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n      root = freeGlobal;\n    }\n    var stringFromCharCode = String.fromCharCode;\n    var floor = Math.floor;\n    function fromCodePoint() {\n      var MAX_SIZE = 0x4000;\n      var codeUnits = [];\n      var highSurrogate;\n      var lowSurrogate;\n      var index = -1;\n      var length = arguments.length;\n      if (!length) {\n        return '';\n      }\n      var result = '';\n      while (++index < length) {\n        var codePoint = Number(arguments[index]);\n        if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) {\n          throw RangeError('Invalid code point: ' + codePoint);\n        }\n        if (codePoint <= 0xFFFF) {\n          codeUnits.push(codePoint);\n        } else {\n          codePoint -= 0x10000;\n          highSurrogate = (codePoint >> 10) + 0xD800;\n          lowSurrogate = (codePoint % 0x400) + 0xDC00;\n          codeUnits.push(highSurrogate, lowSurrogate);\n        }\n        if (index + 1 == length || codeUnits.length > MAX_SIZE) {\n          result += stringFromCharCode.apply(null, codeUnits);\n          codeUnits.length = 0;\n        }\n      }\n      return result;\n    }\n    function assertType(type, expected) {\n      if (expected.indexOf('|') == -1) {\n        if (type == expected) {\n          return;\n        }\n        throw Error('Invalid node type: ' + type);\n      }\n      expected = assertType.hasOwnProperty(expected) ? assertType[expected] : (assertType[expected] = RegExp('^(?:' + expected + ')$'));\n      if (expected.test(type)) {\n        return;\n      }\n      throw Error('Invalid node type: ' + type);\n    }\n    function generate(node) {\n      var type = node.type;\n      if (generate.hasOwnProperty(type) && typeof generate[type] == 'function') {\n        return generate[type](node);\n      }\n      throw Error('Invalid node type: ' + type);\n    }\n    function generateAlternative(node) {\n      assertType(node.type, 'alternative');\n      var terms = node.body,\n          length = terms ? terms.length : 0;\n      if (length == 1) {\n        return generateTerm(terms[0]);\n      } else {\n        var i = -1,\n            result = '';\n        while (++i < length) {\n          result += generateTerm(terms[i]);\n        }\n        return result;\n      }\n    }\n    function generateAnchor(node) {\n      assertType(node.type, 'anchor');\n      switch (node.kind) {\n        case 'start':\n          return '^';\n        case 'end':\n          return '$';\n        case 'boundary':\n          return '\\\\b';\n        case 'not-boundary':\n          return '\\\\B';\n        default:\n          throw Error('Invalid assertion');\n      }\n    }\n    function generateAtom(node) {\n      assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value');\n      return generate(node);\n    }\n    function generateCharacterClass(node) {\n      assertType(node.type, 'characterClass');\n      var classRanges = node.body,\n          length = classRanges ? classRanges.length : 0;\n      var i = -1,\n          result = '[';\n      if (node.negative) {\n        result += '^';\n      }\n      while (++i < length) {\n        result += generateClassAtom(classRanges[i]);\n      }\n      result += ']';\n      return result;\n    }\n    function generateCharacterClassEscape(node) {\n      assertType(node.type, 'characterClassEscape');\n      return '\\\\' + node.value;\n    }\n    function generateCharacterClassRange(node) {\n      assertType(node.type, 'characterClassRange');\n      var min = node.min,\n          max = node.max;\n      if (min.type == 'characterClassRange' || max.type == 'characterClassRange') {\n        throw Error('Invalid character class range');\n      }\n      return generateClassAtom(min) + '-' + generateClassAtom(max);\n    }\n    function generateClassAtom(node) {\n      assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value');\n      return generate(node);\n    }\n    function generateDisjunction(node) {\n      assertType(node.type, 'disjunction');\n      var body = node.body,\n          length = body ? body.length : 0;\n      if (length == 0) {\n        throw Error('No body');\n      } else if (length == 1) {\n        return generate(body[0]);\n      } else {\n        var i = -1,\n            result = '';\n        while (++i < length) {\n          if (i != 0) {\n            result += '|';\n          }\n          result += generate(body[i]);\n        }\n        return result;\n      }\n    }\n    function generateDot(node) {\n      assertType(node.type, 'dot');\n      return '.';\n    }\n    function generateGroup(node) {\n      assertType(node.type, 'group');\n      var result = '(';\n      switch (node.behavior) {\n        case 'normal':\n          break;\n        case 'ignore':\n          result += '?:';\n          break;\n        case 'lookahead':\n          result += '?=';\n          break;\n        case 'negativeLookahead':\n          result += '?!';\n          break;\n        default:\n          throw Error('Invalid behaviour: ' + node.behaviour);\n      }\n      var body = node.body,\n          length = body ? body.length : 0;\n      if (length == 1) {\n        result += generate(body[0]);\n      } else {\n        var i = -1;\n        while (++i < length) {\n          result += generate(body[i]);\n        }\n      }\n      result += ')';\n      return result;\n    }\n    function generateQuantifier(node) {\n      assertType(node.type, 'quantifier');\n      var quantifier = '',\n          min = node.min,\n          max = node.max;\n      switch (max) {\n        case undefined:\n        case null:\n          switch (min) {\n            case 0:\n              quantifier = '*';\n              break;\n            case 1:\n              quantifier = '+';\n              break;\n            default:\n              quantifier = '{' + min + ',}';\n              break;\n          }\n          break;\n        default:\n          if (min == max) {\n            quantifier = '{' + min + '}';\n          } else if (min == 0 && max == 1) {\n            quantifier = '?';\n          } else {\n            quantifier = '{' + min + ',' + max + '}';\n          }\n          break;\n      }\n      if (!node.greedy) {\n        quantifier += '?';\n      }\n      return generateAtom(node.body[0]) + quantifier;\n    }\n    function generateReference(node) {\n      assertType(node.type, 'reference');\n      return '\\\\' + node.matchIndex;\n    }\n    function generateTerm(node) {\n      assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value');\n      return generate(node);\n    }\n    function generateValue(node) {\n      assertType(node.type, 'value');\n      var kind = node.kind,\n          codePoint = node.codePoint;\n      switch (kind) {\n        case 'controlLetter':\n          return '\\\\c' + fromCodePoint(codePoint + 64);\n        case 'hexadecimalEscape':\n          return '\\\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2);\n        case 'identifier':\n          return '\\\\' + fromCodePoint(codePoint);\n        case 'null':\n          return '\\\\' + codePoint;\n        case 'octal':\n          return '\\\\' + codePoint.toString(8);\n        case 'singleEscape':\n          switch (codePoint) {\n            case 0x0008:\n              return '\\\\b';\n            case 0x009:\n              return '\\\\t';\n            case 0x00A:\n              return '\\\\n';\n            case 0x00B:\n              return '\\\\v';\n            case 0x00C:\n              return '\\\\f';\n            case 0x00D:\n              return '\\\\r';\n            default:\n              throw Error('Invalid codepoint: ' + codePoint);\n          }\n        case 'symbol':\n          return fromCodePoint(codePoint);\n        case 'unicodeEscape':\n          return '\\\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4);\n        case 'unicodeCodePointEscape':\n          return '\\\\u{' + codePoint.toString(16).toUpperCase() + '}';\n        default:\n          throw Error('Unsupported node kind: ' + kind);\n      }\n    }\n    generate.alternative = generateAlternative;\n    generate.anchor = generateAnchor;\n    generate.characterClass = generateCharacterClass;\n    generate.characterClassEscape = generateCharacterClassEscape;\n    generate.characterClassRange = generateCharacterClassRange;\n    generate.disjunction = generateDisjunction;\n    generate.dot = generateDot;\n    generate.group = generateGroup;\n    generate.quantifier = generateQuantifier;\n    generate.reference = generateReference;\n    generate.value = generateValue;\n    if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n      define(function() {\n        return {'generate': generate};\n      });\n    } else if (freeExports && freeModule) {\n      freeExports.generate = generate;\n    } else {\n      root.regjsgen = {'generate': generate};\n    }\n  }.call(this));\n  modules['regjsgen'] = {generate: exports.generate || window.regjsgen};\n  (function() {\n    function parse(str, flags) {\n      var hasUnicodeFlag = (flags || \"\").indexOf(\"u\") !== -1;\n      var pos = 0;\n      var closedCaptureCounter = 0;\n      function addRaw(node) {\n        node.raw = str.substring(node.range[0], node.range[1]);\n        return node;\n      }\n      function updateRawStart(node, start) {\n        node.range[0] = start;\n        return addRaw(node);\n      }\n      function createAnchor(kind, rawLength) {\n        return addRaw({\n          type: 'anchor',\n          kind: kind,\n          range: [pos - rawLength, pos]\n        });\n      }\n      function createValue(kind, codePoint, from, to) {\n        return addRaw({\n          type: 'value',\n          kind: kind,\n          codePoint: codePoint,\n          range: [from, to]\n        });\n      }\n      function createEscaped(kind, codePoint, value, fromOffset) {\n        fromOffset = fromOffset || 0;\n        return createValue(kind, codePoint, pos - (value.length + fromOffset), pos);\n      }\n      function createCharacter(matches) {\n        var _char = matches[0];\n        var first = _char.charCodeAt(0);\n        if (hasUnicodeFlag) {\n          var second;\n          if (_char.length === 1 && first >= 0xD800 && first <= 0xDBFF) {\n            second = lookahead().charCodeAt(0);\n            if (second >= 0xDC00 && second <= 0xDFFF) {\n              pos++;\n              return createValue('symbol', (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000, pos - 2, pos);\n            }\n          }\n        }\n        return createValue('symbol', first, pos - 1, pos);\n      }\n      function createDisjunction(alternatives, from, to) {\n        return addRaw({\n          type: 'disjunction',\n          body: alternatives,\n          range: [from, to]\n        });\n      }\n      function createDot() {\n        return addRaw({\n          type: 'dot',\n          range: [pos - 1, pos]\n        });\n      }\n      function createCharacterClassEscape(value) {\n        return addRaw({\n          type: 'characterClassEscape',\n          value: value,\n          range: [pos - 2, pos]\n        });\n      }\n      function createReference(matchIndex) {\n        return addRaw({\n          type: 'reference',\n          matchIndex: parseInt(matchIndex, 10),\n          range: [pos - 1 - matchIndex.length, pos]\n        });\n      }\n      function createGroup(behavior, disjunction, from, to) {\n        return addRaw({\n          type: 'group',\n          behavior: behavior,\n          body: disjunction,\n          range: [from, to]\n        });\n      }\n      function createQuantifier(min, max, from, to) {\n        if (to == null) {\n          from = pos - 1;\n          to = pos;\n        }\n        return addRaw({\n          type: 'quantifier',\n          min: min,\n          max: max,\n          greedy: true,\n          body: null,\n          range: [from, to]\n        });\n      }\n      function createAlternative(terms, from, to) {\n        return addRaw({\n          type: 'alternative',\n          body: terms,\n          range: [from, to]\n        });\n      }\n      function createCharacterClass(classRanges, negative, from, to) {\n        return addRaw({\n          type: 'characterClass',\n          body: classRanges,\n          negative: negative,\n          range: [from, to]\n        });\n      }\n      function createClassRange(min, max, from, to) {\n        if (min.codePoint > max.codePoint) {\n          throw SyntaxError('invalid range in character class');\n        }\n        return addRaw({\n          type: 'characterClassRange',\n          min: min,\n          max: max,\n          range: [from, to]\n        });\n      }\n      function flattenBody(body) {\n        if (body.type === 'alternative') {\n          return body.body;\n        } else {\n          return [body];\n        }\n      }\n      function isEmpty(obj) {\n        return obj.type === 'empty';\n      }\n      function incr(amount) {\n        amount = (amount || 1);\n        var res = str.substring(pos, pos + amount);\n        pos += (amount || 1);\n        return res;\n      }\n      function skip(value) {\n        if (!match(value)) {\n          throw SyntaxError('character: ' + value);\n        }\n      }\n      function match(value) {\n        if (str.indexOf(value, pos) === pos) {\n          return incr(value.length);\n        }\n      }\n      function lookahead() {\n        return str[pos];\n      }\n      function current(value) {\n        return str.indexOf(value, pos) === pos;\n      }\n      function next(value) {\n        return str[pos + 1] === value;\n      }\n      function matchReg(regExp) {\n        var subStr = str.substring(pos);\n        var res = subStr.match(regExp);\n        if (res) {\n          res.range = [];\n          res.range[0] = pos;\n          incr(res[0].length);\n          res.range[1] = pos;\n        }\n        return res;\n      }\n      function parseDisjunction() {\n        var res = [],\n            from = pos;\n        res.push(parseAlternative());\n        while (match('|')) {\n          res.push(parseAlternative());\n        }\n        if (res.length === 1) {\n          return res[0];\n        }\n        return createDisjunction(res, from, pos);\n      }\n      function parseAlternative() {\n        var res = [],\n            from = pos;\n        var term;\n        while (term = parseTerm()) {\n          res.push(term);\n        }\n        if (res.length === 1) {\n          return res[0];\n        }\n        return createAlternative(res, from, pos);\n      }\n      function parseTerm() {\n        if (pos >= str.length || current('|') || current(')')) {\n          return null;\n        }\n        var anchor = parseAnchor();\n        if (anchor) {\n          return anchor;\n        }\n        var atom = parseAtom();\n        if (!atom) {\n          throw SyntaxError('Expected atom');\n        }\n        var quantifier = parseQuantifier() || false;\n        if (quantifier) {\n          quantifier.body = flattenBody(atom);\n          updateRawStart(quantifier, atom.range[0]);\n          return quantifier;\n        }\n        return atom;\n      }\n      function parseGroup(matchA, typeA, matchB, typeB) {\n        var type = null,\n            from = pos;\n        if (match(matchA)) {\n          type = typeA;\n        } else if (match(matchB)) {\n          type = typeB;\n        } else {\n          return false;\n        }\n        var body = parseDisjunction();\n        if (!body) {\n          throw SyntaxError('Expected disjunction');\n        }\n        skip(')');\n        var group = createGroup(type, flattenBody(body), from, pos);\n        if (type == 'normal') {\n          closedCaptureCounter++;\n        }\n        return group;\n      }\n      function parseAnchor() {\n        var res,\n            from = pos;\n        if (match('^')) {\n          return createAnchor('start', 1);\n        } else if (match('$')) {\n          return createAnchor('end', 1);\n        } else if (match('\\\\b')) {\n          return createAnchor('boundary', 2);\n        } else if (match('\\\\B')) {\n          return createAnchor('not-boundary', 2);\n        } else {\n          return parseGroup('(?=', 'lookahead', '(?!', 'negativeLookahead');\n        }\n      }\n      function parseQuantifier() {\n        var res;\n        var quantifier;\n        var min,\n            max;\n        if (match('*')) {\n          quantifier = createQuantifier(0);\n        } else if (match('+')) {\n          quantifier = createQuantifier(1);\n        } else if (match('?')) {\n          quantifier = createQuantifier(0, 1);\n        } else if (res = matchReg(/^\\{([0-9]+)\\}/)) {\n          min = parseInt(res[1], 10);\n          quantifier = createQuantifier(min, min, res.range[0], res.range[1]);\n        } else if (res = matchReg(/^\\{([0-9]+),\\}/)) {\n          min = parseInt(res[1], 10);\n          quantifier = createQuantifier(min, undefined, res.range[0], res.range[1]);\n        } else if (res = matchReg(/^\\{([0-9]+),([0-9]+)\\}/)) {\n          min = parseInt(res[1], 10);\n          max = parseInt(res[2], 10);\n          if (min > max) {\n            throw SyntaxError('numbers out of order in {} quantifier');\n          }\n          quantifier = createQuantifier(min, max, res.range[0], res.range[1]);\n        }\n        if (quantifier) {\n          if (match('?')) {\n            quantifier.greedy = false;\n            quantifier.range[1] += 1;\n          }\n        }\n        return quantifier;\n      }\n      function parseAtom() {\n        var res;\n        if (res = matchReg(/^[^^$\\\\.*+?(){[|]/)) {\n          return createCharacter(res);\n        } else if (match('.')) {\n          return createDot();\n        } else if (match('\\\\')) {\n          res = parseAtomEscape();\n          if (!res) {\n            throw SyntaxError('atomEscape');\n          }\n          return res;\n        } else if (res = parseCharacterClass()) {\n          return res;\n        } else {\n          return parseGroup('(?:', 'ignore', '(', 'normal');\n        }\n      }\n      function parseUnicodeSurrogatePairEscape(firstEscape) {\n        if (hasUnicodeFlag) {\n          var first,\n              second;\n          if (firstEscape.kind == 'unicodeEscape' && (first = firstEscape.codePoint) >= 0xD800 && first <= 0xDBFF && current('\\\\') && next('u')) {\n            var prevPos = pos;\n            pos++;\n            var secondEscape = parseClassEscape();\n            if (secondEscape.kind == 'unicodeEscape' && (second = secondEscape.codePoint) >= 0xDC00 && second <= 0xDFFF) {\n              firstEscape.range[1] = secondEscape.range[1];\n              firstEscape.codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n              firstEscape.type = 'value';\n              firstEscape.kind = 'unicodeCodePointEscape';\n              addRaw(firstEscape);\n            } else {\n              pos = prevPos;\n            }\n          }\n        }\n        return firstEscape;\n      }\n      function parseClassEscape() {\n        return parseAtomEscape(true);\n      }\n      function parseAtomEscape(insideCharacterClass) {\n        var res;\n        res = parseDecimalEscape();\n        if (res) {\n          return res;\n        }\n        if (insideCharacterClass) {\n          if (match('b')) {\n            return createEscaped('singleEscape', 0x0008, '\\\\b');\n          } else if (match('B')) {\n            throw SyntaxError('\\\\B not possible inside of CharacterClass');\n          }\n        }\n        res = parseCharacterEscape();\n        return res;\n      }\n      function parseDecimalEscape() {\n        var res,\n            match;\n        if (res = matchReg(/^(?!0)\\d+/)) {\n          match = res[0];\n          var refIdx = parseInt(res[0], 10);\n          if (refIdx <= closedCaptureCounter) {\n            return createReference(res[0]);\n          } else {\n            incr(-res[0].length);\n            if (res = matchReg(/^[0-7]{1,3}/)) {\n              return createEscaped('octal', parseInt(res[0], 8), res[0], 1);\n            } else {\n              res = createCharacter(matchReg(/^[89]/));\n              return updateRawStart(res, res.range[0] - 1);\n            }\n          }\n        } else if (res = matchReg(/^[0-7]{1,3}/)) {\n          match = res[0];\n          if (/^0{1,3}$/.test(match)) {\n            return createEscaped('null', 0x0000, '0', match.length + 1);\n          } else {\n            return createEscaped('octal', parseInt(match, 8), match, 1);\n          }\n        } else if (res = matchReg(/^[dDsSwW]/)) {\n          return createCharacterClassEscape(res[0]);\n        }\n        return false;\n      }\n      function parseCharacterEscape() {\n        var res;\n        if (res = matchReg(/^[fnrtv]/)) {\n          var codePoint = 0;\n          switch (res[0]) {\n            case 't':\n              codePoint = 0x009;\n              break;\n            case 'n':\n              codePoint = 0x00A;\n              break;\n            case 'v':\n              codePoint = 0x00B;\n              break;\n            case 'f':\n              codePoint = 0x00C;\n              break;\n            case 'r':\n              codePoint = 0x00D;\n              break;\n          }\n          return createEscaped('singleEscape', codePoint, '\\\\' + res[0]);\n        } else if (res = matchReg(/^c([a-zA-Z])/)) {\n          return createEscaped('controlLetter', res[1].charCodeAt(0) % 32, res[1], 2);\n        } else if (res = matchReg(/^x([0-9a-fA-F]{2})/)) {\n          return createEscaped('hexadecimalEscape', parseInt(res[1], 16), res[1], 2);\n        } else if (res = matchReg(/^u([0-9a-fA-F]{4})/)) {\n          return parseUnicodeSurrogatePairEscape(createEscaped('unicodeEscape', parseInt(res[1], 16), res[1], 2));\n        } else if (hasUnicodeFlag && (res = matchReg(/^u\\{([0-9a-fA-F]{1,6})\\}/))) {\n          return createEscaped('unicodeCodePointEscape', parseInt(res[1], 16), res[1], 4);\n        } else {\n          return parseIdentityEscape();\n        }\n      }\n      function isIdentifierPart(ch) {\n        var NonAsciiIdentifierPart = new RegExp('[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]');\n        return (ch === 36) || (ch === 95) || (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || (ch >= 48 && ch <= 57) || (ch === 92) || ((ch >= 0x80) && NonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n      }\n      function parseIdentityEscape() {\n        var ZWJ = '\\u200C';\n        var ZWNJ = '\\u200D';\n        var res;\n        var tmp;\n        if (!isIdentifierPart(lookahead())) {\n          tmp = incr();\n          return createEscaped('identifier', tmp.charCodeAt(0), tmp, 1);\n        }\n        if (match(ZWJ)) {\n          return createEscaped('identifier', 0x200C, ZWJ);\n        } else if (match(ZWNJ)) {\n          return createEscaped('identifier', 0x200D, ZWNJ);\n        }\n        return null;\n      }\n      function parseCharacterClass() {\n        var res,\n            from = pos;\n        if (res = matchReg(/^\\[\\^/)) {\n          res = parseClassRanges();\n          skip(']');\n          return createCharacterClass(res, true, from, pos);\n        } else if (match('[')) {\n          res = parseClassRanges();\n          skip(']');\n          return createCharacterClass(res, false, from, pos);\n        }\n        return null;\n      }\n      function parseClassRanges() {\n        var res;\n        if (current(']')) {\n          return [];\n        } else {\n          res = parseNonemptyClassRanges();\n          if (!res) {\n            throw SyntaxError('nonEmptyClassRanges');\n          }\n          return res;\n        }\n      }\n      function parseHelperClassRanges(atom) {\n        var from,\n            to,\n            res;\n        if (current('-') && !next(']')) {\n          skip('-');\n          res = parseClassAtom();\n          if (!res) {\n            throw SyntaxError('classAtom');\n          }\n          to = pos;\n          var classRanges = parseClassRanges();\n          if (!classRanges) {\n            throw SyntaxError('classRanges');\n          }\n          from = atom.range[0];\n          if (classRanges.type === 'empty') {\n            return [createClassRange(atom, res, from, to)];\n          }\n          return [createClassRange(atom, res, from, to)].concat(classRanges);\n        }\n        res = parseNonemptyClassRangesNoDash();\n        if (!res) {\n          throw SyntaxError('nonEmptyClassRangesNoDash');\n        }\n        return [atom].concat(res);\n      }\n      function parseNonemptyClassRanges() {\n        var atom = parseClassAtom();\n        if (!atom) {\n          throw SyntaxError('classAtom');\n        }\n        if (current(']')) {\n          return [atom];\n        }\n        return parseHelperClassRanges(atom);\n      }\n      function parseNonemptyClassRangesNoDash() {\n        var res = parseClassAtom();\n        if (!res) {\n          throw SyntaxError('classAtom');\n        }\n        if (current(']')) {\n          return res;\n        }\n        return parseHelperClassRanges(res);\n      }\n      function parseClassAtom() {\n        if (match('-')) {\n          return createCharacter('-');\n        } else {\n          return parseClassAtomNoDash();\n        }\n      }\n      function parseClassAtomNoDash() {\n        var res;\n        if (res = matchReg(/^[^\\\\\\]-]/)) {\n          return createCharacter(res[0]);\n        } else if (match('\\\\')) {\n          res = parseClassEscape();\n          if (!res) {\n            throw SyntaxError('classEscape');\n          }\n          return parseUnicodeSurrogatePairEscape(res);\n        }\n      }\n      str = String(str);\n      if (str === '') {\n        str = '(?:)';\n      }\n      var result = parseDisjunction();\n      if (result.range[1] !== str.length) {\n        throw SyntaxError('Could not parse entire input - got stuck: ' + str);\n      }\n      return result;\n    }\n    ;\n    var regjsparser = {parse: parse};\n    if (typeof module !== 'undefined' && module.exports) {\n      module.exports = regjsparser;\n    } else {\n      window.regjsparser = regjsparser;\n    }\n  }());\n  modules['regjsparser'] = module.exports || window.regjsparser;\n  modules['./data/iu-mappings.json'] = ({\n    \"75\": 8490,\n    \"83\": 383,\n    \"107\": 8490,\n    \"115\": 383,\n    \"181\": 924,\n    \"197\": 8491,\n    \"383\": 83,\n    \"452\": 453,\n    \"453\": 452,\n    \"455\": 456,\n    \"456\": 455,\n    \"458\": 459,\n    \"459\": 458,\n    \"497\": 498,\n    \"498\": 497,\n    \"837\": 8126,\n    \"914\": 976,\n    \"917\": 1013,\n    \"920\": 1012,\n    \"921\": 8126,\n    \"922\": 1008,\n    \"924\": 181,\n    \"928\": 982,\n    \"929\": 1009,\n    \"931\": 962,\n    \"934\": 981,\n    \"937\": 8486,\n    \"962\": 931,\n    \"976\": 914,\n    \"977\": 1012,\n    \"981\": 934,\n    \"982\": 928,\n    \"1008\": 922,\n    \"1009\": 929,\n    \"1012\": [920, 977],\n    \"1013\": 917,\n    \"7776\": 7835,\n    \"7835\": 7776,\n    \"8126\": [837, 921],\n    \"8486\": 937,\n    \"8490\": 75,\n    \"8491\": 197,\n    \"66560\": 66600,\n    \"66561\": 66601,\n    \"66562\": 66602,\n    \"66563\": 66603,\n    \"66564\": 66604,\n    \"66565\": 66605,\n    \"66566\": 66606,\n    \"66567\": 66607,\n    \"66568\": 66608,\n    \"66569\": 66609,\n    \"66570\": 66610,\n    \"66571\": 66611,\n    \"66572\": 66612,\n    \"66573\": 66613,\n    \"66574\": 66614,\n    \"66575\": 66615,\n    \"66576\": 66616,\n    \"66577\": 66617,\n    \"66578\": 66618,\n    \"66579\": 66619,\n    \"66580\": 66620,\n    \"66581\": 66621,\n    \"66582\": 66622,\n    \"66583\": 66623,\n    \"66584\": 66624,\n    \"66585\": 66625,\n    \"66586\": 66626,\n    \"66587\": 66627,\n    \"66588\": 66628,\n    \"66589\": 66629,\n    \"66590\": 66630,\n    \"66591\": 66631,\n    \"66592\": 66632,\n    \"66593\": 66633,\n    \"66594\": 66634,\n    \"66595\": 66635,\n    \"66596\": 66636,\n    \"66597\": 66637,\n    \"66598\": 66638,\n    \"66599\": 66639,\n    \"66600\": 66560,\n    \"66601\": 66561,\n    \"66602\": 66562,\n    \"66603\": 66563,\n    \"66604\": 66564,\n    \"66605\": 66565,\n    \"66606\": 66566,\n    \"66607\": 66567,\n    \"66608\": 66568,\n    \"66609\": 66569,\n    \"66610\": 66570,\n    \"66611\": 66571,\n    \"66612\": 66572,\n    \"66613\": 66573,\n    \"66614\": 66574,\n    \"66615\": 66575,\n    \"66616\": 66576,\n    \"66617\": 66577,\n    \"66618\": 66578,\n    \"66619\": 66579,\n    \"66620\": 66580,\n    \"66621\": 66581,\n    \"66622\": 66582,\n    \"66623\": 66583,\n    \"66624\": 66584,\n    \"66625\": 66585,\n    \"66626\": 66586,\n    \"66627\": 66587,\n    \"66628\": 66588,\n    \"66629\": 66589,\n    \"66630\": 66590,\n    \"66631\": 66591,\n    \"66632\": 66592,\n    \"66633\": 66593,\n    \"66634\": 66594,\n    \"66635\": 66595,\n    \"66636\": 66596,\n    \"66637\": 66597,\n    \"66638\": 66598,\n    \"66639\": 66599,\n    \"71840\": 71872,\n    \"71841\": 71873,\n    \"71842\": 71874,\n    \"71843\": 71875,\n    \"71844\": 71876,\n    \"71845\": 71877,\n    \"71846\": 71878,\n    \"71847\": 71879,\n    \"71848\": 71880,\n    \"71849\": 71881,\n    \"71850\": 71882,\n    \"71851\": 71883,\n    \"71852\": 71884,\n    \"71853\": 71885,\n    \"71854\": 71886,\n    \"71855\": 71887,\n    \"71856\": 71888,\n    \"71857\": 71889,\n    \"71858\": 71890,\n    \"71859\": 71891,\n    \"71860\": 71892,\n    \"71861\": 71893,\n    \"71862\": 71894,\n    \"71863\": 71895,\n    \"71864\": 71896,\n    \"71865\": 71897,\n    \"71866\": 71898,\n    \"71867\": 71899,\n    \"71868\": 71900,\n    \"71869\": 71901,\n    \"71870\": 71902,\n    \"71871\": 71903,\n    \"71872\": 71840,\n    \"71873\": 71841,\n    \"71874\": 71842,\n    \"71875\": 71843,\n    \"71876\": 71844,\n    \"71877\": 71845,\n    \"71878\": 71846,\n    \"71879\": 71847,\n    \"71880\": 71848,\n    \"71881\": 71849,\n    \"71882\": 71850,\n    \"71883\": 71851,\n    \"71884\": 71852,\n    \"71885\": 71853,\n    \"71886\": 71854,\n    \"71887\": 71855,\n    \"71888\": 71856,\n    \"71889\": 71857,\n    \"71890\": 71858,\n    \"71891\": 71859,\n    \"71892\": 71860,\n    \"71893\": 71861,\n    \"71894\": 71862,\n    \"71895\": 71863,\n    \"71896\": 71864,\n    \"71897\": 71865,\n    \"71898\": 71866,\n    \"71899\": 71867,\n    \"71900\": 71868,\n    \"71901\": 71869,\n    \"71902\": 71870,\n    \"71903\": 71871\n  });\n  var regenerate = require('regenerate');\n  exports.REGULAR = {\n    'd': regenerate().addRange(0x30, 0x39),\n    'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0xFFFF),\n    's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),\n    'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0xFFFF),\n    'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),\n    'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0xFFFF)\n  };\n  exports.UNICODE = {\n    'd': regenerate().addRange(0x30, 0x39),\n    'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF),\n    's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),\n    'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF),\n    'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),\n    'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF)\n  };\n  exports.UNICODE_IGNORE_CASE = {\n    'd': regenerate().addRange(0x30, 0x39),\n    'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF),\n    's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),\n    'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF),\n    'w': regenerate(0x5F, 0x17F, 0x212A).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),\n    'W': regenerate(0x4B, 0x53, 0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF)\n  };\n  modules['./data/character-class-escape-sets.js'] = {\n    REGULAR: exports.REGULAR,\n    UNICODE: exports.UNICODE,\n    UNICODE_IGNORE_CASE: exports.UNICODE_IGNORE_CASE\n  };\n  var generate = require('regjsgen').generate;\n  var parse = require('regjsparser').parse;\n  var regenerate = require('regenerate');\n  var iuMappings = require('./data/iu-mappings.json');\n  var ESCAPE_SETS = require('./data/character-class-escape-sets.js');\n  function getCharacterClassEscapeSet(character) {\n    if (unicode) {\n      if (ignoreCase) {\n        return ESCAPE_SETS.UNICODE_IGNORE_CASE[character];\n      }\n      return ESCAPE_SETS.UNICODE[character];\n    }\n    return ESCAPE_SETS.REGULAR[character];\n  }\n  var object = {};\n  var hasOwnProperty = object.hasOwnProperty;\n  function has(object, property) {\n    return hasOwnProperty.call(object, property);\n  }\n  var UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF);\n  var BMP_SET = regenerate().addRange(0x0, 0xFFFF);\n  var DOT_SET_UNICODE = UNICODE_SET.clone().remove(0x000A, 0x000D, 0x2028, 0x2029);\n  var DOT_SET = DOT_SET_UNICODE.clone().intersection(BMP_SET);\n  regenerate.prototype.iuAddRange = function(min, max) {\n    var $this = this;\n    do {\n      var folded = caseFold(min);\n      if (folded) {\n        $this.add(folded);\n      }\n    } while (++min <= max);\n    return $this;\n  };\n  function assign(target, source) {\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  function update(item, pattern) {\n    var tree = parse(pattern, '');\n    switch (tree.type) {\n      case 'characterClass':\n      case 'group':\n      case 'value':\n        break;\n      default:\n        tree = wrap(tree, pattern);\n    }\n    assign(item, tree);\n  }\n  function wrap(tree, pattern) {\n    return {\n      'type': 'group',\n      'behavior': 'ignore',\n      'body': [tree],\n      'raw': '(?:' + pattern + ')'\n    };\n  }\n  function caseFold(codePoint) {\n    return has(iuMappings, codePoint) ? iuMappings[codePoint] : false;\n  }\n  var ignoreCase = false;\n  var unicode = false;\n  function processCharacterClass(characterClassItem) {\n    var set = regenerate();\n    var body = characterClassItem.body.forEach(function(item) {\n      switch (item.type) {\n        case 'value':\n          set.add(item.codePoint);\n          if (ignoreCase && unicode) {\n            var folded = caseFold(item.codePoint);\n            if (folded) {\n              set.add(folded);\n            }\n          }\n          break;\n        case 'characterClassRange':\n          var min = item.min.codePoint;\n          var max = item.max.codePoint;\n          set.addRange(min, max);\n          if (ignoreCase && unicode) {\n            set.iuAddRange(min, max);\n          }\n          break;\n        case 'characterClassEscape':\n          set.add(getCharacterClassEscapeSet(item.value));\n          break;\n        default:\n          throw Error('Unknown term type: ' + item.type);\n      }\n    });\n    if (characterClassItem.negative) {\n      set = (unicode ? UNICODE_SET : BMP_SET).clone().remove(set);\n    }\n    update(characterClassItem, set.toString());\n    return characterClassItem;\n  }\n  function processTerm(item) {\n    switch (item.type) {\n      case 'dot':\n        update(item, (unicode ? DOT_SET_UNICODE : DOT_SET).toString());\n        break;\n      case 'characterClass':\n        item = processCharacterClass(item);\n        break;\n      case 'characterClassEscape':\n        update(item, getCharacterClassEscapeSet(item.value).toString());\n        break;\n      case 'alternative':\n      case 'disjunction':\n      case 'group':\n      case 'quantifier':\n        item.body = item.body.map(processTerm);\n        break;\n      case 'value':\n        var codePoint = item.codePoint;\n        var set = regenerate(codePoint);\n        if (ignoreCase && unicode) {\n          var folded = caseFold(codePoint);\n          if (folded) {\n            set.add(folded);\n          }\n        }\n        update(item, set.toString());\n        break;\n      case 'anchor':\n      case 'empty':\n      case 'group':\n      case 'reference':\n        break;\n      default:\n        throw Error('Unknown term type: ' + item.type);\n    }\n    return item;\n  }\n  ;\n  module.exports = function(pattern, flags) {\n    var tree = parse(pattern, flags);\n    ignoreCase = flags ? flags.indexOf('i') > -1 : false;\n    unicode = flags ? flags.indexOf('u') > -1 : false;\n    assign(tree, processTerm(tree));\n    return generate(tree);\n  };\n  var regexpuRewritePattern = module.exports;\n  return {get regexpuRewritePattern() {\n      return regexpuRewritePattern;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/RegularExpressionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/RegularExpressionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/RegularExpressionTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var LiteralExpression = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").LiteralExpression;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var REGULAR_EXPRESSION = System.get(\"traceur@0.0.74/src/syntax/TokenType\").REGULAR_EXPRESSION;\n  var regexpuRewritePattern = System.get(\"traceur@0.0.74/src/outputgeneration/regexpuRewritePattern\").regexpuRewritePattern;\n  var RegularExpressionTransformer = function RegularExpressionTransformer() {\n    $traceurRuntime.superConstructor($RegularExpressionTransformer).apply(this, arguments);\n  };\n  var $RegularExpressionTransformer = RegularExpressionTransformer;\n  ($traceurRuntime.createClass)(RegularExpressionTransformer, {transformLiteralExpression: function(tree) {\n      var token = tree.literalToken;\n      if (token.type === REGULAR_EXPRESSION) {\n        var value = token.value;\n        var lastIndex = value.lastIndexOf('/');\n        var pattern = value.slice(1, lastIndex);\n        var flags = value.slice(lastIndex + 1);\n        if (flags.indexOf('u') !== -1) {\n          var result = '/' + regexpuRewritePattern(pattern, flags) + '/' + flags.replace('u', '');\n          return new LiteralExpression(tree.location, new LiteralToken(REGULAR_EXPRESSION, result, token.location));\n        }\n      }\n      return tree;\n    }}, {}, ParseTreeTransformer);\n  return {get RegularExpressionTransformer() {\n      return RegularExpressionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/RestParameterTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/RestParameterTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/RestParameterTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"\\n            for (var \", \" = [], \", \" = \", \";\\n                 \", \" < arguments.length; \", \"++)\\n              \", \"[\", \" - \", \"] = arguments[\", \"];\"], {raw: {value: Object.freeze([\"\\n            for (var \", \" = [], \", \" = \", \";\\n                 \", \" < arguments.length; \", \"++)\\n              \", \"[\", \" - \", \"] = arguments[\", \"];\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"\\n            for (var \", \" = [], \", \" = 0;\\n                 \", \" < arguments.length; \", \"++)\\n              \", \"[\", \"] = arguments[\", \"];\"], {raw: {value: Object.freeze([\"\\n            for (var \", \" = [], \", \" = 0;\\n                 \", \" < arguments.length; \", \"++)\\n              \", \"[\", \"] = arguments[\", \"];\"])}}));\n  var FormalParameterList = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").FormalParameterList;\n  var ParameterTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParameterTransformer\").ParameterTransformer;\n  var createIdentifierToken = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\").createIdentifierToken;\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  function hasRestParameter(parameterList) {\n    var parameters = parameterList.parameters;\n    return parameters.length > 0 && parameters[parameters.length - 1].isRestParameter();\n  }\n  function getRestParameterLiteralToken(parameterList) {\n    var parameters = parameterList.parameters;\n    return parameters[parameters.length - 1].parameter.identifier.identifierToken;\n  }\n  var RestParameterTransformer = function RestParameterTransformer() {\n    $traceurRuntime.superConstructor($RestParameterTransformer).apply(this, arguments);\n  };\n  var $RestParameterTransformer = RestParameterTransformer;\n  ($traceurRuntime.createClass)(RestParameterTransformer, {transformFormalParameterList: function(tree) {\n      var transformed = $traceurRuntime.superGet(this, $RestParameterTransformer.prototype, \"transformFormalParameterList\").call(this, tree);\n      if (hasRestParameter(transformed)) {\n        var parametersWithoutRestParam = new FormalParameterList(transformed.location, transformed.parameters.slice(0, -1));\n        var startIndex = transformed.parameters.length - 1;\n        var i = createIdentifierToken(this.getTempIdentifier());\n        var name = getRestParameterLiteralToken(transformed);\n        var loop;\n        if (startIndex) {\n          loop = parseStatement($__0, name, i, startIndex, i, i, name, i, startIndex, i);\n        } else {\n          loop = parseStatement($__1, name, i, i, i, name, i, i);\n        }\n        this.parameterStatements.push(loop);\n        return parametersWithoutRestParam;\n      }\n      return transformed;\n    }}, {}, ParameterTransformer);\n  return {get RestParameterTransformer() {\n      return RestParameterTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/SpreadTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/SpreadTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/SpreadTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$traceurRuntime.spread(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.spread(\", \")\"])}}));\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/PredefinedName\"),\n      APPLY = $__1.APPLY,\n      BIND = $__1.BIND,\n      FUNCTION = $__1.FUNCTION,\n      PROTOTYPE = $__1.PROTOTYPE;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      MEMBER_EXPRESSION = $__2.MEMBER_EXPRESSION,\n      MEMBER_LOOKUP_EXPRESSION = $__2.MEMBER_LOOKUP_EXPRESSION,\n      SPREAD_EXPRESSION = $__2.SPREAD_EXPRESSION;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__4 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__4.createArgumentList,\n      createArrayLiteralExpression = $__4.createArrayLiteralExpression,\n      createAssignmentExpression = $__4.createAssignmentExpression,\n      createCallExpression = $__4.createCallExpression,\n      createEmptyArgumentList = $__4.createEmptyArgumentList,\n      createIdentifierExpression = $__4.createIdentifierExpression,\n      createMemberExpression = $__4.createMemberExpression,\n      createMemberLookupExpression = $__4.createMemberLookupExpression,\n      createNewExpression = $__4.createNewExpression,\n      createNullLiteral = $__4.createNullLiteral,\n      createParenExpression = $__4.createParenExpression;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  function hasSpreadMember(trees) {\n    return trees.some((function(tree) {\n      return tree && tree.type == SPREAD_EXPRESSION;\n    }));\n  }\n  var SpreadTransformer = function SpreadTransformer() {\n    $traceurRuntime.superConstructor($SpreadTransformer).apply(this, arguments);\n  };\n  var $SpreadTransformer = SpreadTransformer;\n  ($traceurRuntime.createClass)(SpreadTransformer, {\n    createArrayFromElements_: function(elements) {\n      var length = elements.length;\n      var args = [];\n      var lastArray;\n      for (var i = 0; i < length; i++) {\n        if (elements[i] && elements[i].type === SPREAD_EXPRESSION) {\n          if (lastArray) {\n            args.push(createArrayLiteralExpression(lastArray));\n            lastArray = null;\n          }\n          args.push(this.transformAny(elements[i].expression));\n        } else {\n          if (!lastArray)\n            lastArray = [];\n          lastArray.push(this.transformAny(elements[i]));\n        }\n      }\n      if (lastArray)\n        args.push(createArrayLiteralExpression(lastArray));\n      return parseExpression($__0, createArgumentList(args));\n    },\n    desugarCallSpread_: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var functionObject,\n          contextObject;\n      this.pushTempScope();\n      if (operand.type == MEMBER_EXPRESSION) {\n        var tempIdent = createIdentifierExpression(this.addTempVar());\n        var parenExpression = createParenExpression(createAssignmentExpression(tempIdent, operand.operand));\n        var memberName = operand.memberName;\n        contextObject = tempIdent;\n        functionObject = createMemberExpression(parenExpression, memberName);\n      } else if (tree.operand.type == MEMBER_LOOKUP_EXPRESSION) {\n        var tempIdent = createIdentifierExpression(this.addTempVar());\n        var parenExpression = createParenExpression(createAssignmentExpression(tempIdent, operand.operand));\n        var memberExpression = this.transformAny(operand.memberExpression);\n        contextObject = tempIdent;\n        functionObject = createMemberLookupExpression(parenExpression, memberExpression);\n      } else {\n        contextObject = createNullLiteral();\n        functionObject = operand;\n      }\n      this.popTempScope();\n      var arrayExpression = this.createArrayFromElements_(tree.args.args);\n      return createCallExpression(createMemberExpression(functionObject, APPLY), createArgumentList([contextObject, arrayExpression]));\n    },\n    desugarNewSpread_: function(tree) {\n      var arrayExpression = $traceurRuntime.spread([createNullLiteral()], tree.args.args);\n      arrayExpression = this.createArrayFromElements_(arrayExpression);\n      return createNewExpression(createParenExpression(createCallExpression(createMemberExpression(FUNCTION, PROTOTYPE, BIND, APPLY), createArgumentList([this.transformAny(tree.operand), arrayExpression]))), createEmptyArgumentList());\n    },\n    transformArrayLiteralExpression: function(tree) {\n      if (hasSpreadMember(tree.elements)) {\n        return this.createArrayFromElements_(tree.elements);\n      }\n      return $traceurRuntime.superGet(this, $SpreadTransformer.prototype, \"transformArrayLiteralExpression\").call(this, tree);\n    },\n    transformCallExpression: function(tree) {\n      if (hasSpreadMember(tree.args.args)) {\n        return this.desugarCallSpread_(tree);\n      }\n      return $traceurRuntime.superGet(this, $SpreadTransformer.prototype, \"transformCallExpression\").call(this, tree);\n    },\n    transformNewExpression: function(tree) {\n      if (tree.args != null && hasSpreadMember(tree.args.args)) {\n        return this.desugarNewSpread_(tree);\n      }\n      return $traceurRuntime.superGet(this, $SpreadTransformer.prototype, \"transformNewExpression\").call(this, tree);\n    }\n  }, {}, TempVarTransformer);\n  return {get SpreadTransformer() {\n      return SpreadTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/SymbolTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/SymbolTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/SymbolTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$traceurRuntime.toProperty(\", \") in \", \"\"], {raw: {value: Object.freeze([\"$traceurRuntime.toProperty(\", \") in \", \"\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"\", \"[$traceurRuntime.toProperty(\", \")]\"], {raw: {value: Object.freeze([\"\", \"[$traceurRuntime.toProperty(\", \")]\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"(typeof \", \" === 'undefined' ?\\n          'undefined' : \", \")\"], {raw: {value: Object.freeze([\"(typeof \", \" === 'undefined' ?\\n          'undefined' : \", \")\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$traceurRuntime.typeof(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.typeof(\", \")\"])}})),\n      $__4 = Object.freeze(Object.defineProperties([\"if (!$traceurRuntime.isSymbolString(\", \")) \", \"\"], {raw: {value: Object.freeze([\"if (!$traceurRuntime.isSymbolString(\", \")) \", \"\"])}}));\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      BinaryExpression = $__5.BinaryExpression,\n      MemberLookupExpression = $__5.MemberLookupExpression,\n      ForInStatement = $__5.ForInStatement,\n      UnaryExpression = $__5.UnaryExpression;\n  var ExplodeExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ExplodeExpressionTransformer\").ExplodeExpressionTransformer;\n  var $__7 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      IDENTIFIER_EXPRESSION = $__7.IDENTIFIER_EXPRESSION,\n      LITERAL_EXPRESSION = $__7.LITERAL_EXPRESSION,\n      UNARY_EXPRESSION = $__7.UNARY_EXPRESSION,\n      VARIABLE_DECLARATION_LIST = $__7.VARIABLE_DECLARATION_LIST;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__9 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      EQUAL_EQUAL = $__9.EQUAL_EQUAL,\n      EQUAL_EQUAL_EQUAL = $__9.EQUAL_EQUAL_EQUAL,\n      IN = $__9.IN,\n      NOT_EQUAL = $__9.NOT_EQUAL,\n      NOT_EQUAL_EQUAL = $__9.NOT_EQUAL_EQUAL,\n      STRING = $__9.STRING,\n      TYPEOF = $__9.TYPEOF;\n  var $__10 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__10.parseExpression,\n      parseStatement = $__10.parseStatement;\n  var ExplodeSymbolExpression = function ExplodeSymbolExpression() {\n    $traceurRuntime.superConstructor($ExplodeSymbolExpression).apply(this, arguments);\n  };\n  var $ExplodeSymbolExpression = ExplodeSymbolExpression;\n  ($traceurRuntime.createClass)(ExplodeSymbolExpression, {\n    transformArrowFunctionExpression: function(tree) {\n      return tree;\n    },\n    transformClassExpression: function(tree) {\n      return tree;\n    },\n    transformFunctionBody: function(tree) {\n      return tree;\n    }\n  }, {}, ExplodeExpressionTransformer);\n  function isEqualityExpression(tree) {\n    switch (tree.operator.type) {\n      case EQUAL_EQUAL:\n      case EQUAL_EQUAL_EQUAL:\n      case NOT_EQUAL:\n      case NOT_EQUAL_EQUAL:\n        return true;\n    }\n    return false;\n  }\n  function isTypeof(tree) {\n    return tree.type === UNARY_EXPRESSION && tree.operator.type === TYPEOF;\n  }\n  function isSafeTypeofString(tree) {\n    if (tree.type !== LITERAL_EXPRESSION)\n      return false;\n    var value = tree.literalToken.processedValue;\n    switch (value) {\n      case 'symbol':\n      case 'object':\n        return false;\n    }\n    return true;\n  }\n  var SymbolTransformer = function SymbolTransformer() {\n    $traceurRuntime.superConstructor($SymbolTransformer).apply(this, arguments);\n  };\n  var $SymbolTransformer = SymbolTransformer;\n  ($traceurRuntime.createClass)(SymbolTransformer, {\n    transformTypeofOperand_: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      return new UnaryExpression(tree.location, tree.operator, operand);\n    },\n    transformBinaryExpression: function(tree) {\n      if (tree.operator.type === IN) {\n        var name = this.transformAny(tree.left);\n        var object = this.transformAny(tree.right);\n        if (name.type === LITERAL_EXPRESSION)\n          return new BinaryExpression(tree.location, name, tree.operator, object);\n        return parseExpression($__0, name, object);\n      }\n      if (isEqualityExpression(tree)) {\n        if (isTypeof(tree.left) && isSafeTypeofString(tree.right)) {\n          var left = this.transformTypeofOperand_(tree.left);\n          var right = tree.right;\n          return new BinaryExpression(tree.location, left, tree.operator, right);\n        }\n        if (isTypeof(tree.right) && isSafeTypeofString(tree.left)) {\n          var left = tree.left;\n          var right = this.transformTypeofOperand_(tree.right);\n          return new BinaryExpression(tree.location, left, tree.operator, right);\n        }\n      }\n      return $traceurRuntime.superGet(this, $SymbolTransformer.prototype, \"transformBinaryExpression\").call(this, tree);\n    },\n    transformMemberLookupExpression: function(tree) {\n      var operand = this.transformAny(tree.operand);\n      var memberExpression = this.transformAny(tree.memberExpression);\n      if (memberExpression.type === LITERAL_EXPRESSION && memberExpression.literalToken.type !== STRING) {\n        return new MemberLookupExpression(tree.location, operand, memberExpression);\n      }\n      return parseExpression($__1, operand, memberExpression);\n    },\n    transformUnaryExpression: function(tree) {\n      if (tree.operator.type !== TYPEOF)\n        return $traceurRuntime.superGet(this, $SymbolTransformer.prototype, \"transformUnaryExpression\").call(this, tree);\n      var operand = this.transformAny(tree.operand);\n      var expression = this.getRuntimeTypeof(operand);\n      if (operand.type === IDENTIFIER_EXPRESSION) {\n        return parseExpression($__2, operand, expression);\n      }\n      return expression;\n    },\n    getRuntimeTypeof: function(operand) {\n      return parseExpression($__3, operand);\n    },\n    transformForInStatement: function(tree) {\n      var initializer = this.transformAny(tree.initializer);\n      var collection = this.transformAny(tree.collection);\n      var body = this.transformAny(tree.body);\n      var initIdentToken;\n      if (initializer.type === VARIABLE_DECLARATION_LIST) {\n        initIdentToken = initializer.declarations[0].lvalue.identifierToken;\n      } else {\n        initIdentToken = initializer.identifierToken;\n      }\n      if (!initIdentToken) {\n        throw new Error('Not implemented');\n      }\n      body = parseStatement($__4, initIdentToken, body);\n      return new ForInStatement(tree.location, initializer, collection, body);\n    }\n  }, {}, TempVarTransformer);\n  return {get SymbolTransformer() {\n      return SymbolTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/TemplateLiteralTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/TemplateLiteralTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/TemplateLiteralTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"Object.freeze(Object.defineProperties(\", \", {\\n    raw: {\\n      value: Object.freeze(\", \")\\n    }\\n  }))\"], {raw: {value: Object.freeze([\"Object.freeze(Object.defineProperties(\", \", {\\n    raw: {\\n      value: Object.freeze(\", \")\\n    }\\n  }))\"])}}));\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BINARY_EXPRESSION = $__1.BINARY_EXPRESSION,\n      COMMA_EXPRESSION = $__1.COMMA_EXPRESSION,\n      CONDITIONAL_EXPRESSION = $__1.CONDITIONAL_EXPRESSION,\n      TEMPLATE_LITERAL_PORTION = $__1.TEMPLATE_LITERAL_PORTION;\n  var $__2 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      LiteralExpression = $__2.LiteralExpression,\n      ParenExpression = $__2.ParenExpression;\n  var LiteralToken = System.get(\"traceur@0.0.74/src/syntax/LiteralToken\").LiteralToken;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var TempVarTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TempVarTransformer\").TempVarTransformer;\n  var $__6 = System.get(\"traceur@0.0.74/src/syntax/TokenType\"),\n      PERCENT = $__6.PERCENT,\n      PLUS = $__6.PLUS,\n      SLASH = $__6.SLASH,\n      STAR = $__6.STAR,\n      STRING = $__6.STRING;\n  var $__7 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__7.createArgumentList,\n      createArrayLiteralExpression = $__7.createArrayLiteralExpression,\n      createBinaryExpression = $__7.createBinaryExpression,\n      createCallExpression = $__7.createCallExpression,\n      createIdentifierExpression = $__7.createIdentifierExpression,\n      createOperatorToken = $__7.createOperatorToken,\n      createStringLiteral = $__7.createStringLiteral;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  function createCallSiteIdObject(tree) {\n    var elements = tree.elements;\n    var cooked = createCookedStringArray(elements);\n    var raw = createRawStringArray(elements);\n    return parseExpression($__0, cooked, raw);\n  }\n  function maybeAddEmptyStringAtEnd(elements, items) {\n    var length = elements.length;\n    if (!length || elements[length - 1].type !== TEMPLATE_LITERAL_PORTION)\n      items.push(createStringLiteral(''));\n  }\n  function createRawStringArray(elements) {\n    var items = [];\n    for (var i = 0; i < elements.length; i += 2) {\n      var str = elements[i].value.value;\n      str = str.replace(/\\r\\n?/g, '\\n');\n      str = JSON.stringify(str);\n      str = replaceRaw(str);\n      var loc = elements[i].location;\n      var expr = new LiteralExpression(loc, new LiteralToken(STRING, str, loc));\n      items.push(expr);\n    }\n    maybeAddEmptyStringAtEnd(elements, items);\n    return createArrayLiteralExpression(items);\n  }\n  function createCookedStringLiteralExpression(tree) {\n    var str = cookString(tree.value.value);\n    var loc = tree.location;\n    return new LiteralExpression(loc, new LiteralToken(STRING, str, loc));\n  }\n  function createCookedStringArray(elements) {\n    var items = [];\n    for (var i = 0; i < elements.length; i += 2) {\n      items.push(createCookedStringLiteralExpression(elements[i]));\n    }\n    maybeAddEmptyStringAtEnd(elements, items);\n    return createArrayLiteralExpression(items);\n  }\n  function replaceRaw(s) {\n    return s.replace(/\\u2028|\\u2029/g, function(c) {\n      switch (c) {\n        case '\\u2028':\n          return '\\\\u2028';\n        case '\\u2029':\n          return '\\\\u2029';\n        default:\n          throw Error('Not reachable');\n      }\n    });\n  }\n  function cookString(s) {\n    var sb = ['\"'];\n    var i = 0,\n        k = 1,\n        c,\n        c2;\n    while (i < s.length) {\n      c = s[i++];\n      switch (c) {\n        case '\\\\':\n          c2 = s[i++];\n          switch (c2) {\n            case '\\n':\n            case '\\u2028':\n            case '\\u2029':\n              break;\n            case '\\r':\n              if (s[i + 1] === '\\n') {\n                i++;\n              }\n              break;\n            default:\n              sb[k++] = c;\n              sb[k++] = c2;\n          }\n          break;\n        case '\"':\n          sb[k++] = '\\\\\"';\n          break;\n        case '\\n':\n          sb[k++] = '\\\\n';\n          break;\n        case '\\r':\n          if (s[i] === '\\n')\n            i++;\n          sb[k++] = '\\\\n';\n          break;\n        case '\\t':\n          sb[k++] = '\\\\t';\n          break;\n        case '\\f':\n          sb[k++] = '\\\\f';\n          break;\n        case '\\b':\n          sb[k++] = '\\\\b';\n          break;\n        case '\\u2028':\n          sb[k++] = '\\\\u2028';\n          break;\n        case '\\u2029':\n          sb[k++] = '\\\\u2029';\n          break;\n        default:\n          sb[k++] = c;\n      }\n    }\n    sb[k++] = '\"';\n    return sb.join('');\n  }\n  var TemplateLiteralTransformer = function TemplateLiteralTransformer() {\n    $traceurRuntime.superConstructor($TemplateLiteralTransformer).apply(this, arguments);\n  };\n  var $TemplateLiteralTransformer = TemplateLiteralTransformer;\n  ($traceurRuntime.createClass)(TemplateLiteralTransformer, {\n    transformFunctionBody: function(tree) {\n      return ParseTreeTransformer.prototype.transformFunctionBody.call(this, tree);\n    },\n    transformTemplateLiteralExpression: function(tree) {\n      if (!tree.operand)\n        return this.createDefaultTemplateLiteral(tree);\n      var operand = this.transformAny(tree.operand);\n      var elements = tree.elements;\n      var callsiteIdObject = createCallSiteIdObject(tree);\n      var idName = this.addTempVar(callsiteIdObject);\n      var args = [createIdentifierExpression(idName)];\n      for (var i = 1; i < elements.length; i += 2) {\n        args.push(this.transformAny(elements[i]));\n      }\n      return createCallExpression(operand, createArgumentList(args));\n    },\n    transformTemplateSubstitution: function(tree) {\n      var transformedTree = this.transformAny(tree.expression);\n      switch (transformedTree.type) {\n        case BINARY_EXPRESSION:\n          switch (transformedTree.operator.type) {\n            case STAR:\n            case PERCENT:\n            case SLASH:\n              return transformedTree;\n          }\n        case COMMA_EXPRESSION:\n        case CONDITIONAL_EXPRESSION:\n          return new ParenExpression(null, transformedTree);\n      }\n      return transformedTree;\n    },\n    transformTemplateLiteralPortion: function(tree) {\n      return createCookedStringLiteralExpression(tree);\n    },\n    createDefaultTemplateLiteral: function(tree) {\n      var length = tree.elements.length;\n      if (length === 0) {\n        var loc = tree.location;\n        return new LiteralExpression(loc, new LiteralToken(STRING, '\"\"', loc));\n      }\n      var firstNonEmpty = tree.elements[0].value.value === '' ? -1 : 0;\n      var binaryExpression = this.transformAny(tree.elements[0]);\n      if (length == 1)\n        return binaryExpression;\n      var plusToken = createOperatorToken(PLUS);\n      for (var i = 1; i < length; i++) {\n        var element = tree.elements[i];\n        if (element.type === TEMPLATE_LITERAL_PORTION) {\n          if (element.value.value === '')\n            continue;\n          else if (firstNonEmpty < 0 && i === 2)\n            binaryExpression = binaryExpression.right;\n        }\n        var transformedTree = this.transformAny(tree.elements[i]);\n        binaryExpression = createBinaryExpression(binaryExpression, plusToken, transformedTree);\n      }\n      return new ParenExpression(null, binaryExpression);\n    }\n  }, {}, TempVarTransformer);\n  return {get TemplateLiteralTransformer() {\n      return TemplateLiteralTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/TypeAssertionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/TypeAssertionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/TypeAssertionTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"assert.type(\", \", \", \")\"], {raw: {value: Object.freeze([\"assert.type(\", \", \", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"assert.argumentTypes(\", \")\"], {raw: {value: Object.freeze([\"assert.argumentTypes(\", \")\"])}})),\n      $__2 = Object.freeze(Object.defineProperties([\"return assert.returnType((\", \"), \", \")\"], {raw: {value: Object.freeze([\"return assert.returnType((\", \"), \", \")\"])}})),\n      $__3 = Object.freeze(Object.defineProperties([\"$traceurRuntime.type.any\"], {raw: {value: Object.freeze([\"$traceurRuntime.type.any\"])}}));\n  var $__4 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTreeType\"),\n      BINDING_ELEMENT = $__4.BINDING_ELEMENT,\n      REST_PARAMETER = $__4.REST_PARAMETER;\n  var $__5 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      ImportDeclaration = $__5.ImportDeclaration,\n      ImportSpecifier = $__5.ImportSpecifier,\n      ImportSpecifierSet = $__5.ImportSpecifierSet,\n      Module = $__5.Module,\n      ModuleSpecifier = $__5.ModuleSpecifier,\n      Script = $__5.Script,\n      VariableDeclaration = $__5.VariableDeclaration;\n  var $__6 = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeFactory\"),\n      createArgumentList = $__6.createArgumentList,\n      createIdentifierExpression = $__6.createIdentifierExpression,\n      createImportedBinding = $__6.createImportedBinding,\n      createStringLiteralToken = $__6.createStringLiteralToken;\n  var $__7 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__7.parseExpression,\n      parseStatement = $__7.parseStatement;\n  var ParameterTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParameterTransformer\").ParameterTransformer;\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  var TypeAssertionTransformer = function TypeAssertionTransformer(identifierGenerator) {\n    $traceurRuntime.superConstructor($TypeAssertionTransformer).call(this, identifierGenerator);\n    this.returnTypeStack_ = [];\n    this.parametersStack_ = [];\n    this.assertionAdded_ = false;\n  };\n  var $TypeAssertionTransformer = TypeAssertionTransformer;\n  ($traceurRuntime.createClass)(TypeAssertionTransformer, {\n    transformScript: function(tree) {\n      return this.prependAssertionImport_($traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformScript\").call(this, tree), Script);\n    },\n    transformModule: function(tree) {\n      return this.prependAssertionImport_($traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformModule\").call(this, tree), Module);\n    },\n    transformVariableDeclaration: function(tree) {\n      if (tree.typeAnnotation && tree.initializer) {\n        var assert = parseExpression($__0, tree.initializer, tree.typeAnnotation);\n        tree = new VariableDeclaration(tree.location, tree.lvalue, tree.typeAnnotation, assert);\n        this.assertionAdded_ = true;\n      }\n      return $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformVariableDeclaration\").call(this, tree);\n    },\n    transformFormalParameterList: function(tree) {\n      this.parametersStack_.push({\n        atLeastOneParameterTyped: false,\n        arguments: []\n      });\n      var transformed = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformFormalParameterList\").call(this, tree);\n      var params = this.parametersStack_.pop();\n      if (params.atLeastOneParameterTyped) {\n        var argumentList = createArgumentList(params.arguments);\n        var assertStatement = parseStatement($__1, argumentList);\n        this.parameterStatements.push(assertStatement);\n        this.assertionAdded_ = true;\n      }\n      return transformed;\n    },\n    transformFormalParameter: function(tree) {\n      var transformed = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformFormalParameter\").call(this, tree);\n      switch (transformed.parameter.type) {\n        case BINDING_ELEMENT:\n          this.transformBindingElementParameter_(transformed.parameter, transformed.typeAnnotation);\n          break;\n        case REST_PARAMETER:\n          break;\n      }\n      return transformed;\n    },\n    transformGetAccessor: function(tree) {\n      this.pushReturnType_(tree.typeAnnotation);\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n      this.popReturnType_();\n      return tree;\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      this.pushReturnType_(tree.typeAnnotation);\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformPropertyMethodAssignment\").call(this, tree);\n      this.popReturnType_();\n      return tree;\n    },\n    transformFunctionDeclaration: function(tree) {\n      this.pushReturnType_(tree.typeAnnotation);\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n      this.popReturnType_();\n      return tree;\n    },\n    transformFunctionExpression: function(tree) {\n      this.pushReturnType_(tree.typeAnnotation);\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformFunctionExpression\").call(this, tree);\n      this.popReturnType_();\n      return tree;\n    },\n    transformArrowFunctionExpression: function(tree) {\n      this.pushReturnType_(null);\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformArrowFunctionExpression\").call(this, tree);\n      this.popReturnType_();\n      return tree;\n    },\n    transformReturnStatement: function(tree) {\n      tree = $traceurRuntime.superGet(this, $TypeAssertionTransformer.prototype, \"transformReturnStatement\").call(this, tree);\n      if (this.returnType_ && tree.expression) {\n        this.assertionAdded_ = true;\n        return parseStatement($__2, tree.expression, this.returnType_);\n      }\n      return tree;\n    },\n    transformBindingElementParameter_: function(element, typeAnnotation) {\n      if (!element.binding.isPattern()) {\n        if (typeAnnotation) {\n          this.paramTypes_.atLeastOneParameterTyped = true;\n        } else {\n          typeAnnotation = parseExpression($__3);\n        }\n        this.paramTypes_.arguments.push(createIdentifierExpression(element.binding.identifierToken), typeAnnotation);\n        return;\n      }\n    },\n    pushReturnType_: function(typeAnnotation) {\n      this.returnTypeStack_.push(this.transformAny(typeAnnotation));\n    },\n    prependAssertionImport_: function(tree, Ctor) {\n      if (!this.assertionAdded_ || options.typeAssertionModule === null)\n        return tree;\n      var binding = createImportedBinding('assert');\n      var importStatement = new ImportDeclaration(null, new ImportSpecifierSet(null, [new ImportSpecifier(null, binding, null)]), new ModuleSpecifier(null, createStringLiteralToken(options.typeAssertionModule)));\n      tree = new Ctor(tree.location, $traceurRuntime.spread([importStatement], tree.scriptItemList), tree.moduleName);\n      return tree;\n    },\n    popReturnType_: function() {\n      return this.returnTypeStack_.pop();\n    },\n    get returnType_() {\n      return this.returnTypeStack_.length > 0 ? this.returnTypeStack_[this.returnTypeStack_.length - 1] : null;\n    },\n    get paramTypes_() {\n      return this.parametersStack_[this.parametersStack_.length - 1];\n    }\n  }, {}, ParameterTransformer);\n  return {get TypeAssertionTransformer() {\n      return TypeAssertionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/TypeToExpressionTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/TypeToExpressionTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/TypeToExpressionTransformer\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"$traceurRuntime.type.\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.type.\", \")\"])}})),\n      $__1 = Object.freeze(Object.defineProperties([\"$traceurRuntime.genericType(\", \")\"], {raw: {value: Object.freeze([\"$traceurRuntime.genericType(\", \")\"])}}));\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__3 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      ArgumentList = $__3.ArgumentList,\n      IdentifierExpression = $__3.IdentifierExpression,\n      MemberExpression = $__3.MemberExpression;\n  var parseExpression = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseExpression;\n  var TypeToExpressionTransformer = function TypeToExpressionTransformer() {\n    $traceurRuntime.superConstructor($TypeToExpressionTransformer).apply(this, arguments);\n  };\n  var $TypeToExpressionTransformer = TypeToExpressionTransformer;\n  ($traceurRuntime.createClass)(TypeToExpressionTransformer, {\n    transformTypeName: function(tree) {\n      if (tree.moduleName) {\n        var operand = this.transformAny(tree.moduleName);\n        return new MemberExpression(tree.location, operand, tree.name);\n      }\n      return new IdentifierExpression(tree.location, tree.name);\n    },\n    transformPredefinedType: function(tree) {\n      return parseExpression($__0, tree.typeToken);\n    },\n    transformTypeReference: function(tree) {\n      var typeName = this.transformAny(tree.typeName);\n      var args = this.transformAny(tree.args);\n      var argumentList = new ArgumentList(tree.location, $traceurRuntime.spread([typeName], args));\n      return parseExpression($__1, argumentList);\n    },\n    transformTypeArguments: function(tree) {\n      return this.transformList(tree.args);\n    }\n  }, {}, ParseTreeTransformer);\n  return {get TypeToExpressionTransformer() {\n      return TypeToExpressionTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/TypeTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/TypeTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/TypeTransformer\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      FormalParameter = $__0.FormalParameter,\n      FunctionDeclaration = $__0.FunctionDeclaration,\n      FunctionExpression = $__0.FunctionExpression,\n      GetAccessor = $__0.GetAccessor,\n      PropertyMethodAssignment = $__0.PropertyMethodAssignment,\n      VariableDeclaration = $__0.VariableDeclaration;\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var TypeTransformer = function TypeTransformer() {\n    $traceurRuntime.superConstructor($TypeTransformer).apply(this, arguments);\n  };\n  var $TypeTransformer = TypeTransformer;\n  ($traceurRuntime.createClass)(TypeTransformer, {\n    transformVariableDeclaration: function(tree) {\n      if (tree.typeAnnotation) {\n        tree = new VariableDeclaration(tree.location, tree.lvalue, null, tree.initializer);\n      }\n      return $traceurRuntime.superGet(this, $TypeTransformer.prototype, \"transformVariableDeclaration\").call(this, tree);\n    },\n    transformFormalParameter: function(tree) {\n      if (tree.typeAnnotation !== null)\n        return new FormalParameter(tree.location, tree.parameter, null, []);\n      return tree;\n    },\n    transformFunctionDeclaration: function(tree) {\n      if (tree.typeAnnotation) {\n        tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $TypeTransformer.prototype, \"transformFunctionDeclaration\").call(this, tree);\n    },\n    transformFunctionExpression: function(tree) {\n      if (tree.typeAnnotation) {\n        tree = new FunctionExpression(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $TypeTransformer.prototype, \"transformFunctionExpression\").call(this, tree);\n    },\n    transformPropertyMethodAssignment: function(tree) {\n      if (tree.typeAnnotation) {\n        tree = new PropertyMethodAssignment(tree.location, tree.isStatic, tree.functionKind, tree.name, tree.parameterList, null, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $TypeTransformer.prototype, \"transformPropertyMethodAssignment\").call(this, tree);\n    },\n    transformGetAccessor: function(tree) {\n      if (tree.typeAnnotation) {\n        tree = new GetAccessor(tree.location, tree.isStatic, tree.name, null, tree.annotations, tree.body);\n      }\n      return $traceurRuntime.superGet(this, $TypeTransformer.prototype, \"transformGetAccessor\").call(this, tree);\n    }\n  }, {}, ParseTreeTransformer);\n  return {get TypeTransformer() {\n      return TypeTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/UnicodeEscapeSequenceTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/UnicodeEscapeSequenceTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/UnicodeEscapeSequenceTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var LiteralExpression = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").LiteralExpression;\n  var STRING = System.get(\"traceur@0.0.74/src/syntax/TokenType\").STRING;\n  var re = /(\\\\*)\\\\u{([0-9a-fA-F]+)}/g;\n  function zeroPad(value) {\n    return '0000'.slice(value.length) + value;\n  }\n  function needsTransform(token) {\n    return token.type === STRING && re.test(token.value);\n  }\n  function transformToken(token) {\n    return token.value.replace(re, (function(match, backslashes, hexDigits) {\n      var backslashIsEscaped = backslashes.length % 2 === 1;\n      if (backslashIsEscaped) {\n        return match;\n      }\n      var codePoint = parseInt(hexDigits, 16);\n      var value;\n      if (codePoint <= 0xFFFF) {\n        value = '\\\\u' + zeroPad(codePoint.toString(16).toUpperCase());\n      } else {\n        var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;\n        var low = (codePoint - 0x10000) % 0x400 + 0xDC00;\n        value = '\\\\u' + high.toString(16).toUpperCase() + '\\\\u' + low.toString(16).toUpperCase();\n      }\n      return backslashes + value;\n    }));\n  }\n  var UnicodeEscapeSequenceTransformer = function UnicodeEscapeSequenceTransformer() {\n    $traceurRuntime.superConstructor($UnicodeEscapeSequenceTransformer).apply(this, arguments);\n  };\n  var $UnicodeEscapeSequenceTransformer = UnicodeEscapeSequenceTransformer;\n  ($traceurRuntime.createClass)(UnicodeEscapeSequenceTransformer, {transformLiteralExpression: function(tree) {\n      var token = tree.literalToken;\n      if (needsTransform(token))\n        return new LiteralExpression(tree.location, transformToken(token));\n      return tree;\n    }}, {}, ParseTreeTransformer);\n  return {get UnicodeEscapeSequenceTransformer() {\n      return UnicodeEscapeSequenceTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\", path);\n  }\n  var UniqueIdentifierGenerator = function UniqueIdentifierGenerator() {\n    this.identifierIndex = 0;\n  };\n  ($traceurRuntime.createClass)(UniqueIdentifierGenerator, {generateUniqueIdentifier: function() {\n      return (\"$__\" + this.identifierIndex++);\n    }}, {});\n  return {get UniqueIdentifierGenerator() {\n      return UniqueIdentifierGenerator;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\", path);\n  }\n  var AmdTransformer = System.get(\"traceur@0.0.74/src/codegeneration/AmdTransformer\").AmdTransformer;\n  var AnnotationsTransformer = System.get(\"traceur@0.0.74/src/codegeneration/AnnotationsTransformer\").AnnotationsTransformer;\n  var ArrayComprehensionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ArrayComprehensionTransformer\").ArrayComprehensionTransformer;\n  var ArrowFunctionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ArrowFunctionTransformer\").ArrowFunctionTransformer;\n  var BlockBindingTransformer = System.get(\"traceur@0.0.74/src/codegeneration/BlockBindingTransformer\").BlockBindingTransformer;\n  var ClassTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ClassTransformer\").ClassTransformer;\n  var CommonJsModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/CommonJsModuleTransformer\").CommonJsModuleTransformer;\n  var ExponentiationTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ExponentiationTransformer\").ExponentiationTransformer;\n  var validateConst = System.get(\"traceur@0.0.74/src/semantics/ConstChecker\").validate;\n  var DefaultParametersTransformer = System.get(\"traceur@0.0.74/src/codegeneration/DefaultParametersTransformer\").DefaultParametersTransformer;\n  var DestructuringTransformer = System.get(\"traceur@0.0.74/src/codegeneration/DestructuringTransformer\").DestructuringTransformer;\n  var ForOfTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ForOfTransformer\").ForOfTransformer;\n  var validateFreeVariables = System.get(\"traceur@0.0.74/src/semantics/FreeVariableChecker\").validate;\n  var GeneratorComprehensionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/GeneratorComprehensionTransformer\").GeneratorComprehensionTransformer;\n  var GeneratorTransformPass = System.get(\"traceur@0.0.74/src/codegeneration/GeneratorTransformPass\").GeneratorTransformPass;\n  var InlineModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/InlineModuleTransformer\").InlineModuleTransformer;\n  var MemberVariableTransformer = System.get(\"traceur@0.0.74/src/codegeneration/MemberVariableTransformer\").MemberVariableTransformer;\n  var ModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ModuleTransformer\").ModuleTransformer;\n  var MultiTransformer = System.get(\"traceur@0.0.74/src/codegeneration/MultiTransformer\").MultiTransformer;\n  var NumericLiteralTransformer = System.get(\"traceur@0.0.74/src/codegeneration/NumericLiteralTransformer\").NumericLiteralTransformer;\n  var ObjectLiteralTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ObjectLiteralTransformer\").ObjectLiteralTransformer;\n  var PropertyNameShorthandTransformer = System.get(\"traceur@0.0.74/src/codegeneration/PropertyNameShorthandTransformer\").PropertyNameShorthandTransformer;\n  var InstantiateModuleTransformer = System.get(\"traceur@0.0.74/src/codegeneration/InstantiateModuleTransformer\").InstantiateModuleTransformer;\n  var RegularExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/RegularExpressionTransformer\").RegularExpressionTransformer;\n  var RestParameterTransformer = System.get(\"traceur@0.0.74/src/codegeneration/RestParameterTransformer\").RestParameterTransformer;\n  var SpreadTransformer = System.get(\"traceur@0.0.74/src/codegeneration/SpreadTransformer\").SpreadTransformer;\n  var SymbolTransformer = System.get(\"traceur@0.0.74/src/codegeneration/SymbolTransformer\").SymbolTransformer;\n  var TemplateLiteralTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TemplateLiteralTransformer\").TemplateLiteralTransformer;\n  var TypeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TypeTransformer\").TypeTransformer;\n  var TypeAssertionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TypeAssertionTransformer\").TypeAssertionTransformer;\n  var TypeToExpressionTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TypeToExpressionTransformer\").TypeToExpressionTransformer;\n  var UnicodeEscapeSequenceTransformer = System.get(\"traceur@0.0.74/src/codegeneration/UnicodeEscapeSequenceTransformer\").UnicodeEscapeSequenceTransformer;\n  var UniqueIdentifierGenerator = System.get(\"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\").UniqueIdentifierGenerator;\n  var $__33 = System.get(\"traceur@0.0.74/src/Options\"),\n      options = $__33.options,\n      transformOptions = $__33.transformOptions;\n  var FromOptionsTransformer = function FromOptionsTransformer(reporter) {\n    var idGenerator = arguments[1] !== (void 0) ? arguments[1] : new UniqueIdentifierGenerator();\n    var $__34 = this;\n    $traceurRuntime.superConstructor($FromOptionsTransformer).call(this, reporter, options.validate);\n    var append = (function(transformer) {\n      $__34.append((function(tree) {\n        return new transformer(idGenerator, reporter).transformAny(tree);\n      }));\n    });\n    if (transformOptions.blockBinding) {\n      this.append((function(tree) {\n        validateConst(tree, reporter);\n        return tree;\n      }));\n    }\n    if (options.freeVariableChecker) {\n      this.append((function(tree) {\n        validateFreeVariables(tree, reporter);\n        return tree;\n      }));\n    }\n    if (transformOptions.exponentiation)\n      append(ExponentiationTransformer);\n    if (transformOptions.numericLiterals)\n      append(NumericLiteralTransformer);\n    if (transformOptions.unicodeExpressions)\n      append(RegularExpressionTransformer);\n    if (transformOptions.templateLiterals)\n      append(TemplateLiteralTransformer);\n    if (options.types)\n      append(TypeToExpressionTransformer);\n    if (transformOptions.unicodeEscapeSequences)\n      append(UnicodeEscapeSequenceTransformer);\n    if (transformOptions.annotations)\n      append(AnnotationsTransformer);\n    if (options.memberVariables)\n      append(MemberVariableTransformer);\n    if (options.typeAssertions)\n      append(TypeAssertionTransformer);\n    if (transformOptions.propertyNameShorthand)\n      append(PropertyNameShorthandTransformer);\n    if (transformOptions.modules) {\n      switch (transformOptions.modules) {\n        case 'commonjs':\n          append(CommonJsModuleTransformer);\n          break;\n        case 'amd':\n          append(AmdTransformer);\n          break;\n        case 'inline':\n          append(InlineModuleTransformer);\n          break;\n        case 'instantiate':\n          append(InstantiateModuleTransformer);\n          break;\n        case 'register':\n          append(ModuleTransformer);\n          break;\n        default:\n          throw new Error('Invalid modules transform option');\n      }\n    }\n    if (transformOptions.arrowFunctions)\n      append(ArrowFunctionTransformer);\n    if (transformOptions.classes)\n      append(ClassTransformer);\n    if (transformOptions.propertyMethods || transformOptions.computedPropertyNames) {\n      append(ObjectLiteralTransformer);\n    }\n    if (transformOptions.generatorComprehension)\n      append(GeneratorComprehensionTransformer);\n    if (transformOptions.arrayComprehension)\n      append(ArrayComprehensionTransformer);\n    if (transformOptions.forOf)\n      append(ForOfTransformer);\n    if (transformOptions.restParameters)\n      append(RestParameterTransformer);\n    if (transformOptions.defaultParameters)\n      append(DefaultParametersTransformer);\n    if (transformOptions.destructuring)\n      append(DestructuringTransformer);\n    if (transformOptions.types)\n      append(TypeTransformer);\n    if (transformOptions.spread)\n      append(SpreadTransformer);\n    if (transformOptions.blockBinding) {\n      this.append((function(tree) {\n        var transformer = new BlockBindingTransformer(idGenerator, reporter, tree);\n        return transformer.transformAny(tree);\n      }));\n    }\n    if (transformOptions.generators || transformOptions.asyncFunctions)\n      append(GeneratorTransformPass);\n    if (transformOptions.symbols)\n      append(SymbolTransformer);\n  };\n  var $FromOptionsTransformer = FromOptionsTransformer;\n  ($traceurRuntime.createClass)(FromOptionsTransformer, {}, {}, MultiTransformer);\n  return {get FromOptionsTransformer() {\n      return FromOptionsTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/PureES6Transformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/PureES6Transformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/PureES6Transformer\", path);\n  }\n  var AnnotationsTransformer = System.get(\"traceur@0.0.74/src/codegeneration/AnnotationsTransformer\").AnnotationsTransformer;\n  var validateFreeVariables = System.get(\"traceur@0.0.74/src/semantics/FreeVariableChecker\").validate;\n  var MemberVariableTransformer = System.get(\"traceur@0.0.74/src/codegeneration/MemberVariableTransformer\").MemberVariableTransformer;\n  var MultiTransformer = System.get(\"traceur@0.0.74/src/codegeneration/MultiTransformer\").MultiTransformer;\n  var TypeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/TypeTransformer\").TypeTransformer;\n  var UniqueIdentifierGenerator = System.get(\"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\").UniqueIdentifierGenerator;\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  var PureES6Transformer = function PureES6Transformer(reporter) {\n    var idGenerator = arguments[1] !== (void 0) ? arguments[1] : new UniqueIdentifierGenerator();\n    var $__7 = this;\n    $traceurRuntime.superConstructor($PureES6Transformer).call(this, reporter, options.validate);\n    var append = (function(transformer) {\n      $__7.append((function(tree) {\n        return new transformer(idGenerator, reporter).transformAny(tree);\n      }));\n    });\n    if (options.freeVariableChecker) {\n      this.append((function(tree) {\n        validateFreeVariables(tree, reporter);\n        return tree;\n      }));\n    }\n    if (options.memberVariables)\n      append(MemberVariableTransformer);\n    append(AnnotationsTransformer);\n    append(TypeTransformer);\n  };\n  var $PureES6Transformer = PureES6Transformer;\n  ($traceurRuntime.createClass)(PureES6Transformer, {}, {}, MultiTransformer);\n  return {get PureES6Transformer() {\n      return PureES6Transformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      Module = $__1.Module,\n      Script = $__1.Script;\n  var AttachModuleNameTransformer = function AttachModuleNameTransformer(moduleName) {\n    this.moduleName_ = moduleName;\n  };\n  ($traceurRuntime.createClass)(AttachModuleNameTransformer, {\n    transformModule: function(tree) {\n      return new Module(tree.location, tree.scriptItemList, this.moduleName_);\n    },\n    transformScript: function(tree) {\n      return new Script(tree.location, tree.scriptItemList, this.moduleName_);\n    }\n  }, {}, ParseTreeTransformer);\n  return {get AttachModuleNameTransformer() {\n      return AttachModuleNameTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/Compiler\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/Compiler\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/Compiler\", path);\n  }\n  var AttachModuleNameTransformer = System.get(\"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\").AttachModuleNameTransformer;\n  var FromOptionsTransformer = System.get(\"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\").FromOptionsTransformer;\n  var Parser = System.get(\"traceur@0.0.74/src/syntax/Parser\").Parser;\n  var PureES6Transformer = System.get(\"traceur@0.0.74/src/codegeneration/PureES6Transformer\").PureES6Transformer;\n  var SourceFile = System.get(\"traceur@0.0.74/src/syntax/SourceFile\").SourceFile;\n  var CollectingErrorReporter = System.get(\"traceur@0.0.74/src/util/CollectingErrorReporter\").CollectingErrorReporter;\n  var $__6 = System.get(\"traceur@0.0.74/src/Options\"),\n      Options = $__6.Options,\n      traceurOptions = $__6.options,\n      versionLockedOptions = $__6.versionLockedOptions;\n  var ParseTreeMapWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\").ParseTreeMapWriter;\n  var ParseTreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\").ParseTreeWriter;\n  var SourceMapGenerator = System.get(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\").SourceMapGenerator;\n  function merge() {\n    for (var srcs = [],\n        $__11 = 0; $__11 < arguments.length; $__11++)\n      srcs[$__11] = arguments[$__11];\n    var dest = Object.create(null);\n    srcs.forEach((function(src) {\n      Object.keys(src).forEach((function(key) {\n        dest[key] = src[key];\n      }));\n      var srcModules = src.modules;\n      if (typeof srcModules !== 'undefined') {\n        dest.modules = srcModules;\n      }\n    }));\n    return dest;\n  }\n  function basePath(name) {\n    if (!name)\n      return null;\n    var lastSlash = name.lastIndexOf('/');\n    if (lastSlash < 0)\n      return null;\n    return name.substring(0, lastSlash + 1);\n  }\n  var Compiler = function Compiler() {\n    var overridingOptions = arguments[0] !== (void 0) ? arguments[0] : {};\n    this.options_ = new Options(this.defaultOptions());\n    this.options_.setFromObject(overridingOptions);\n    this.sourceMapGenerator_ = null;\n    this.sourceMapInfo_ = null;\n  };\n  var $Compiler = Compiler;\n  ($traceurRuntime.createClass)(Compiler, {\n    compile: function(content) {\n      var sourceName = arguments[1] !== (void 0) ? arguments[1] : '<compileSource>';\n      var outputName = arguments[2] !== (void 0) ? arguments[2] : '<compileOutput>';\n      var sourceRoot = arguments[3];\n      sourceName = this.normalize(sourceName);\n      outputName = this.normalize(outputName);\n      var tree = this.parse(content, sourceName);\n      var moduleName = this.options_.moduleName;\n      if (moduleName) {\n        if (typeof moduleName !== 'string')\n          moduleName = sourceName.replace(/\\.js$/, '');\n      }\n      tree = this.transform(tree, moduleName);\n      return this.write(tree, outputName, sourceRoot);\n    },\n    throwIfErrors: function(errorReporter) {\n      if (errorReporter.hadError())\n        throw errorReporter.errors;\n    },\n    parse: function(content) {\n      var sourceName = arguments[1] !== (void 0) ? arguments[1] : '<compiler-parse-input>';\n      sourceName = this.normalize(sourceName);\n      this.sourceMapGenerator_ = null;\n      traceurOptions.setFromObject(this.options_);\n      var errorReporter = new CollectingErrorReporter();\n      var sourceFile = new SourceFile(sourceName, content);\n      var parser = new Parser(sourceFile, errorReporter);\n      var tree = this.options_.script ? parser.parseScript() : parser.parseModule();\n      this.throwIfErrors(errorReporter);\n      return tree;\n    },\n    transform: function(tree) {\n      var moduleName = arguments[1];\n      var transformer;\n      if (moduleName) {\n        var transformer = new AttachModuleNameTransformer(moduleName);\n        tree = transformer.transformAny(tree);\n      }\n      var errorReporter = new CollectingErrorReporter();\n      if (this.options_.outputLanguage.toLowerCase() === 'es6') {\n        transformer = new PureES6Transformer(errorReporter);\n      } else {\n        transformer = new FromOptionsTransformer(errorReporter);\n      }\n      var transformedTree = transformer.transform(tree);\n      this.throwIfErrors(errorReporter);\n      return transformedTree;\n    },\n    createSourceMapGenerator_: function(outputName) {\n      var sourceRoot = arguments[1];\n      if (this.options_.sourceMaps) {\n        var sourceRoot = sourceRoot || basePath(outputName);\n        return new SourceMapGenerator({\n          file: outputName,\n          sourceRoot: sourceRoot\n        });\n      }\n    },\n    getSourceMap: function() {\n      if (this.sourceMapGenerator_)\n        return this.sourceMapGenerator_.toString();\n    },\n    get sourceMapInfo() {\n      return this.sourceMapInfo_;\n    },\n    write: function(tree) {\n      var outputName = arguments[1];\n      var sourceRoot = arguments[2];\n      outputName = this.normalize(outputName);\n      sourceRoot = this.normalize(sourceRoot);\n      var writer;\n      this.sourceMapGenerator_ = this.createSourceMapGenerator_(outputName, sourceRoot);\n      if (this.sourceMapGenerator_) {\n        writer = new ParseTreeMapWriter(this.sourceMapGenerator_, sourceRoot, this.options_);\n      } else {\n        writer = new ParseTreeWriter(this.options_);\n      }\n      writer.visitAny(tree);\n      var compiledCode = writer.toString(tree);\n      if (this.sourceMapGenerator_) {\n        var sourceMappingURL = this.sourceMappingURL(outputName);\n        compiledCode += '\\n//# sourceMappingURL=' + sourceMappingURL + '\\n';\n      }\n      return compiledCode;\n    },\n    sourceName: function(filename) {\n      return filename;\n    },\n    sourceMappingURL: function(filename) {\n      this.sourceMapInfo_ = {\n        url: filename,\n        map: this.getSourceMap()\n      };\n      if (this.options_.sourceMaps === 'inline') {\n        if (Reflect.global.btoa) {\n          return 'data:application/json;base64,' + btoa(unescape(encodeURIComponent(this.getSourceMap())));\n        }\n      }\n      return filename.split('/').pop().replace(/\\.js$/, '.map');\n    },\n    sourceNameFromTree: function(tree) {\n      return tree.location.start.source.name;\n    },\n    defaultOptions: function() {\n      return versionLockedOptions;\n    },\n    normalize: function(name) {\n      return name && name.replace(/\\\\/g, '/');\n    }\n  }, {\n    script: function(content) {\n      var options = arguments[1] !== (void 0) ? arguments[1] : {};\n      options = new Options(options);\n      options.script = true;\n      return new $Compiler(options).compile(content);\n    },\n    module: function(content) {\n      var options = arguments[1] !== (void 0) ? arguments[1] : {};\n      options = new Options(options);\n      options.modules = 'register';\n      return new $Compiler(options).compile(content);\n    },\n    amdOptions: function() {\n      var options = arguments[0] !== (void 0) ? arguments[0] : {};\n      var amdOptions = {\n        modules: 'amd',\n        sourceMaps: false,\n        moduleName: false\n      };\n      return merge(amdOptions, options);\n    },\n    commonJSOptions: function() {\n      var options = arguments[0] !== (void 0) ? arguments[0] : {};\n      var commonjsOptions = {\n        modules: 'commonjs',\n        sourceMaps: false,\n        moduleName: false\n      };\n      return merge(commonjsOptions, options);\n    }\n  });\n  return {get Compiler() {\n      return Compiler;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ValidationVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ValidationVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ValidationVisitor\", path);\n  }\n  var ModuleVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleVisitor\").ModuleVisitor;\n  var ValidationVisitor = function ValidationVisitor() {\n    $traceurRuntime.superConstructor($ValidationVisitor).apply(this, arguments);\n  };\n  var $ValidationVisitor = ValidationVisitor;\n  ($traceurRuntime.createClass)(ValidationVisitor, {\n    checkExport_: function(tree, name) {\n      var description = this.validatingModuleDescription_;\n      if (description && !description.getExport(name)) {\n        var moduleName = description.normalizedName;\n        this.reportError(tree, (\"'\" + name + \"' is not exported by '\" + moduleName + \"'\"));\n      }\n    },\n    checkImport_: function(tree, name) {\n      var existingImport = this.moduleSymbol.getImport(name);\n      if (existingImport) {\n        this.reportError(tree, (\"'\" + name + \"' was previously imported at \" + existingImport.location.start));\n      } else {\n        this.moduleSymbol.addImport(name, tree);\n      }\n    },\n    visitAndValidate_: function(moduleDescription, tree) {\n      var validatingModuleDescription = this.validatingModuleDescription_;\n      this.validatingModuleDescription_ = moduleDescription;\n      this.visitAny(tree);\n      this.validatingModuleDescription_ = validatingModuleDescription;\n    },\n    visitNamedExport: function(tree) {\n      if (tree.moduleSpecifier) {\n        var name = tree.moduleSpecifier.token.processedValue;\n        var moduleDescription = this.getExportsListForModuleSpecifier(name);\n        this.visitAndValidate_(moduleDescription, tree.specifierSet);\n      }\n    },\n    visitExportSpecifier: function(tree) {\n      this.checkExport_(tree, tree.lhs.value);\n    },\n    visitImportDeclaration: function(tree) {\n      var name = tree.moduleSpecifier.token.processedValue;\n      var moduleDescription = this.getExportsListForModuleSpecifier(name);\n      this.visitAndValidate_(moduleDescription, tree.importClause);\n    },\n    visitImportSpecifier: function(tree) {\n      var importName = tree.binding.getStringValue();\n      var exportName = tree.name ? tree.name.value : importName;\n      this.checkImport_(tree, importName);\n      this.checkExport_(tree, exportName);\n    },\n    visitImportedBinding: function(tree) {\n      var importName = tree.binding.getStringValue();\n      this.checkImport_(tree, importName);\n      this.checkExport_(tree, 'default');\n    }\n  }, {}, ModuleVisitor);\n  return {get ValidationVisitor() {\n      return ValidationVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ExportListBuilder\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ExportListBuilder\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ExportListBuilder\", path);\n  }\n  var ExportVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ExportVisitor\").ExportVisitor;\n  var ValidationVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ValidationVisitor\").ValidationVisitor;\n  var transformOptions = System.get(\"traceur@0.0.74/src/Options\").transformOptions;\n  function buildExportList(deps, loader, reporter) {\n    if (!transformOptions.modules)\n      return;\n    function doVisit(ctor) {\n      for (var i = 0; i < deps.length; i++) {\n        var visitor = new ctor(reporter, loader, deps[i]);\n        visitor.visitAny(deps[i].tree);\n      }\n    }\n    function reverseVisit(ctor) {\n      for (var i = deps.length - 1; i >= 0; i--) {\n        var visitor = new ctor(reporter, loader, deps[i]);\n        visitor.visitAny(deps[i].tree);\n      }\n    }\n    reverseVisit(ExportVisitor);\n    doVisit(ValidationVisitor);\n  }\n  return {get buildExportList() {\n      return buildExportList;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/ModuleSpecifierVisitor\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/ModuleSpecifierVisitor\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/ModuleSpecifierVisitor\", path);\n  }\n  var ParseTreeVisitor = System.get(\"traceur@0.0.74/src/syntax/ParseTreeVisitor\").ParseTreeVisitor;\n  var options = System.get(\"traceur@0.0.74/src/Options\").options;\n  var ModuleSpecifierVisitor = function ModuleSpecifierVisitor() {\n    $traceurRuntime.superConstructor($ModuleSpecifierVisitor).call(this);\n    this.moduleSpecifiers_ = Object.create(null);\n  };\n  var $ModuleSpecifierVisitor = ModuleSpecifierVisitor;\n  ($traceurRuntime.createClass)(ModuleSpecifierVisitor, {\n    get moduleSpecifiers() {\n      return Object.keys(this.moduleSpecifiers_);\n    },\n    visitModuleSpecifier: function(tree) {\n      this.moduleSpecifiers_[tree.token.processedValue] = true;\n    },\n    visitVariableDeclaration: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitVariableDeclaration\").call(this, tree);\n    },\n    visitFormalParameter: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitFormalParameter\").call(this, tree);\n    },\n    visitGetAccessor: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitGetAccessor\").call(this, tree);\n    },\n    visitPropertyMethodAssignment: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitPropertyMethodAssignment\").call(this, tree);\n    },\n    visitFunctionDeclaration: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitFunctionDeclaration\").call(this, tree);\n    },\n    visitFunctionExpression: function(tree) {\n      this.addTypeAssertionDependency_(tree.typeAnnotation);\n      return $traceurRuntime.superGet(this, $ModuleSpecifierVisitor.prototype, \"visitFunctionExpression\").call(this, tree);\n    },\n    addTypeAssertionDependency_: function(typeAnnotation) {\n      if (typeAnnotation !== null && options.typeAssertionModule !== null)\n        this.moduleSpecifiers_[options.typeAssertionModule] = true;\n    }\n  }, {}, ParseTreeVisitor);\n  return {get ModuleSpecifierVisitor() {\n      return ModuleSpecifierVisitor;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/system-map\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/system-map\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/system-map\", path);\n  }\n  function prefixMatchLength(name, prefix) {\n    var prefixParts = prefix.split('/');\n    var nameParts = name.split('/');\n    if (prefixParts.length > nameParts.length)\n      return 0;\n    for (var i = 0; i < prefixParts.length; i++) {\n      if (nameParts[i] != prefixParts[i])\n        return 0;\n    }\n    return prefixParts.length;\n  }\n  function applyMap(map, name, parentName) {\n    var curMatch,\n        curMatchLength = 0;\n    var curParent,\n        curParentMatchLength = 0;\n    if (parentName) {\n      var mappedName;\n      Object.getOwnPropertyNames(map).some(function(p) {\n        var curMap = map[p];\n        if (curMap && typeof curMap === 'object') {\n          if (prefixMatchLength(parentName, p) <= curParentMatchLength)\n            return;\n          Object.getOwnPropertyNames(curMap).forEach(function(q) {\n            if (prefixMatchLength(name, q) > curMatchLength) {\n              curMatch = q;\n              curMatchLength = q.split('/').length;\n              curParent = p;\n              curParentMatchLength = p.split('/').length;\n            }\n          });\n        }\n        if (curMatch) {\n          var subPath = name.split('/').splice(curMatchLength).join('/');\n          mappedName = map[curParent][curMatch] + (subPath ? '/' + subPath : '');\n          return mappedName;\n        }\n      });\n    }\n    if (mappedName)\n      return mappedName;\n    Object.getOwnPropertyNames(map).forEach(function(p) {\n      var curMap = map[p];\n      if (curMap && typeof curMap === 'string') {\n        if (prefixMatchLength(name, p) > curMatchLength) {\n          curMatch = p;\n          curMatchLength = p.split('/').length;\n        }\n      }\n    });\n    if (!curMatch)\n      return name;\n    var subPath = name.split('/').splice(curMatchLength).join('/');\n    return map[curMatch] + (subPath ? '/' + subPath : '');\n  }\n  var systemjs = {applyMap: applyMap};\n  return {get systemjs() {\n      return systemjs;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/url\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/url\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/url\", path);\n  }\n  var canonicalizeUrl = $traceurRuntime.canonicalizeUrl;\n  var isAbsolute = $traceurRuntime.isAbsolute;\n  var removeDotSegments = $traceurRuntime.removeDotSegments;\n  var resolveUrl = $traceurRuntime.resolveUrl;\n  return {\n    get canonicalizeUrl() {\n      return canonicalizeUrl;\n    },\n    get isAbsolute() {\n      return isAbsolute;\n    },\n    get removeDotSegments() {\n      return removeDotSegments;\n    },\n    get resolveUrl() {\n      return resolveUrl;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/runtime/LoaderCompiler\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/LoaderCompiler\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/LoaderCompiler\", path);\n  }\n  var AttachModuleNameTransformer = System.get(\"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\").AttachModuleNameTransformer;\n  var FromOptionsTransformer = System.get(\"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\").FromOptionsTransformer;\n  var buildExportList = System.get(\"traceur@0.0.74/src/codegeneration/module/ExportListBuilder\").buildExportList;\n  var CollectingErrorReporter = System.get(\"traceur@0.0.74/src/util/CollectingErrorReporter\").CollectingErrorReporter;\n  var Compiler = System.get(\"traceur@0.0.74/src/Compiler\").Compiler;\n  var ModuleSpecifierVisitor = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleSpecifierVisitor\").ModuleSpecifierVisitor;\n  var ModuleSymbol = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\").ModuleSymbol;\n  var Parser = System.get(\"traceur@0.0.74/src/syntax/Parser\").Parser;\n  var globalOptions = System.get(\"traceur@0.0.74/src/Options\").options;\n  var SourceFile = System.get(\"traceur@0.0.74/src/syntax/SourceFile\").SourceFile;\n  var systemjs = System.get(\"traceur@0.0.74/src/runtime/system-map\").systemjs;\n  var toSource = System.get(\"traceur@0.0.74/src/outputgeneration/toSource\").toSource;\n  var UniqueIdentifierGenerator = System.get(\"traceur@0.0.74/src/codegeneration/UniqueIdentifierGenerator\").UniqueIdentifierGenerator;\n  var $__13 = System.get(\"traceur@0.0.74/src/util/url\"),\n      isAbsolute = $__13.isAbsolute,\n      resolveUrl = $__13.resolveUrl;\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var NOT_STARTED = 0;\n  var LOADING = 1;\n  var LOADED = 2;\n  var PARSED = 3;\n  var TRANSFORMING = 4;\n  var TRANSFORMED = 5;\n  var COMPLETE = 6;\n  var ERROR = 7;\n  var identifierGenerator = new UniqueIdentifierGenerator();\n  var anonymousSourcesSeen = 0;\n  var LoaderCompiler = function LoaderCompiler() {};\n  ($traceurRuntime.createClass)(LoaderCompiler, {\n    getModuleSpecifiers: function(codeUnit) {\n      this.parse(codeUnit);\n      codeUnit.state = PARSED;\n      var moduleSpecifierVisitor = new ModuleSpecifierVisitor();\n      moduleSpecifierVisitor.visit(codeUnit.metadata.tree);\n      return moduleSpecifierVisitor.moduleSpecifiers;\n    },\n    parse: function(codeUnit) {\n      assert(!codeUnit.metadata.tree);\n      var metadata = codeUnit.metadata;\n      var options = metadata.traceurOptions;\n      if (codeUnit.type === 'script')\n        options.script = true;\n      metadata.compiler = new Compiler(options);\n      var sourceName = codeUnit.metadata.sourceName = codeUnit.address || codeUnit.normalizedName || String(++anonymousSourcesSeen);\n      metadata.tree = metadata.compiler.parse(codeUnit.source, sourceName);\n    },\n    transform: function(codeUnit) {\n      var metadata = codeUnit.metadata;\n      metadata.transformedTree = metadata.compiler.transform(metadata.tree, codeUnit.normalizedName);\n    },\n    write: function(codeUnit) {\n      var metadata = codeUnit.metadata;\n      var outputName = metadata.outputName || metadata.sourceName || '<loaderOutput>';\n      var sourceRoot = metadata.sourceRoot;\n      metadata.transcoded = metadata.compiler.write(metadata.transformedTree, outputName);\n      if (codeUnit.address && metadata.transcoded)\n        metadata.transcoded += '//# sourceURL=' + codeUnit.address;\n    },\n    evaluateCodeUnit: function(codeUnit) {\n      var result = ('global', eval)(codeUnit.metadata.transcoded);\n      codeUnit.metadata.transformedTree = null;\n      return result;\n    },\n    analyzeDependencies: function(dependencies, loader) {\n      var deps = [];\n      for (var i = 0; i < dependencies.length; i++) {\n        var codeUnit = dependencies[i];\n        assert(codeUnit.state >= PARSED);\n        if (codeUnit.state == PARSED) {\n          var symbol = codeUnit.metadata.moduleSymbol = new ModuleSymbol(codeUnit.metadata.tree, codeUnit.normalizedName);\n          deps.push(symbol);\n        }\n      }\n      this.checkForErrors((function(reporter) {\n        return buildExportList(deps, loader, reporter);\n      }));\n    },\n    checkForErrors: function(fncOfReporter) {\n      var reporter = new CollectingErrorReporter();\n      var result = fncOfReporter(reporter);\n      if (reporter.hadError())\n        throw reporter.toError();\n      return result;\n    }\n  }, {});\n  return {get LoaderCompiler() {\n      return LoaderCompiler;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/InternalLoader\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/InternalLoader\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/InternalLoader\", path);\n  }\n  var assert = System.get(\"traceur@0.0.74/src/util/assert\").assert;\n  var LoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/LoaderCompiler\").LoaderCompiler;\n  var ExportsList = System.get(\"traceur@0.0.74/src/codegeneration/module/ModuleSymbol\").ExportsList;\n  var Map = System.get(\"traceur@0.0.74/src/runtime/polyfills/Map\").Map;\n  var $__4 = System.get(\"traceur@0.0.74/src/util/url\"),\n      isAbsolute = $__4.isAbsolute,\n      resolveUrl = $__4.resolveUrl;\n  var Options = System.get(\"traceur@0.0.74/src/Options\").Options;\n  var NOT_STARTED = 0;\n  var LOADING = 1;\n  var LOADED = 2;\n  var PARSED = 3;\n  var TRANSFORMING = 4;\n  var TRANSFORMED = 5;\n  var COMPLETE = 6;\n  var ERROR = 7;\n  function mapToValues(map) {\n    var array = [];\n    map.forEach((function(v) {\n      array.push(v);\n    }));\n    return array;\n  }\n  var LoaderError = function LoaderError(msg, tree) {\n    this.message = msg;\n    this.tree = tree;\n    this.name = 'LoaderError';\n  };\n  ($traceurRuntime.createClass)(LoaderError, {}, {}, Error);\n  var CodeUnit = function CodeUnit(loaderCompiler, normalizedName, type, state, name, referrerName, address) {\n    var $__6 = this;\n    this.promise = new Promise((function(res, rej) {\n      $__6.loaderCompiler = loaderCompiler;\n      $__6.normalizedName = normalizedName;\n      $__6.type = type;\n      $__6.name_ = name;\n      $__6.referrerName_ = referrerName;\n      $__6.address = address;\n      $__6.state_ = state || NOT_STARTED;\n      $__6.error = null;\n      $__6.result = null;\n      $__6.metadata_ = {};\n      $__6.dependencies = [];\n      $__6.resolve = res;\n      $__6.reject = rej;\n    }));\n  };\n  ($traceurRuntime.createClass)(CodeUnit, {\n    get state() {\n      return this.state_;\n    },\n    set state(state) {\n      if (state < this.state_) {\n        throw new Error('Invalid state change');\n      }\n      this.state_ = state;\n    },\n    get metadata() {\n      return this.metadata_;\n    },\n    set metadata(value) {\n      assert(value);\n      this.metadata_ = value;\n    },\n    nameTrace: function() {\n      var trace = this.specifiedAs();\n      if (isAbsolute(this.name_)) {\n        return trace + 'An absolute name.\\n';\n      }\n      if (this.referrerName_) {\n        return trace + this.importedBy() + this.normalizesTo();\n      }\n      return trace + this.normalizesTo();\n    },\n    specifiedAs: function() {\n      return (\"Specified as \" + this.name_ + \".\\n\");\n    },\n    importedBy: function() {\n      return (\"Imported by \" + this.referrerName_ + \".\\n\");\n    },\n    normalizesTo: function() {\n      return 'Normalizes to ' + this.normalizedName + '\\n';\n    }\n  }, {});\n  var PreCompiledCodeUnit = function PreCompiledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, module) {\n    $traceurRuntime.superConstructor($PreCompiledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', COMPLETE, name, referrerName, address);\n    this.result = module;\n    this.resolve(this.result);\n  };\n  var $PreCompiledCodeUnit = PreCompiledCodeUnit;\n  ($traceurRuntime.createClass)(PreCompiledCodeUnit, {}, {}, CodeUnit);\n  var BundledCodeUnit = function BundledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, deps, execute) {\n    $traceurRuntime.superConstructor($BundledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', TRANSFORMED, name, referrerName, address);\n    this.deps = deps;\n    this.execute = execute;\n  };\n  var $BundledCodeUnit = BundledCodeUnit;\n  ($traceurRuntime.createClass)(BundledCodeUnit, {\n    getModuleSpecifiers: function() {\n      return this.deps;\n    },\n    evaluate: function() {\n      var $__6 = this;\n      var normalizedNames = this.deps.map((function(name) {\n        return $__6.loader_.normalize(name);\n      }));\n      var module = this.execute.apply(Reflect.global, normalizedNames);\n      System.set(this.normalizedName, module);\n      return module;\n    }\n  }, {}, CodeUnit);\n  var HookedCodeUnit = function HookedCodeUnit() {\n    $traceurRuntime.superConstructor($HookedCodeUnit).apply(this, arguments);\n  };\n  var $HookedCodeUnit = HookedCodeUnit;\n  ($traceurRuntime.createClass)(HookedCodeUnit, {\n    getModuleSpecifiers: function() {\n      return this.loaderCompiler.getModuleSpecifiers(this);\n    },\n    evaluate: function() {\n      return this.loaderCompiler.evaluateCodeUnit(this);\n    }\n  }, {}, CodeUnit);\n  var LoadCodeUnit = function LoadCodeUnit(loaderCompiler, normalizedName, name, referrerName, address) {\n    $traceurRuntime.superConstructor($LoadCodeUnit).call(this, loaderCompiler, normalizedName, 'module', NOT_STARTED, name, referrerName, address);\n  };\n  var $LoadCodeUnit = LoadCodeUnit;\n  ($traceurRuntime.createClass)(LoadCodeUnit, {}, {}, HookedCodeUnit);\n  var EvalCodeUnit = function EvalCodeUnit(loaderCompiler, code) {\n    var type = arguments[2] !== (void 0) ? arguments[2] : 'script';\n    var normalizedName = arguments[3];\n    var referrerName = arguments[4];\n    var address = arguments[5];\n    $traceurRuntime.superConstructor($EvalCodeUnit).call(this, loaderCompiler, normalizedName, type, LOADED, null, referrerName, address);\n    this.source = code;\n  };\n  var $EvalCodeUnit = EvalCodeUnit;\n  ($traceurRuntime.createClass)(EvalCodeUnit, {}, {}, HookedCodeUnit);\n  var uniqueNameCount = 0;\n  var InternalLoader = function InternalLoader(loader, loaderCompiler) {\n    assert(loaderCompiler);\n    this.loader_ = loader;\n    this.loaderCompiler = loaderCompiler;\n    this.cache = new Map();\n    this.urlToKey = Object.create(null);\n    this.sync_ = false;\n    this.sourceMapsByURL_ = Object.create(null);\n  };\n  ($traceurRuntime.createClass)(InternalLoader, {\n    defaultMetadata_: function() {\n      var metadata = arguments[0] !== (void 0) ? arguments[0] : {};\n      metadata.traceurOptions = metadata.traceurOptions || new Options();\n      return metadata;\n    },\n    defaultModuleMetadata_: function() {\n      var metadata = arguments[0] !== (void 0) ? arguments[0] : {};\n      var metadata = this.defaultMetadata_(metadata);\n      metadata.traceurOptions.script = false;\n      return metadata;\n    },\n    getSourceMap: function(url) {\n      return this.sourceMapsByURL_[url];\n    },\n    load: function(name) {\n      var referrerName = arguments[1] !== (void 0) ? arguments[1] : this.loader_.baseURL;\n      var address = arguments[2];\n      var metadata = arguments[3] !== (void 0) ? arguments[3] : {};\n      metadata = this.defaultMetadata_(metadata);\n      var codeUnit = this.getOrCreateCodeUnit_(name, referrerName, address, metadata);\n      this.load_(codeUnit);\n      return codeUnit.promise.then((function() {\n        return codeUnit;\n      }));\n    },\n    load_: function(codeUnit) {\n      var $__6 = this;\n      if (codeUnit.state === ERROR) {\n        return codeUnit;\n      }\n      if (codeUnit.state === TRANSFORMED) {\n        this.handleCodeUnitLoaded(codeUnit);\n      } else {\n        if (codeUnit.state !== NOT_STARTED)\n          return codeUnit;\n        codeUnit.state = LOADING;\n        codeUnit.address = this.loader_.locate(codeUnit);\n        this.loader_.fetch(codeUnit).then((function(text) {\n          codeUnit.source = text;\n          return codeUnit;\n        })).then((function(load) {\n          return $__6.loader_.translate(load);\n        })).then((function(source) {\n          codeUnit.source = source;\n          codeUnit.state = LOADED;\n          $__6.handleCodeUnitLoaded(codeUnit);\n          return codeUnit;\n        })).catch((function(err) {\n          try {\n            codeUnit.state = ERROR;\n            codeUnit.error = err;\n            $__6.handleCodeUnitLoadError(codeUnit);\n          } catch (ex) {\n            console.error('Internal Error ' + (ex.stack || ex));\n          }\n        }));\n      }\n      return codeUnit;\n    },\n    module: function(code, referrerName, address, metadata) {\n      var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', null, referrerName, address);\n      codeUnit.metadata = this.defaultMetadata_(metadata);\n      this.cache.set({}, codeUnit);\n      this.handleCodeUnitLoaded(codeUnit);\n      return codeUnit.promise;\n    },\n    define: function(normalizedName, code, address, metadata) {\n      var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', normalizedName, null, address);\n      var key = this.getKey(normalizedName, 'module');\n      codeUnit.metadata = this.defaultMetadata_(metadata);\n      this.cache.set(key, codeUnit);\n      this.handleCodeUnitLoaded(codeUnit);\n      return codeUnit.promise;\n    },\n    script: function(code, name, referrerName, address, metadata) {\n      var normalizedName = System.normalize(name || '', referrerName, address);\n      var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'script', normalizedName, referrerName, address);\n      var key = {};\n      if (name)\n        key = this.getKey(normalizedName, 'script');\n      codeUnit.metadata = this.defaultMetadata_(metadata);\n      this.cache.set(key, codeUnit);\n      this.handleCodeUnitLoaded(codeUnit);\n      return codeUnit.promise;\n    },\n    getKey: function(url, type) {\n      var combined = type + ':' + url;\n      if (combined in this.urlToKey) {\n        return this.urlToKey[combined];\n      }\n      return this.urlToKey[combined] = {};\n    },\n    getCodeUnit_: function(normalizedName, type) {\n      var key = this.getKey(normalizedName, type);\n      var codeUnit = this.cache.get(key);\n      return {\n        key: key,\n        codeUnit: codeUnit\n      };\n    },\n    getOrCreateCodeUnit_: function(name, referrerName, address, metadata) {\n      var normalizedName = System.normalize(name, referrerName, address);\n      var type = 'module';\n      if (metadata && metadata.traceurOptions && metadata.traceurOptions.script)\n        type = 'script';\n      var $__8 = this.getCodeUnit_(normalizedName, type),\n          key = $__8.key,\n          codeUnit = $__8.codeUnit;\n      if (!codeUnit) {\n        assert(metadata && metadata.traceurOptions);\n        var module = this.loader_.get(normalizedName);\n        if (module) {\n          codeUnit = new PreCompiledCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address, module);\n          codeUnit.type = 'module';\n        } else {\n          var bundledModule = this.loader_.bundledModule(name);\n          if (bundledModule) {\n            codeUnit = new BundledCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address, bundledModule.deps, bundledModule.execute);\n          } else {\n            codeUnit = new LoadCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address);\n            codeUnit.type = type;\n          }\n        }\n        codeUnit.metadata = {\n          traceurOptions: metadata.traceurOptions,\n          outputName: metadata.outputName\n        };\n        this.cache.set(key, codeUnit);\n      }\n      return codeUnit;\n    },\n    areAll: function(state) {\n      return mapToValues(this.cache).every((function(codeUnit) {\n        return codeUnit.state >= state;\n      }));\n    },\n    getCodeUnitForModuleSpecifier: function(name, referrerName) {\n      var normalizedName = this.loader_.normalize(name, referrerName);\n      return this.getCodeUnit_(normalizedName, 'module').codeUnit;\n    },\n    getExportsListForModuleSpecifier: function(name, referrer) {\n      var codeUnit = this.getCodeUnitForModuleSpecifier(name, referrer);\n      var exportsList = codeUnit.metadata.moduleSymbol;\n      if (!exportsList) {\n        if (codeUnit.result) {\n          exportsList = new ExportsList(codeUnit.normalizedName);\n          exportsList.addExportsFromModule(codeUnit.result);\n        } else {\n          throw new Error((\"InternalError: \" + name + \" is not a module, required by \" + referrer));\n        }\n      }\n      return exportsList;\n    },\n    handleCodeUnitLoaded: function(codeUnit) {\n      var $__6 = this;\n      var referrerName = codeUnit.normalizedName;\n      try {\n        var moduleSpecifiers = codeUnit.getModuleSpecifiers();\n        if (!moduleSpecifiers) {\n          this.abortAll((\"No module specifiers in \" + referrerName));\n          return;\n        }\n        codeUnit.dependencies = moduleSpecifiers.sort().map((function(name) {\n          return $__6.getOrCreateCodeUnit_(name, referrerName, null, $__6.defaultModuleMetadata_(codeUnit.metadata));\n        }));\n      } catch (error) {\n        this.rejectOneAndAll(codeUnit, error);\n        return;\n      }\n      codeUnit.dependencies.forEach((function(dependency) {\n        $__6.load_(dependency);\n      }));\n      if (this.areAll(PARSED)) {\n        try {\n          this.analyze();\n          this.transform();\n          this.evaluate();\n        } catch (error) {\n          this.rejectOneAndAll(codeUnit, error);\n        }\n      }\n    },\n    rejectOneAndAll: function(codeUnit, error) {\n      codeUnit.state.ERROR;\n      codeUnit.error = error;\n      codeUnit.reject(error);\n      this.abortAll(error);\n    },\n    handleCodeUnitLoadError: function(codeUnit) {\n      var message = codeUnit.error ? String(codeUnit.error) + '\\n' : (\"Failed to load '\" + codeUnit.address + \"'.\\n\");\n      message += codeUnit.nameTrace() + this.loader_.nameTrace(codeUnit);\n      this.rejectOneAndAll(codeUnit, new Error(message));\n    },\n    abortAll: function(errorMessage) {\n      this.cache.forEach((function(codeUnit) {\n        if (codeUnit.state !== ERROR)\n          codeUnit.reject(errorMessage);\n      }));\n    },\n    analyze: function() {\n      this.loaderCompiler.analyzeDependencies(mapToValues(this.cache), this);\n    },\n    transform: function() {\n      this.transformDependencies_(mapToValues(this.cache));\n    },\n    transformDependencies_: function(dependencies, dependentName) {\n      for (var i = 0; i < dependencies.length; i++) {\n        var codeUnit = dependencies[i];\n        if (codeUnit.state >= TRANSFORMED) {\n          continue;\n        }\n        if (codeUnit.state === TRANSFORMING) {\n          var cir = codeUnit.normalizedName;\n          var cle = dependentName;\n          this.rejectOneAndAll(codeUnit, new Error((\"Unsupported circular dependency between \" + cir + \" and \" + cle)));\n          return;\n        }\n        codeUnit.state = TRANSFORMING;\n        try {\n          this.transformCodeUnit_(codeUnit);\n        } catch (error) {\n          this.rejectOneAndAll(codeUnit, error);\n          return;\n        }\n      }\n    },\n    transformCodeUnit_: function(codeUnit) {\n      this.transformDependencies_(codeUnit.dependencies, codeUnit.normalizedName);\n      if (codeUnit.state === ERROR)\n        return;\n      this.loaderCompiler.transform(codeUnit);\n      codeUnit.state = TRANSFORMED;\n      this.loaderCompiler.write(codeUnit);\n      var info = codeUnit.metadata.compiler.sourceMapInfo;\n      if (info) {\n        this.sourceMapsByURL_[info.url] = info.map;\n      }\n      this.loader_.instantiate(codeUnit);\n    },\n    orderDependencies: function() {\n      var visited = new Map();\n      var ordered = [];\n      function orderCodeUnits(codeUnit) {\n        if (visited.has(codeUnit)) {\n          return;\n        }\n        visited.set(codeUnit, true);\n        codeUnit.dependencies.forEach(orderCodeUnits);\n        ordered.push(codeUnit);\n      }\n      this.cache.forEach(orderCodeUnits);\n      return ordered;\n    },\n    evaluate: function() {\n      var dependencies = this.orderDependencies();\n      for (var i = 0; i < dependencies.length; i++) {\n        var codeUnit = dependencies[i];\n        if (codeUnit.state >= COMPLETE) {\n          continue;\n        }\n        var result;\n        try {\n          result = codeUnit.evaluate();\n        } catch (ex) {\n          this.rejectOneAndAll(codeUnit, ex);\n          return;\n        }\n        codeUnit.result = result;\n        codeUnit.source = null;\n      }\n      for (var i = 0; i < dependencies.length; i++) {\n        var codeUnit = dependencies[i];\n        if (codeUnit.state >= COMPLETE) {\n          continue;\n        }\n        codeUnit.state = COMPLETE;\n        codeUnit.resolve(codeUnit.result);\n      }\n    }\n  }, {});\n  var internals = {\n    CodeUnit: CodeUnit,\n    EvalCodeUnit: EvalCodeUnit,\n    LoadCodeUnit: LoadCodeUnit,\n    LoaderCompiler: LoaderCompiler\n  };\n  return {\n    get InternalLoader() {\n      return InternalLoader;\n    },\n    get internals() {\n      return internals;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/runtime/Loader\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/Loader\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/Loader\", path);\n  }\n  var InternalLoader = System.get(\"traceur@0.0.74/src/runtime/InternalLoader\").InternalLoader;\n  function throwAbstractMethod() {\n    throw new Error('Unimplemented Loader function, see extended class');\n  }\n  var Loader = function Loader(loaderCompiler) {\n    this.internalLoader_ = new InternalLoader(this, loaderCompiler);\n    this.loaderCompiler_ = loaderCompiler;\n  };\n  ($traceurRuntime.createClass)(Loader, {\n    import: function(name) {\n      var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},\n          referrerName = $__3.referrerName,\n          address = $__3.address,\n          metadata = $__3.metadata;\n      var $__1 = this;\n      return this.internalLoader_.load(name, referrerName, address, metadata).then((function(codeUnit) {\n        return $__1.get(codeUnit.normalizedName);\n      }));\n    },\n    module: function(source) {\n      var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},\n          referrerName = $__3.referrerName,\n          address = $__3.address,\n          metadata = $__3.metadata;\n      return this.internalLoader_.module(source, referrerName, address, metadata);\n    },\n    define: function(normalizedName, source) {\n      var $__3 = arguments[2] !== (void 0) ? arguments[2] : {},\n          address = $__3.address,\n          metadata = $__3.metadata,\n          metadata = $__3.metadata;\n      return this.internalLoader_.define(normalizedName, source, address, metadata);\n    },\n    get: function(normalizedName) {\n      throwAbstractMethod();\n    },\n    set: function(normalizedName, module) {\n      throwAbstractMethod();\n    },\n    normalize: function(name, referrerName, referrerAddress) {\n      throwAbstractMethod();\n    },\n    locate: function(load) {\n      throwAbstractMethod();\n    },\n    fetch: function(load) {\n      throwAbstractMethod();\n    },\n    translate: function(load) {\n      throwAbstractMethod();\n    },\n    instantiate: function(load) {\n      throwAbstractMethod();\n    }\n  }, {});\n  ;\n  return {\n    get Loader() {\n      return Loader;\n    },\n    get LoaderCompiler() {\n      return LoaderCompiler;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/runtime/TraceurLoader\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/TraceurLoader\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/TraceurLoader\", path);\n  }\n  var $__0 = System.get(\"traceur@0.0.74/src/util/url\"),\n      isAbsolute = $__0.isAbsolute,\n      resolveUrl = $__0.resolveUrl;\n  var Loader = System.get(\"traceur@0.0.74/src/runtime/Loader\").Loader;\n  var LoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/LoaderCompiler\").LoaderCompiler;\n  var systemjs = System.get(\"traceur@0.0.74/src/runtime/system-map\").systemjs;\n  var version = __moduleName.slice(0, __moduleName.indexOf('/'));\n  var uniqueNameCount = 0;\n  var TraceurLoader = function TraceurLoader(fileLoader, baseURL) {\n    var loaderCompiler = arguments[2] !== (void 0) ? arguments[2] : new LoaderCompiler();\n    $traceurRuntime.superConstructor($TraceurLoader).call(this, loaderCompiler);\n    this.fileLoader_ = fileLoader;\n    this.baseURL_ = baseURL && String(baseURL);\n    this.moduleStore_ = $traceurRuntime.ModuleStore;\n  };\n  var $TraceurLoader = TraceurLoader;\n  ($traceurRuntime.createClass)(TraceurLoader, {\n    get baseURL() {\n      return this.baseURL_;\n    },\n    set baseURL(value) {\n      this.baseURL_ = String(value);\n    },\n    get: function(normalizedName) {\n      return this.moduleStore_.get(normalizedName);\n    },\n    set: function(normalizedName, module) {\n      this.moduleStore_.set(normalizedName, module);\n    },\n    normalize: function(name, referrerName, referrerAddress) {\n      var normalizedName = this.moduleStore_.normalize(name, referrerName, referrerAddress);\n      if (typeof systemjs !== 'undefined' && System.map)\n        return systemjs.applyMap(System.map, normalizedName, referrerName);\n      return normalizedName;\n    },\n    locate: function(load) {\n      var normalizedModuleName = load.normalizedName;\n      load.metadata.traceurOptions = load.metadata.traceurOptions || {};\n      var options = load.metadata.traceurOptions;\n      var asJS;\n      if (/\\.js$/.test(normalizedModuleName) || options && options.script) {\n        asJS = normalizedModuleName;\n      } else {\n        asJS = normalizedModuleName + '.js';\n      }\n      var baseURL = load.metadata && load.metadata.baseURL;\n      baseURL = baseURL || this.baseURL;\n      var referrer = options && options.referrer;\n      if (referrer) {\n        var minChars = Math.min(referrer.length, baseURL.length);\n        var commonChars = 0;\n        for (var i = 0; i < minChars; i++) {\n          var aChar = referrer[referrer.length - 1 - i];\n          if (aChar === baseURL[baseURL.length - 1 - i])\n            commonChars++;\n          else\n            break;\n        }\n        if (commonChars) {\n          var packageName = referrer.slice(0, -commonChars);\n          var rootDirectory = baseURL.slice(0, -commonChars);\n          if (asJS.indexOf(packageName) === 0) {\n            asJS = asJS.replace(packageName, rootDirectory);\n          }\n        }\n      }\n      if (!isAbsolute(asJS)) {\n        if (baseURL) {\n          load.metadata.baseURL = baseURL;\n          asJS = resolveUrl(baseURL, asJS);\n        }\n      }\n      return asJS;\n    },\n    sourceName: function(load) {\n      var options = load.metadata.traceurOptions;\n      var sourceName = load.address;\n      if (options.sourceMaps) {\n        var sourceRoot = this.baseURL;\n        if (sourceName) {\n          if (sourceRoot && sourceName.indexOf(sourceRoot) === 0) {\n            sourceName = sourceName.substring(sourceRoot.length);\n          }\n        } else {\n          sourceName = this.baseURL + String(uniqueNameCount++);\n        }\n      }\n      load.metadata.sourceRoot = this.baseURL;\n      return sourceName;\n    },\n    nameTrace: function(load) {\n      var trace = '';\n      if (load.metadata.locateMap) {\n        trace += this.locateMapTrace(load);\n      }\n      var base = load.metadata.baseURL || this.baseURL;\n      if (base) {\n        trace += this.baseURLTrace(base);\n      } else {\n        trace += 'No baseURL\\n';\n      }\n      return trace;\n    },\n    locateMapTrace: function(load) {\n      var map = load.metadata.locateMap;\n      return (\"locate found \\'\" + map.pattern + \"\\' -> \\'\" + map.replacement + \"\\'\\n\");\n    },\n    baseURLTrace: function(base) {\n      return 'locate resolved against base \\'' + base + '\\'\\n';\n    },\n    fetch: function(load) {\n      var $__4 = this;\n      return new Promise((function(resolve, reject) {\n        if (!load)\n          reject(new TypeError('fetch requires argument object'));\n        else if (!load.address || typeof load.address !== 'string')\n          reject(new TypeError('fetch({address}) missing required string.'));\n        else\n          $__4.fileLoader_.load(load.address, resolve, reject);\n      }));\n    },\n    translate: function(load) {\n      return load.source;\n    },\n    instantiate: function($__6) {\n      var $__7 = $__6,\n          name = $__7.name,\n          metadata = $__7.metadata,\n          address = $__7.address,\n          source = $__7.source,\n          sourceMap = $__7.sourceMap;\n      return new Promise((function(resolve, reject) {\n        resolve(undefined);\n      }));\n    },\n    bundledModule: function(name) {\n      return this.moduleStore_.bundleStore[name];\n    },\n    importAll: function(names) {\n      var $__6 = arguments[1] !== (void 0) ? arguments[1] : {},\n          referrerName = $__6.referrerName,\n          address = $__6.address,\n          metadata = $__6.metadata;\n      var $__4 = this;\n      return Promise.all(names.map((function(name) {\n        return $__4.import(name, {\n          referrerName: referrerName,\n          address: address,\n          metadata: metadata\n        });\n      })));\n    },\n    loadAsScript: function(name) {\n      var $__7;\n      var $__6 = arguments[1] !== (void 0) ? arguments[1] : {},\n          referrerName = $__6.referrerName,\n          address = $__6.address,\n          metadata = ($__7 = $__6.metadata) === void 0 ? {} : $__7;\n      metadata.traceurOptions = metadata.traceurOptions || {};\n      metadata.traceurOptions.script = true;\n      return this.internalLoader_.load(name, referrerName, address, metadata).then((function(load) {\n        return load.result;\n      }));\n    },\n    loadAsScriptAll: function(names) {\n      var $__6 = arguments[1] !== (void 0) ? arguments[1] : {},\n          referrerName = $__6.referrerName,\n          address = $__6.address,\n          metadata = $__6.metadata;\n      var $__4 = this;\n      return Promise.all(names.map((function(name) {\n        return $__4.loadAsScript(name, {\n          referrerName: referrerName,\n          address: address,\n          metadata: metadata\n        });\n      })));\n    },\n    script: function(source) {\n      var $__6 = arguments[1] !== (void 0) ? arguments[1] : {},\n          name = $__6.name,\n          referrerName = $__6.referrerName,\n          address = $__6.address,\n          metadata = $__6.metadata;\n      return this.internalLoader_.script(source, name, referrerName, address, metadata);\n    },\n    semVerRegExp_: function() {\n      return /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+)?$/;\n    },\n    semverMap: function(normalizedName) {\n      var slash = normalizedName.indexOf('/');\n      var version = normalizedName.slice(0, slash);\n      var at = version.indexOf('@');\n      if (at !== -1) {\n        var semver = version.slice(at + 1);\n        var m = this.semVerRegExp_().exec(semver);\n        if (m) {\n          var major = m[1];\n          var minor = m[2];\n          var packageName = version.slice(0, at);\n          var map = Object.create(null);\n          map[packageName] = version;\n          map[packageName + '@' + major] = version;\n          map[packageName + '@' + major + '.' + minor] = version;\n        }\n      }\n      return map;\n    },\n    get version() {\n      return version;\n    },\n    getSourceMap: function(filename) {\n      return this.internalLoader_.getSourceMap(filename);\n    },\n    register: function(normalizedName, deps, factoryFunction) {\n      $traceurRuntime.ModuleStore.register(normalizedName, deps, factoryFunction);\n    }\n  }, {}, Loader);\n  return {get TraceurLoader() {\n      return TraceurLoader;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/webLoader\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/webLoader\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/webLoader\", path);\n  }\n  var webLoader = {load: function(url, callback, errback) {\n      var xhr = new XMLHttpRequest();\n      xhr.onload = (function() {\n        if (xhr.status == 200 || xhr.status == 0) {\n          callback(xhr.responseText);\n        } else {\n          var err;\n          if (xhr.status === 404)\n            err = 'File not found \\'' + url + '\\'';\n          else\n            err = xhr.status + xhr.statusText;\n          errback(err);\n        }\n        xhr = null;\n      });\n      xhr.onerror = (function(err) {\n        errback(err);\n      });\n      xhr.open('GET', url, true);\n      xhr.send();\n      return (function() {\n        xhr && xhr.abort();\n      });\n    }};\n  return {get webLoader() {\n      return webLoader;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/WebPageTranscoder\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/WebPageTranscoder\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/WebPageTranscoder\", path);\n  }\n  var Loader = System.get(\"traceur@0.0.74/src/runtime/Loader\").Loader;\n  var TraceurLoader = System.get(\"traceur@0.0.74/src/runtime/TraceurLoader\").TraceurLoader;\n  var ErrorReporter = System.get(\"traceur@0.0.74/src/util/ErrorReporter\").ErrorReporter;\n  var webLoader = System.get(\"traceur@0.0.74/src/runtime/webLoader\").webLoader;\n  var WebPageTranscoder = function WebPageTranscoder(url) {\n    this.url = url;\n    this.numPending_ = 0;\n    this.numberInlined_ = 0;\n  };\n  ($traceurRuntime.createClass)(WebPageTranscoder, {\n    asyncLoad_: function(url, fncOfContent, onScriptsReady) {\n      var $__4 = this;\n      this.numPending_++;\n      webLoader.load(url, (function(content) {\n        if (content)\n          fncOfContent(content);\n        else\n          console.warn('Failed to load', url);\n        if (--$__4.numPending_ <= 0)\n          onScriptsReady();\n      }), (function(error) {\n        console.error('WebPageTranscoder FAILED to load ' + url, error.stack || error);\n      }));\n    },\n    addFileFromScriptElement: function(scriptElement, name, content) {\n      var options = traceur.options;\n      var nameInfo = {\n        address: name,\n        referrerName: window.location.href,\n        name: name,\n        metadata: {traceurOptions: options}\n      };\n      var loadingResult;\n      if (scriptElement.type === 'module')\n        loadingResult = this.loader.module(content, nameInfo);\n      else\n        loadingResult = this.loader.script(content, nameInfo);\n      loadingResult.catch(function(error) {\n        console.error(error.stack || error);\n      });\n    },\n    nextInlineScriptName_: function() {\n      this.numberInlined_ += 1;\n      if (!this.inlineScriptNameBase_) {\n        var segments = this.url.split('.');\n        segments.pop();\n        this.inlineScriptNameBase_ = segments.join('.');\n      }\n      return this.inlineScriptNameBase_ + '_' + this.numberInlined_ + '.js';\n    },\n    addFilesFromScriptElements: function(scriptElements, onScriptsReady) {\n      for (var i = 0,\n          length = scriptElements.length; i < length; i++) {\n        var scriptElement = scriptElements[i];\n        if (!scriptElement.src) {\n          var name = this.nextInlineScriptName_();\n          var content = scriptElement.textContent;\n          this.addFileFromScriptElement(scriptElement, name, content);\n        } else {\n          var name = scriptElement.src;\n          this.asyncLoad_(name, this.addFileFromScriptElement.bind(this, scriptElement, name), onScriptsReady);\n        }\n      }\n      if (this.numPending_ <= 0)\n        onScriptsReady();\n    },\n    get reporter() {\n      if (!this.reporter_) {\n        this.reporter_ = new ErrorReporter();\n      }\n      return this.reporter_;\n    },\n    get loader() {\n      if (!this.loader_) {\n        this.loader_ = new TraceurLoader(webLoader, this.url);\n      }\n      return this.loader_;\n    },\n    putFile: function(file) {\n      var scriptElement = document.createElement('script');\n      scriptElement.setAttribute('data-traceur-src-url', file.name);\n      scriptElement.textContent = file.generatedSource;\n      var parent = file.scriptElement.parentNode;\n      parent.insertBefore(scriptElement, file.scriptElement || null);\n    },\n    selectAndProcessScripts: function(done) {\n      var selector = 'script[type=\"module\"],script[type=\"text/traceur\"]';\n      var scripts = document.querySelectorAll(selector);\n      if (!scripts.length) {\n        done();\n        return;\n      }\n      this.addFilesFromScriptElements(scripts, (function() {\n        done();\n      }));\n    },\n    run: function() {\n      var done = arguments[0] !== (void 0) ? arguments[0] : (function() {});\n      var $__4 = this;\n      var ready = document.readyState;\n      if (ready === 'complete' || ready === 'loaded') {\n        this.selectAndProcessScripts(done);\n      } else {\n        document.addEventListener('DOMContentLoaded', (function() {\n          return $__4.selectAndProcessScripts(done);\n        }), false);\n      }\n    }\n  }, {});\n  return {get WebPageTranscoder() {\n      return WebPageTranscoder;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/CloneTreeTransformer\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/CloneTreeTransformer\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/CloneTreeTransformer\", path);\n  }\n  var ParseTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/ParseTreeTransformer\").ParseTreeTransformer;\n  var $__1 = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\"),\n      BindingIdentifier = $__1.BindingIdentifier,\n      BreakStatement = $__1.BreakStatement,\n      ContinueStatement = $__1.ContinueStatement,\n      DebuggerStatement = $__1.DebuggerStatement,\n      EmptyStatement = $__1.EmptyStatement,\n      ExportSpecifier = $__1.ExportSpecifier,\n      ExportStar = $__1.ExportStar,\n      IdentifierExpression = $__1.IdentifierExpression,\n      LiteralExpression = $__1.LiteralExpression,\n      ModuleSpecifier = $__1.ModuleSpecifier,\n      PredefinedType = $__1.PredefinedType,\n      PropertyNameShorthand = $__1.PropertyNameShorthand,\n      TemplateLiteralPortion = $__1.TemplateLiteralPortion,\n      SuperExpression = $__1.SuperExpression,\n      ThisExpression = $__1.ThisExpression;\n  var CloneTreeTransformer = function CloneTreeTransformer() {\n    $traceurRuntime.superConstructor($CloneTreeTransformer).apply(this, arguments);\n  };\n  var $CloneTreeTransformer = CloneTreeTransformer;\n  ($traceurRuntime.createClass)(CloneTreeTransformer, {\n    transformBindingIdentifier: function(tree) {\n      return new BindingIdentifier(tree.location, tree.identifierToken);\n    },\n    transformBreakStatement: function(tree) {\n      return new BreakStatement(tree.location, tree.name);\n    },\n    transformContinueStatement: function(tree) {\n      return new ContinueStatement(tree.location, tree.name);\n    },\n    transformDebuggerStatement: function(tree) {\n      return new DebuggerStatement(tree.location);\n    },\n    transformEmptyStatement: function(tree) {\n      return new EmptyStatement(tree.location);\n    },\n    transformExportSpecifier: function(tree) {\n      return new ExportSpecifier(tree.location, tree.lhs, tree.rhs);\n    },\n    transformExportStar: function(tree) {\n      return new ExportStar(tree.location);\n    },\n    transformIdentifierExpression: function(tree) {\n      return new IdentifierExpression(tree.location, tree.identifierToken);\n    },\n    transformList: function(list) {\n      if (!list) {\n        return null;\n      } else if (list.length == 0) {\n        return [];\n      } else {\n        return $traceurRuntime.superGet(this, $CloneTreeTransformer.prototype, \"transformList\").call(this, list);\n      }\n    },\n    transformLiteralExpression: function(tree) {\n      return new LiteralExpression(tree.location, tree.literalToken);\n    },\n    transformModuleSpecifier: function(tree) {\n      return new ModuleSpecifier(tree.location, tree.token);\n    },\n    transformPredefinedType: function(tree) {\n      return new PredefinedType(tree.location, tree.typeToken);\n    },\n    transformPropertyNameShorthand: function(tree) {\n      return new PropertyNameShorthand(tree.location, tree.name);\n    },\n    transformTemplateLiteralPortion: function(tree) {\n      return new TemplateLiteralPortion(tree.location, tree.value);\n    },\n    transformSuperExpression: function(tree) {\n      return new SuperExpression(tree.location);\n    },\n    transformThisExpression: function(tree) {\n      return new ThisExpression(tree.location);\n    }\n  }, {}, ParseTreeTransformer);\n  CloneTreeTransformer.cloneTree = function(tree) {\n    return new CloneTreeTransformer().transformAny(tree);\n  };\n  return {get CloneTreeTransformer() {\n      return CloneTreeTransformer;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/codegeneration/module/createModuleEvaluationStatement\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/codegeneration/module/createModuleEvaluationStatement\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/codegeneration/module/createModuleEvaluationStatement\", path);\n  }\n  var $__0 = Object.freeze(Object.defineProperties([\"System.get(\", \" +'')\"], {raw: {value: Object.freeze([\"System.get(\", \" +'')\"])}}));\n  var parseStatement = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\").parseStatement;\n  function createModuleEvaluationStatement(normalizedName) {\n    return parseStatement($__0, normalizedName);\n  }\n  return {get createModuleEvaluationStatement() {\n      return createModuleEvaluationStatement;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/InlineLoaderCompiler\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/InlineLoaderCompiler\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/InlineLoaderCompiler\", path);\n  }\n  var LoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/LoaderCompiler\").LoaderCompiler;\n  var Script = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").Script;\n  var InlineLoaderCompiler = function InlineLoaderCompiler(elements) {\n    $traceurRuntime.superConstructor($InlineLoaderCompiler).call(this);\n    this.elements = elements;\n  };\n  var $InlineLoaderCompiler = InlineLoaderCompiler;\n  ($traceurRuntime.createClass)(InlineLoaderCompiler, {\n    evaluateCodeUnit: function(codeUnit) {\n      var $__3;\n      var tree = codeUnit.metadata.transformedTree;\n      ($__3 = this.elements).push.apply($__3, $traceurRuntime.spread(tree.scriptItemList));\n    },\n    toTree: function() {\n      return new Script(null, this.elements);\n    }\n  }, {}, LoaderCompiler);\n  return {get InlineLoaderCompiler() {\n      return InlineLoaderCompiler;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/runtime/System\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/runtime/System\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/runtime/System\", path);\n  }\n  var ErrorReporter = System.get(\"traceur@0.0.74/src/util/ErrorReporter\").ErrorReporter;\n  var TraceurLoader = System.get(\"traceur@0.0.74/src/runtime/TraceurLoader\").TraceurLoader;\n  var LoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/LoaderCompiler\").LoaderCompiler;\n  var webLoader = System.get(\"traceur@0.0.74/src/runtime/webLoader\").webLoader;\n  var url;\n  var fileLoader;\n  if (typeof window !== 'undefined' && window.location) {\n    url = window.location.href;\n    fileLoader = webLoader;\n  }\n  var traceurLoader = new TraceurLoader(fileLoader, url);\n  Reflect.global.System = traceurLoader;\n  ;\n  traceurLoader.map = traceurLoader.semverMap(__moduleName);\n  return {get System() {\n      return traceurLoader;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/util/MutedErrorReporter\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/util/MutedErrorReporter\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/util/MutedErrorReporter\", path);\n  }\n  var ErrorReporter = System.get(\"traceur@0.0.74/src/util/ErrorReporter\").ErrorReporter;\n  var MutedErrorReporter = function MutedErrorReporter() {\n    $traceurRuntime.superConstructor($MutedErrorReporter).apply(this, arguments);\n  };\n  var $MutedErrorReporter = MutedErrorReporter;\n  ($traceurRuntime.createClass)(MutedErrorReporter, {reportMessageInternal: function(location, format, args) {}}, {}, ErrorReporter);\n  return {get MutedErrorReporter() {\n      return MutedErrorReporter;\n    }};\n});\nSystem.register(\"traceur@0.0.74/src/traceur\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/traceur\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/traceur\", path);\n  }\n  var $__traceur_64_0_46_0_46_74_47_src_47_runtime_47_System__ = System.get(\"traceur@0.0.74/src/runtime/System\");\n  System.get(\"traceur@0.0.74/src/util/MutedErrorReporter\");\n  var $___64_traceur_47_src_47_runtime_47_ModuleStore__ = System.get(\"@traceur/src/runtime/ModuleStore\");\n  var $__traceur_64_0_46_0_46_74_47_src_47_WebPageTranscoder__ = System.get(\"traceur@0.0.74/src/WebPageTranscoder\");\n  var $__traceur_64_0_46_0_46_74_47_src_47_Options__ = System.get(\"traceur@0.0.74/src/Options\");\n  var $__0 = System.get(\"traceur@0.0.74/src/Options\"),\n      addOptions = $__0.addOptions,\n      CommandOptions = $__0.CommandOptions,\n      Options = $__0.Options;\n  var ModuleStore = System.get(\"@traceur/src/runtime/ModuleStore\").ModuleStore;\n  function get(name) {\n    return ModuleStore.get(ModuleStore.normalize('./' + name, __moduleName));\n  }\n  var $__traceur_64_0_46_0_46_74_47_src_47_Compiler__ = System.get(\"traceur@0.0.74/src/Compiler\");\n  var ErrorReporter = System.get(\"traceur@0.0.74/src/util/ErrorReporter\").ErrorReporter;\n  var CollectingErrorReporter = System.get(\"traceur@0.0.74/src/util/CollectingErrorReporter\").CollectingErrorReporter;\n  var util = {\n    addOptions: addOptions,\n    CommandOptions: CommandOptions,\n    CollectingErrorReporter: CollectingErrorReporter,\n    ErrorReporter: ErrorReporter,\n    Options: Options\n  };\n  var Parser = System.get(\"traceur@0.0.74/src/syntax/Parser\").Parser;\n  var Scanner = System.get(\"traceur@0.0.74/src/syntax/Scanner\").Scanner;\n  var Script = System.get(\"traceur@0.0.74/src/syntax/trees/ParseTrees\").Script;\n  var SourceFile = System.get(\"traceur@0.0.74/src/syntax/SourceFile\").SourceFile;\n  var syntax = {\n    Parser: Parser,\n    Scanner: Scanner,\n    SourceFile: SourceFile,\n    trees: {Script: Script}\n  };\n  var ParseTreeMapWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeMapWriter\").ParseTreeMapWriter;\n  var ParseTreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/ParseTreeWriter\").ParseTreeWriter;\n  var regexpuRewritePattern = System.get(\"traceur@0.0.74/src/outputgeneration/regexpuRewritePattern\").regexpuRewritePattern;\n  var SourceMapConsumer = System.get(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\").SourceMapConsumer;\n  var SourceMapGenerator = System.get(\"traceur@0.0.74/src/outputgeneration/SourceMapIntegration\").SourceMapGenerator;\n  var TreeWriter = System.get(\"traceur@0.0.74/src/outputgeneration/TreeWriter\").TreeWriter;\n  var outputgeneration = {\n    ParseTreeMapWriter: ParseTreeMapWriter,\n    ParseTreeWriter: ParseTreeWriter,\n    regexpuRewritePattern: regexpuRewritePattern,\n    SourceMapConsumer: SourceMapConsumer,\n    SourceMapGenerator: SourceMapGenerator,\n    TreeWriter: TreeWriter\n  };\n  var AttachModuleNameTransformer = System.get(\"traceur@0.0.74/src/codegeneration/module/AttachModuleNameTransformer\").AttachModuleNameTransformer;\n  var CloneTreeTransformer = System.get(\"traceur@0.0.74/src/codegeneration/CloneTreeTransformer\").CloneTreeTransformer;\n  var FromOptionsTransformer = System.get(\"traceur@0.0.74/src/codegeneration/FromOptionsTransformer\").FromOptionsTransformer;\n  var PureES6Transformer = System.get(\"traceur@0.0.74/src/codegeneration/PureES6Transformer\").PureES6Transformer;\n  var createModuleEvaluationStatement = System.get(\"traceur@0.0.74/src/codegeneration/module/createModuleEvaluationStatement\").createModuleEvaluationStatement;\n  var $__19 = System.get(\"traceur@0.0.74/src/codegeneration/PlaceholderParser\"),\n      parseExpression = $__19.parseExpression,\n      parseModule = $__19.parseModule,\n      parseScript = $__19.parseScript,\n      parseStatement = $__19.parseStatement;\n  var codegeneration = {\n    CloneTreeTransformer: CloneTreeTransformer,\n    FromOptionsTransformer: FromOptionsTransformer,\n    PureES6Transformer: PureES6Transformer,\n    parseExpression: parseExpression,\n    parseModule: parseModule,\n    parseScript: parseScript,\n    parseStatement: parseStatement,\n    module: {\n      AttachModuleNameTransformer: AttachModuleNameTransformer,\n      createModuleEvaluationStatement: createModuleEvaluationStatement\n    }\n  };\n  var Loader = System.get(\"traceur@0.0.74/src/runtime/Loader\").Loader;\n  var LoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/LoaderCompiler\").LoaderCompiler;\n  var InlineLoaderCompiler = System.get(\"traceur@0.0.74/src/runtime/InlineLoaderCompiler\").InlineLoaderCompiler;\n  var TraceurLoader = System.get(\"traceur@0.0.74/src/runtime/TraceurLoader\").TraceurLoader;\n  var runtime = {\n    InlineLoaderCompiler: InlineLoaderCompiler,\n    Loader: Loader,\n    LoaderCompiler: LoaderCompiler,\n    TraceurLoader: TraceurLoader\n  };\n  return {\n    get System() {\n      return $__traceur_64_0_46_0_46_74_47_src_47_runtime_47_System__.System;\n    },\n    get ModuleStore() {\n      return $___64_traceur_47_src_47_runtime_47_ModuleStore__.ModuleStore;\n    },\n    get WebPageTranscoder() {\n      return $__traceur_64_0_46_0_46_74_47_src_47_WebPageTranscoder__.WebPageTranscoder;\n    },\n    get options() {\n      return $__traceur_64_0_46_0_46_74_47_src_47_Options__.options;\n    },\n    get get() {\n      return get;\n    },\n    get Compiler() {\n      return $__traceur_64_0_46_0_46_74_47_src_47_Compiler__.Compiler;\n    },\n    get util() {\n      return util;\n    },\n    get syntax() {\n      return syntax;\n    },\n    get outputgeneration() {\n      return outputgeneration;\n    },\n    get codegeneration() {\n      return codegeneration;\n    },\n    get runtime() {\n      return runtime;\n    }\n  };\n});\nSystem.register(\"traceur@0.0.74/src/traceur-import\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur@0.0.74/src/traceur-import\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur@0.0.74/src/traceur-import\", path);\n  }\n  var traceur = System.get(\"traceur@0.0.74/src/traceur\");\n  Reflect.global.traceur = traceur;\n  $traceurRuntime.ModuleStore.set('traceur@', traceur);\n  return {};\n});\nSystem.get(\"traceur@0.0.74/src/traceur-import\" + '');\n"
  },
  {
    "path": "client/components/traceur-runtime/.bower.json",
    "content": "{\n  \"name\": \"traceur-runtime\",\n  \"version\": \"0.0.74\",\n  \"main\": \"./traceur-runtime.js\",\n  \"ignore\": [\n    \"node_modules\",\n    \"Gruntfile.js\",\n    \"*.json\",\n    \".*\"\n  ],\n  \"homepage\": \"https://github.com/jmcriffey/bower-traceur-runtime\",\n  \"_release\": \"0.0.74\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.0.74\",\n    \"commit\": \"92f0c9d338a1c8e999f5b43b1d37c5da9635e359\"\n  },\n  \"_source\": \"git://github.com/jmcriffey/bower-traceur-runtime.git\",\n  \"_target\": \"0.0.74\",\n  \"_originalSource\": \"traceur-runtime\"\n}"
  },
  {
    "path": "client/components/traceur-runtime/README.md",
    "content": "# bower-traceur-runtime\n\nThis repo is for distribution on `bower`. The source for this module is in the\n[main traceur repo](https://github.com/google/traceur-compiler/).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nInstall with `bower`:\n\n```shell\nbower install traceur-runtime\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/traceur-runtime/traceur-runtime.js\"></script>\n```\n\n## License\n\nCopyright 2012 Traceur Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "client/components/traceur-runtime/bower.json",
    "content": "{\n    \"name\": \"traceur-runtime\",\n    \"version\": \"0.0.74\",\n    \"main\": \"./traceur-runtime.js\",\n    \"ignore\": [\n        \"node_modules\",\n        \"Gruntfile.js\",\n        \"*.json\",\n        \".*\"\n    ]\n}\n"
  },
  {
    "path": "client/components/traceur-runtime/traceur-runtime.js",
    "content": "(function(global) {\n  'use strict';\n  if (global.$traceurRuntime) {\n    return;\n  }\n  var $Object = Object;\n  var $TypeError = TypeError;\n  var $create = $Object.create;\n  var $defineProperties = $Object.defineProperties;\n  var $defineProperty = $Object.defineProperty;\n  var $freeze = $Object.freeze;\n  var $getOwnPropertyDescriptor = $Object.getOwnPropertyDescriptor;\n  var $getOwnPropertyNames = $Object.getOwnPropertyNames;\n  var $keys = $Object.keys;\n  var $hasOwnProperty = $Object.prototype.hasOwnProperty;\n  var $toString = $Object.prototype.toString;\n  var $preventExtensions = Object.preventExtensions;\n  var $seal = Object.seal;\n  var $isExtensible = Object.isExtensible;\n  function nonEnum(value) {\n    return {\n      configurable: true,\n      enumerable: false,\n      value: value,\n      writable: true\n    };\n  }\n  var method = nonEnum;\n  var counter = 0;\n  function newUniqueString() {\n    return '__$' + Math.floor(Math.random() * 1e9) + '$' + ++counter + '$__';\n  }\n  var symbolInternalProperty = newUniqueString();\n  var symbolDescriptionProperty = newUniqueString();\n  var symbolDataProperty = newUniqueString();\n  var symbolValues = $create(null);\n  var privateNames = $create(null);\n  function isPrivateName(s) {\n    return privateNames[s];\n  }\n  function createPrivateName() {\n    var s = newUniqueString();\n    privateNames[s] = true;\n    return s;\n  }\n  function isShimSymbol(symbol) {\n    return typeof symbol === 'object' && symbol instanceof SymbolValue;\n  }\n  function typeOf(v) {\n    if (isShimSymbol(v))\n      return 'symbol';\n    return typeof v;\n  }\n  function Symbol(description) {\n    var value = new SymbolValue(description);\n    if (!(this instanceof Symbol))\n      return value;\n    throw new TypeError('Symbol cannot be new\\'ed');\n  }\n  $defineProperty(Symbol.prototype, 'constructor', nonEnum(Symbol));\n  $defineProperty(Symbol.prototype, 'toString', method(function() {\n    var symbolValue = this[symbolDataProperty];\n    if (!getOption('symbols'))\n      return symbolValue[symbolInternalProperty];\n    if (!symbolValue)\n      throw TypeError('Conversion from symbol to string');\n    var desc = symbolValue[symbolDescriptionProperty];\n    if (desc === undefined)\n      desc = '';\n    return 'Symbol(' + desc + ')';\n  }));\n  $defineProperty(Symbol.prototype, 'valueOf', method(function() {\n    var symbolValue = this[symbolDataProperty];\n    if (!symbolValue)\n      throw TypeError('Conversion from symbol to string');\n    if (!getOption('symbols'))\n      return symbolValue[symbolInternalProperty];\n    return symbolValue;\n  }));\n  function SymbolValue(description) {\n    var key = newUniqueString();\n    $defineProperty(this, symbolDataProperty, {value: this});\n    $defineProperty(this, symbolInternalProperty, {value: key});\n    $defineProperty(this, symbolDescriptionProperty, {value: description});\n    freeze(this);\n    symbolValues[key] = this;\n  }\n  $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(Symbol));\n  $defineProperty(SymbolValue.prototype, 'toString', {\n    value: Symbol.prototype.toString,\n    enumerable: false\n  });\n  $defineProperty(SymbolValue.prototype, 'valueOf', {\n    value: Symbol.prototype.valueOf,\n    enumerable: false\n  });\n  var hashProperty = createPrivateName();\n  var hashPropertyDescriptor = {value: undefined};\n  var hashObjectProperties = {\n    hash: {value: undefined},\n    self: {value: undefined}\n  };\n  var hashCounter = 0;\n  function getOwnHashObject(object) {\n    var hashObject = object[hashProperty];\n    if (hashObject && hashObject.self === object)\n      return hashObject;\n    if ($isExtensible(object)) {\n      hashObjectProperties.hash.value = hashCounter++;\n      hashObjectProperties.self.value = object;\n      hashPropertyDescriptor.value = $create(null, hashObjectProperties);\n      $defineProperty(object, hashProperty, hashPropertyDescriptor);\n      return hashPropertyDescriptor.value;\n    }\n    return undefined;\n  }\n  function freeze(object) {\n    getOwnHashObject(object);\n    return $freeze.apply(this, arguments);\n  }\n  function preventExtensions(object) {\n    getOwnHashObject(object);\n    return $preventExtensions.apply(this, arguments);\n  }\n  function seal(object) {\n    getOwnHashObject(object);\n    return $seal.apply(this, arguments);\n  }\n  freeze(SymbolValue.prototype);\n  function isSymbolString(s) {\n    return symbolValues[s] || privateNames[s];\n  }\n  function toProperty(name) {\n    if (isShimSymbol(name))\n      return name[symbolInternalProperty];\n    return name;\n  }\n  function removeSymbolKeys(array) {\n    var rv = [];\n    for (var i = 0; i < array.length; i++) {\n      if (!isSymbolString(array[i])) {\n        rv.push(array[i]);\n      }\n    }\n    return rv;\n  }\n  function getOwnPropertyNames(object) {\n    return removeSymbolKeys($getOwnPropertyNames(object));\n  }\n  function keys(object) {\n    return removeSymbolKeys($keys(object));\n  }\n  function getOwnPropertySymbols(object) {\n    var rv = [];\n    var names = $getOwnPropertyNames(object);\n    for (var i = 0; i < names.length; i++) {\n      var symbol = symbolValues[names[i]];\n      if (symbol) {\n        rv.push(symbol);\n      }\n    }\n    return rv;\n  }\n  function getOwnPropertyDescriptor(object, name) {\n    return $getOwnPropertyDescriptor(object, toProperty(name));\n  }\n  function hasOwnProperty(name) {\n    return $hasOwnProperty.call(this, toProperty(name));\n  }\n  function getOption(name) {\n    return global.traceur && global.traceur.options[name];\n  }\n  function defineProperty(object, name, descriptor) {\n    if (isShimSymbol(name)) {\n      name = name[symbolInternalProperty];\n    }\n    $defineProperty(object, name, descriptor);\n    return object;\n  }\n  function polyfillObject(Object) {\n    $defineProperty(Object, 'defineProperty', {value: defineProperty});\n    $defineProperty(Object, 'getOwnPropertyNames', {value: getOwnPropertyNames});\n    $defineProperty(Object, 'getOwnPropertyDescriptor', {value: getOwnPropertyDescriptor});\n    $defineProperty(Object.prototype, 'hasOwnProperty', {value: hasOwnProperty});\n    $defineProperty(Object, 'freeze', {value: freeze});\n    $defineProperty(Object, 'preventExtensions', {value: preventExtensions});\n    $defineProperty(Object, 'seal', {value: seal});\n    $defineProperty(Object, 'keys', {value: keys});\n  }\n  function exportStar(object) {\n    for (var i = 1; i < arguments.length; i++) {\n      var names = $getOwnPropertyNames(arguments[i]);\n      for (var j = 0; j < names.length; j++) {\n        var name = names[j];\n        if (isSymbolString(name))\n          continue;\n        (function(mod, name) {\n          $defineProperty(object, name, {\n            get: function() {\n              return mod[name];\n            },\n            enumerable: true\n          });\n        })(arguments[i], names[j]);\n      }\n    }\n    return object;\n  }\n  function isObject(x) {\n    return x != null && (typeof x === 'object' || typeof x === 'function');\n  }\n  function toObject(x) {\n    if (x == null)\n      throw $TypeError();\n    return $Object(x);\n  }\n  function checkObjectCoercible(argument) {\n    if (argument == null) {\n      throw new TypeError('Value cannot be converted to an Object');\n    }\n    return argument;\n  }\n  var path = typeof require !== 'undefined' && require('path');\n  function relativeRequire(callerPath, requiredPath) {\n    function isDirectory(path) {\n      return (path.slice(-1) === '/');\n    }\n    function isAbsolute(path) {\n      return (path.charAt(0) === '/');\n    }\n    function isRelative(path) {\n      return (path.charAt(0) === '.');\n    }\n    if (isDirectory(requiredPath) || isAbsolute(requiredPath))\n      return;\n    return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath);\n  }\n  function polyfillSymbol(global, Symbol) {\n    if (!global.Symbol) {\n      global.Symbol = Symbol;\n      Object.getOwnPropertySymbols = getOwnPropertySymbols;\n    }\n    if (!global.Symbol.iterator) {\n      global.Symbol.iterator = Symbol('Symbol.iterator');\n    }\n  }\n  function setupGlobals(global) {\n    polyfillSymbol(global, Symbol);\n    global.Reflect = global.Reflect || {};\n    global.Reflect.global = global.Reflect.global || global;\n    polyfillObject(global.Object);\n  }\n  setupGlobals(global);\n  global.$traceurRuntime = {\n    checkObjectCoercible: checkObjectCoercible,\n    createPrivateName: createPrivateName,\n    defineProperties: $defineProperties,\n    defineProperty: $defineProperty,\n    exportStar: exportStar,\n    getOwnHashObject: getOwnHashObject,\n    getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n    getOwnPropertyNames: $getOwnPropertyNames,\n    isObject: isObject,\n    isPrivateName: isPrivateName,\n    isSymbolString: isSymbolString,\n    keys: $keys,\n    setupGlobals: setupGlobals,\n    require: relativeRequire,\n    toObject: toObject,\n    toProperty: toProperty,\n    typeof: typeOf\n  };\n})(typeof global !== 'undefined' ? global : this);\n(function() {\n  'use strict';\n  var path = typeof require !== 'undefined' && require('path');\n  function relativeRequire(callerPath, requiredPath) {\n    function isDirectory(path) {\n      return path.slice(-1) === '/';\n    }\n    function isAbsolute(path) {\n      return path[0] === '/';\n    }\n    function isRelative(path) {\n      return path[0] === '.';\n    }\n    if (isDirectory(requiredPath) || isAbsolute(requiredPath))\n      return;\n    return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath);\n  }\n  $traceurRuntime.require = relativeRequire;\n})();\n(function() {\n  'use strict';\n  function spread() {\n    var rv = [],\n        j = 0,\n        iterResult;\n    for (var i = 0; i < arguments.length; i++) {\n      var valueToSpread = $traceurRuntime.checkObjectCoercible(arguments[i]);\n      if (typeof valueToSpread[$traceurRuntime.toProperty(Symbol.iterator)] !== 'function') {\n        throw new TypeError('Cannot spread non-iterable object.');\n      }\n      var iter = valueToSpread[$traceurRuntime.toProperty(Symbol.iterator)]();\n      while (!(iterResult = iter.next()).done) {\n        rv[j++] = iterResult.value;\n      }\n    }\n    return rv;\n  }\n  $traceurRuntime.spread = spread;\n})();\n(function() {\n  'use strict';\n  var $Object = Object;\n  var $TypeError = TypeError;\n  var $create = $Object.create;\n  var $defineProperties = $traceurRuntime.defineProperties;\n  var $defineProperty = $traceurRuntime.defineProperty;\n  var $getOwnPropertyDescriptor = $traceurRuntime.getOwnPropertyDescriptor;\n  var $getOwnPropertyNames = $traceurRuntime.getOwnPropertyNames;\n  var $getPrototypeOf = Object.getPrototypeOf;\n  var $__0 = Object,\n      getOwnPropertyNames = $__0.getOwnPropertyNames,\n      getOwnPropertySymbols = $__0.getOwnPropertySymbols;\n  function superDescriptor(homeObject, name) {\n    var proto = $getPrototypeOf(homeObject);\n    do {\n      var result = $getOwnPropertyDescriptor(proto, name);\n      if (result)\n        return result;\n      proto = $getPrototypeOf(proto);\n    } while (proto);\n    return undefined;\n  }\n  function superConstructor(ctor) {\n    return ctor.__proto__;\n  }\n  function superCall(self, homeObject, name, args) {\n    return superGet(self, homeObject, name).apply(self, args);\n  }\n  function superGet(self, homeObject, name) {\n    var descriptor = superDescriptor(homeObject, name);\n    if (descriptor) {\n      if (!descriptor.get)\n        return descriptor.value;\n      return descriptor.get.call(self);\n    }\n    return undefined;\n  }\n  function superSet(self, homeObject, name, value) {\n    var descriptor = superDescriptor(homeObject, name);\n    if (descriptor && descriptor.set) {\n      descriptor.set.call(self, value);\n      return value;\n    }\n    throw $TypeError((\"super has no setter '\" + name + \"'.\"));\n  }\n  function getDescriptors(object) {\n    var descriptors = {};\n    var names = getOwnPropertyNames(object);\n    for (var i = 0; i < names.length; i++) {\n      var name = names[i];\n      descriptors[name] = $getOwnPropertyDescriptor(object, name);\n    }\n    var symbols = getOwnPropertySymbols(object);\n    for (var i = 0; i < symbols.length; i++) {\n      var symbol = symbols[i];\n      descriptors[$traceurRuntime.toProperty(symbol)] = $getOwnPropertyDescriptor(object, $traceurRuntime.toProperty(symbol));\n    }\n    return descriptors;\n  }\n  function createClass(ctor, object, staticObject, superClass) {\n    $defineProperty(object, 'constructor', {\n      value: ctor,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n    if (arguments.length > 3) {\n      if (typeof superClass === 'function')\n        ctor.__proto__ = superClass;\n      ctor.prototype = $create(getProtoParent(superClass), getDescriptors(object));\n    } else {\n      ctor.prototype = object;\n    }\n    $defineProperty(ctor, 'prototype', {\n      configurable: false,\n      writable: false\n    });\n    return $defineProperties(ctor, getDescriptors(staticObject));\n  }\n  function getProtoParent(superClass) {\n    if (typeof superClass === 'function') {\n      var prototype = superClass.prototype;\n      if ($Object(prototype) === prototype || prototype === null)\n        return superClass.prototype;\n      throw new $TypeError('super prototype must be an Object or null');\n    }\n    if (superClass === null)\n      return null;\n    throw new $TypeError((\"Super expression must either be null or a function, not \" + typeof superClass + \".\"));\n  }\n  function defaultSuperCall(self, homeObject, args) {\n    if ($getPrototypeOf(homeObject) !== null)\n      superCall(self, homeObject, 'constructor', args);\n  }\n  $traceurRuntime.createClass = createClass;\n  $traceurRuntime.defaultSuperCall = defaultSuperCall;\n  $traceurRuntime.superCall = superCall;\n  $traceurRuntime.superConstructor = superConstructor;\n  $traceurRuntime.superGet = superGet;\n  $traceurRuntime.superSet = superSet;\n})();\n(function() {\n  'use strict';\n  var createPrivateName = $traceurRuntime.createPrivateName;\n  var $defineProperties = $traceurRuntime.defineProperties;\n  var $defineProperty = $traceurRuntime.defineProperty;\n  var $create = Object.create;\n  var $TypeError = TypeError;\n  function nonEnum(value) {\n    return {\n      configurable: true,\n      enumerable: false,\n      value: value,\n      writable: true\n    };\n  }\n  var ST_NEWBORN = 0;\n  var ST_EXECUTING = 1;\n  var ST_SUSPENDED = 2;\n  var ST_CLOSED = 3;\n  var END_STATE = -2;\n  var RETHROW_STATE = -3;\n  function getInternalError(state) {\n    return new Error('Traceur compiler bug: invalid state in state machine: ' + state);\n  }\n  function GeneratorContext() {\n    this.state = 0;\n    this.GState = ST_NEWBORN;\n    this.storedException = undefined;\n    this.finallyFallThrough = undefined;\n    this.sent_ = undefined;\n    this.returnValue = undefined;\n    this.tryStack_ = [];\n  }\n  GeneratorContext.prototype = {\n    pushTry: function(catchState, finallyState) {\n      if (finallyState !== null) {\n        var finallyFallThrough = null;\n        for (var i = this.tryStack_.length - 1; i >= 0; i--) {\n          if (this.tryStack_[i].catch !== undefined) {\n            finallyFallThrough = this.tryStack_[i].catch;\n            break;\n          }\n        }\n        if (finallyFallThrough === null)\n          finallyFallThrough = RETHROW_STATE;\n        this.tryStack_.push({\n          finally: finallyState,\n          finallyFallThrough: finallyFallThrough\n        });\n      }\n      if (catchState !== null) {\n        this.tryStack_.push({catch: catchState});\n      }\n    },\n    popTry: function() {\n      this.tryStack_.pop();\n    },\n    get sent() {\n      this.maybeThrow();\n      return this.sent_;\n    },\n    set sent(v) {\n      this.sent_ = v;\n    },\n    get sentIgnoreThrow() {\n      return this.sent_;\n    },\n    maybeThrow: function() {\n      if (this.action === 'throw') {\n        this.action = 'next';\n        throw this.sent_;\n      }\n    },\n    end: function() {\n      switch (this.state) {\n        case END_STATE:\n          return this;\n        case RETHROW_STATE:\n          throw this.storedException;\n        default:\n          throw getInternalError(this.state);\n      }\n    },\n    handleException: function(ex) {\n      this.GState = ST_CLOSED;\n      this.state = END_STATE;\n      throw ex;\n    }\n  };\n  function nextOrThrow(ctx, moveNext, action, x) {\n    switch (ctx.GState) {\n      case ST_EXECUTING:\n        throw new Error((\"\\\"\" + action + \"\\\" on executing generator\"));\n      case ST_CLOSED:\n        if (action == 'next') {\n          return {\n            value: undefined,\n            done: true\n          };\n        }\n        throw x;\n      case ST_NEWBORN:\n        if (action === 'throw') {\n          ctx.GState = ST_CLOSED;\n          throw x;\n        }\n        if (x !== undefined)\n          throw $TypeError('Sent value to newborn generator');\n      case ST_SUSPENDED:\n        ctx.GState = ST_EXECUTING;\n        ctx.action = action;\n        ctx.sent = x;\n        var value = moveNext(ctx);\n        var done = value === ctx;\n        if (done)\n          value = ctx.returnValue;\n        ctx.GState = done ? ST_CLOSED : ST_SUSPENDED;\n        return {\n          value: value,\n          done: done\n        };\n    }\n  }\n  var ctxName = createPrivateName();\n  var moveNextName = createPrivateName();\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  $defineProperty(GeneratorFunctionPrototype, 'constructor', nonEnum(GeneratorFunction));\n  GeneratorFunctionPrototype.prototype = {\n    constructor: GeneratorFunctionPrototype,\n    next: function(v) {\n      return nextOrThrow(this[ctxName], this[moveNextName], 'next', v);\n    },\n    throw: function(v) {\n      return nextOrThrow(this[ctxName], this[moveNextName], 'throw', v);\n    }\n  };\n  $defineProperties(GeneratorFunctionPrototype.prototype, {\n    constructor: {enumerable: false},\n    next: {enumerable: false},\n    throw: {enumerable: false}\n  });\n  Object.defineProperty(GeneratorFunctionPrototype.prototype, Symbol.iterator, nonEnum(function() {\n    return this;\n  }));\n  function createGeneratorInstance(innerFunction, functionObject, self) {\n    var moveNext = getMoveNext(innerFunction, self);\n    var ctx = new GeneratorContext();\n    var object = $create(functionObject.prototype);\n    object[ctxName] = ctx;\n    object[moveNextName] = moveNext;\n    return object;\n  }\n  function initGeneratorFunction(functionObject) {\n    functionObject.prototype = $create(GeneratorFunctionPrototype.prototype);\n    functionObject.__proto__ = GeneratorFunctionPrototype;\n    return functionObject;\n  }\n  function AsyncFunctionContext() {\n    GeneratorContext.call(this);\n    this.err = undefined;\n    var ctx = this;\n    ctx.result = new Promise(function(resolve, reject) {\n      ctx.resolve = resolve;\n      ctx.reject = reject;\n    });\n  }\n  AsyncFunctionContext.prototype = $create(GeneratorContext.prototype);\n  AsyncFunctionContext.prototype.end = function() {\n    switch (this.state) {\n      case END_STATE:\n        this.resolve(this.returnValue);\n        break;\n      case RETHROW_STATE:\n        this.reject(this.storedException);\n        break;\n      default:\n        this.reject(getInternalError(this.state));\n    }\n  };\n  AsyncFunctionContext.prototype.handleException = function() {\n    this.state = RETHROW_STATE;\n  };\n  function asyncWrap(innerFunction, self) {\n    var moveNext = getMoveNext(innerFunction, self);\n    var ctx = new AsyncFunctionContext();\n    ctx.createCallback = function(newState) {\n      return function(value) {\n        ctx.state = newState;\n        ctx.value = value;\n        moveNext(ctx);\n      };\n    };\n    ctx.errback = function(err) {\n      handleCatch(ctx, err);\n      moveNext(ctx);\n    };\n    moveNext(ctx);\n    return ctx.result;\n  }\n  function getMoveNext(innerFunction, self) {\n    return function(ctx) {\n      while (true) {\n        try {\n          return innerFunction.call(self, ctx);\n        } catch (ex) {\n          handleCatch(ctx, ex);\n        }\n      }\n    };\n  }\n  function handleCatch(ctx, ex) {\n    ctx.storedException = ex;\n    var last = ctx.tryStack_[ctx.tryStack_.length - 1];\n    if (!last) {\n      ctx.handleException(ex);\n      return;\n    }\n    ctx.state = last.catch !== undefined ? last.catch : last.finally;\n    if (last.finallyFallThrough !== undefined)\n      ctx.finallyFallThrough = last.finallyFallThrough;\n  }\n  $traceurRuntime.asyncWrap = asyncWrap;\n  $traceurRuntime.initGeneratorFunction = initGeneratorFunction;\n  $traceurRuntime.createGeneratorInstance = createGeneratorInstance;\n})();\n(function() {\n  function buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {\n    var out = [];\n    if (opt_scheme) {\n      out.push(opt_scheme, ':');\n    }\n    if (opt_domain) {\n      out.push('//');\n      if (opt_userInfo) {\n        out.push(opt_userInfo, '@');\n      }\n      out.push(opt_domain);\n      if (opt_port) {\n        out.push(':', opt_port);\n      }\n    }\n    if (opt_path) {\n      out.push(opt_path);\n    }\n    if (opt_queryData) {\n      out.push('?', opt_queryData);\n    }\n    if (opt_fragment) {\n      out.push('#', opt_fragment);\n    }\n    return out.join('');\n  }\n  ;\n  var splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\\\?([^#]*))?' + '(?:#(.*))?' + '$');\n  var ComponentIndex = {\n    SCHEME: 1,\n    USER_INFO: 2,\n    DOMAIN: 3,\n    PORT: 4,\n    PATH: 5,\n    QUERY_DATA: 6,\n    FRAGMENT: 7\n  };\n  function split(uri) {\n    return (uri.match(splitRe));\n  }\n  function removeDotSegments(path) {\n    if (path === '/')\n      return '/';\n    var leadingSlash = path[0] === '/' ? '/' : '';\n    var trailingSlash = path.slice(-1) === '/' ? '/' : '';\n    var segments = path.split('/');\n    var out = [];\n    var up = 0;\n    for (var pos = 0; pos < segments.length; pos++) {\n      var segment = segments[pos];\n      switch (segment) {\n        case '':\n        case '.':\n          break;\n        case '..':\n          if (out.length)\n            out.pop();\n          else\n            up++;\n          break;\n        default:\n          out.push(segment);\n      }\n    }\n    if (!leadingSlash) {\n      while (up-- > 0) {\n        out.unshift('..');\n      }\n      if (out.length === 0)\n        out.push('.');\n    }\n    return leadingSlash + out.join('/') + trailingSlash;\n  }\n  function joinAndCanonicalizePath(parts) {\n    var path = parts[ComponentIndex.PATH] || '';\n    path = removeDotSegments(path);\n    parts[ComponentIndex.PATH] = path;\n    return buildFromEncodedParts(parts[ComponentIndex.SCHEME], parts[ComponentIndex.USER_INFO], parts[ComponentIndex.DOMAIN], parts[ComponentIndex.PORT], parts[ComponentIndex.PATH], parts[ComponentIndex.QUERY_DATA], parts[ComponentIndex.FRAGMENT]);\n  }\n  function canonicalizeUrl(url) {\n    var parts = split(url);\n    return joinAndCanonicalizePath(parts);\n  }\n  function resolveUrl(base, url) {\n    var parts = split(url);\n    var baseParts = split(base);\n    if (parts[ComponentIndex.SCHEME]) {\n      return joinAndCanonicalizePath(parts);\n    } else {\n      parts[ComponentIndex.SCHEME] = baseParts[ComponentIndex.SCHEME];\n    }\n    for (var i = ComponentIndex.SCHEME; i <= ComponentIndex.PORT; i++) {\n      if (!parts[i]) {\n        parts[i] = baseParts[i];\n      }\n    }\n    if (parts[ComponentIndex.PATH][0] == '/') {\n      return joinAndCanonicalizePath(parts);\n    }\n    var path = baseParts[ComponentIndex.PATH];\n    var index = path.lastIndexOf('/');\n    path = path.slice(0, index + 1) + parts[ComponentIndex.PATH];\n    parts[ComponentIndex.PATH] = path;\n    return joinAndCanonicalizePath(parts);\n  }\n  function isAbsolute(name) {\n    if (!name)\n      return false;\n    if (name[0] === '/')\n      return true;\n    var parts = split(name);\n    if (parts[ComponentIndex.SCHEME])\n      return true;\n    return false;\n  }\n  $traceurRuntime.canonicalizeUrl = canonicalizeUrl;\n  $traceurRuntime.isAbsolute = isAbsolute;\n  $traceurRuntime.removeDotSegments = removeDotSegments;\n  $traceurRuntime.resolveUrl = resolveUrl;\n})();\n(function() {\n  'use strict';\n  var types = {\n    any: {name: 'any'},\n    boolean: {name: 'boolean'},\n    number: {name: 'number'},\n    string: {name: 'string'},\n    symbol: {name: 'symbol'},\n    void: {name: 'void'}\n  };\n  var GenericType = function GenericType(type, argumentTypes) {\n    this.type = type;\n    this.argumentTypes = argumentTypes;\n  };\n  ($traceurRuntime.createClass)(GenericType, {}, {});\n  function genericType(type) {\n    for (var argumentTypes = [],\n        $__1 = 1; $__1 < arguments.length; $__1++)\n      argumentTypes[$__1 - 1] = arguments[$__1];\n    return new GenericType(type, argumentTypes);\n  }\n  $traceurRuntime.GenericType = GenericType;\n  $traceurRuntime.genericType = genericType;\n  $traceurRuntime.type = types;\n})();\n(function(global) {\n  'use strict';\n  var $__2 = $traceurRuntime,\n      canonicalizeUrl = $__2.canonicalizeUrl,\n      resolveUrl = $__2.resolveUrl,\n      isAbsolute = $__2.isAbsolute;\n  var moduleInstantiators = Object.create(null);\n  var baseURL;\n  if (global.location && global.location.href)\n    baseURL = resolveUrl(global.location.href, './');\n  else\n    baseURL = '';\n  var UncoatedModuleEntry = function UncoatedModuleEntry(url, uncoatedModule) {\n    this.url = url;\n    this.value_ = uncoatedModule;\n  };\n  ($traceurRuntime.createClass)(UncoatedModuleEntry, {}, {});\n  var ModuleEvaluationError = function ModuleEvaluationError(erroneousModuleName, cause) {\n    this.message = this.constructor.name + ': ' + this.stripCause(cause) + ' in ' + erroneousModuleName;\n    if (!(cause instanceof $ModuleEvaluationError) && cause.stack)\n      this.stack = this.stripStack(cause.stack);\n    else\n      this.stack = '';\n  };\n  var $ModuleEvaluationError = ModuleEvaluationError;\n  ($traceurRuntime.createClass)(ModuleEvaluationError, {\n    stripError: function(message) {\n      return message.replace(/.*Error:/, this.constructor.name + ':');\n    },\n    stripCause: function(cause) {\n      if (!cause)\n        return '';\n      if (!cause.message)\n        return cause + '';\n      return this.stripError(cause.message);\n    },\n    loadedBy: function(moduleName) {\n      this.stack += '\\n loaded by ' + moduleName;\n    },\n    stripStack: function(causeStack) {\n      var stack = [];\n      causeStack.split('\\n').some((function(frame) {\n        if (/UncoatedModuleInstantiator/.test(frame))\n          return true;\n        stack.push(frame);\n      }));\n      stack[0] = this.stripError(stack[0]);\n      return stack.join('\\n');\n    }\n  }, {}, Error);\n  var UncoatedModuleInstantiator = function UncoatedModuleInstantiator(url, func) {\n    $traceurRuntime.superConstructor($UncoatedModuleInstantiator).call(this, url, null);\n    this.func = func;\n  };\n  var $UncoatedModuleInstantiator = UncoatedModuleInstantiator;\n  ($traceurRuntime.createClass)(UncoatedModuleInstantiator, {getUncoatedModule: function() {\n      if (this.value_)\n        return this.value_;\n      try {\n        return this.value_ = this.func.call(global);\n      } catch (ex) {\n        if (ex instanceof ModuleEvaluationError) {\n          ex.loadedBy(this.url);\n          throw ex;\n        }\n        throw new ModuleEvaluationError(this.url, ex);\n      }\n    }}, {}, UncoatedModuleEntry);\n  function getUncoatedModuleInstantiator(name) {\n    if (!name)\n      return;\n    var url = ModuleStore.normalize(name);\n    return moduleInstantiators[url];\n  }\n  ;\n  var moduleInstances = Object.create(null);\n  var liveModuleSentinel = {};\n  function Module(uncoatedModule) {\n    var isLive = arguments[1];\n    var coatedModule = Object.create(null);\n    Object.getOwnPropertyNames(uncoatedModule).forEach((function(name) {\n      var getter,\n          value;\n      if (isLive === liveModuleSentinel) {\n        var descr = Object.getOwnPropertyDescriptor(uncoatedModule, name);\n        if (descr.get)\n          getter = descr.get;\n      }\n      if (!getter) {\n        value = uncoatedModule[name];\n        getter = function() {\n          return value;\n        };\n      }\n      Object.defineProperty(coatedModule, name, {\n        get: getter,\n        enumerable: true\n      });\n    }));\n    Object.preventExtensions(coatedModule);\n    return coatedModule;\n  }\n  var ModuleStore = {\n    normalize: function(name, refererName, refererAddress) {\n      if (typeof name !== \"string\")\n        throw new TypeError(\"module name must be a string, not \" + typeof name);\n      if (isAbsolute(name))\n        return canonicalizeUrl(name);\n      if (/[^\\.]\\/\\.\\.\\//.test(name)) {\n        throw new Error('module name embeds /../: ' + name);\n      }\n      if (name[0] === '.' && refererName)\n        return resolveUrl(refererName, name);\n      return canonicalizeUrl(name);\n    },\n    get: function(normalizedName) {\n      var m = getUncoatedModuleInstantiator(normalizedName);\n      if (!m)\n        return undefined;\n      var moduleInstance = moduleInstances[m.url];\n      if (moduleInstance)\n        return moduleInstance;\n      moduleInstance = Module(m.getUncoatedModule(), liveModuleSentinel);\n      return moduleInstances[m.url] = moduleInstance;\n    },\n    set: function(normalizedName, module) {\n      normalizedName = String(normalizedName);\n      moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, (function() {\n        return module;\n      }));\n      moduleInstances[normalizedName] = module;\n    },\n    get baseURL() {\n      return baseURL;\n    },\n    set baseURL(v) {\n      baseURL = String(v);\n    },\n    registerModule: function(name, func) {\n      var normalizedName = ModuleStore.normalize(name);\n      if (moduleInstantiators[normalizedName])\n        throw new Error('duplicate module named ' + normalizedName);\n      moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, func);\n    },\n    bundleStore: Object.create(null),\n    register: function(name, deps, func) {\n      if (!deps || !deps.length && !func.length) {\n        this.registerModule(name, func);\n      } else {\n        this.bundleStore[name] = {\n          deps: deps,\n          execute: function() {\n            var $__0 = arguments;\n            var depMap = {};\n            deps.forEach((function(dep, index) {\n              return depMap[dep] = $__0[index];\n            }));\n            var registryEntry = func.call(this, depMap);\n            registryEntry.execute.call(this);\n            return registryEntry.exports;\n          }\n        };\n      }\n    },\n    getAnonymousModule: function(func) {\n      return new Module(func.call(global), liveModuleSentinel);\n    },\n    getForTesting: function(name) {\n      var $__0 = this;\n      if (!this.testingPrefix_) {\n        Object.keys(moduleInstances).some((function(key) {\n          var m = /(traceur@[^\\/]*\\/)/.exec(key);\n          if (m) {\n            $__0.testingPrefix_ = m[1];\n            return true;\n          }\n        }));\n      }\n      return this.get(this.testingPrefix_ + name);\n    }\n  };\n  ModuleStore.set('@traceur/src/runtime/ModuleStore', new Module({ModuleStore: ModuleStore}));\n  var setupGlobals = $traceurRuntime.setupGlobals;\n  $traceurRuntime.setupGlobals = function(global) {\n    setupGlobals(global);\n  };\n  $traceurRuntime.ModuleStore = ModuleStore;\n  global.System = {\n    register: ModuleStore.register.bind(ModuleStore),\n    get: ModuleStore.get,\n    set: ModuleStore.set,\n    normalize: ModuleStore.normalize\n  };\n  $traceurRuntime.getModuleImpl = function(name) {\n    var instantiator = getUncoatedModuleInstantiator(name);\n    return instantiator && instantiator.getUncoatedModule();\n  };\n})(typeof global !== 'undefined' ? global : this);\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/utils\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\", path);\n  }\n  var $ceil = Math.ceil;\n  var $floor = Math.floor;\n  var $isFinite = isFinite;\n  var $isNaN = isNaN;\n  var $pow = Math.pow;\n  var $min = Math.min;\n  var toObject = $traceurRuntime.toObject;\n  function toUint32(x) {\n    return x >>> 0;\n  }\n  function isObject(x) {\n    return x && (typeof x === 'object' || typeof x === 'function');\n  }\n  function isCallable(x) {\n    return typeof x === 'function';\n  }\n  function isNumber(x) {\n    return typeof x === 'number';\n  }\n  function toInteger(x) {\n    x = +x;\n    if ($isNaN(x))\n      return 0;\n    if (x === 0 || !$isFinite(x))\n      return x;\n    return x > 0 ? $floor(x) : $ceil(x);\n  }\n  var MAX_SAFE_LENGTH = $pow(2, 53) - 1;\n  function toLength(x) {\n    var len = toInteger(x);\n    return len < 0 ? 0 : $min(len, MAX_SAFE_LENGTH);\n  }\n  function checkIterable(x) {\n    return !isObject(x) ? undefined : x[Symbol.iterator];\n  }\n  function isConstructor(x) {\n    return isCallable(x);\n  }\n  function createIteratorResultObject(value, done) {\n    return {\n      value: value,\n      done: done\n    };\n  }\n  function maybeDefine(object, name, descr) {\n    if (!(name in object)) {\n      Object.defineProperty(object, name, descr);\n    }\n  }\n  function maybeDefineMethod(object, name, value) {\n    maybeDefine(object, name, {\n      value: value,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n  }\n  function maybeDefineConst(object, name, value) {\n    maybeDefine(object, name, {\n      value: value,\n      configurable: false,\n      enumerable: false,\n      writable: false\n    });\n  }\n  function maybeAddFunctions(object, functions) {\n    for (var i = 0; i < functions.length; i += 2) {\n      var name = functions[i];\n      var value = functions[i + 1];\n      maybeDefineMethod(object, name, value);\n    }\n  }\n  function maybeAddConsts(object, consts) {\n    for (var i = 0; i < consts.length; i += 2) {\n      var name = consts[i];\n      var value = consts[i + 1];\n      maybeDefineConst(object, name, value);\n    }\n  }\n  function maybeAddIterator(object, func, Symbol) {\n    if (!Symbol || !Symbol.iterator || object[Symbol.iterator])\n      return;\n    if (object['@@iterator'])\n      func = object['@@iterator'];\n    Object.defineProperty(object, Symbol.iterator, {\n      value: func,\n      configurable: true,\n      enumerable: false,\n      writable: true\n    });\n  }\n  var polyfills = [];\n  function registerPolyfill(func) {\n    polyfills.push(func);\n  }\n  function polyfillAll(global) {\n    polyfills.forEach((function(f) {\n      return f(global);\n    }));\n  }\n  return {\n    get toObject() {\n      return toObject;\n    },\n    get toUint32() {\n      return toUint32;\n    },\n    get isObject() {\n      return isObject;\n    },\n    get isCallable() {\n      return isCallable;\n    },\n    get isNumber() {\n      return isNumber;\n    },\n    get toInteger() {\n      return toInteger;\n    },\n    get toLength() {\n      return toLength;\n    },\n    get checkIterable() {\n      return checkIterable;\n    },\n    get isConstructor() {\n      return isConstructor;\n    },\n    get createIteratorResultObject() {\n      return createIteratorResultObject;\n    },\n    get maybeDefine() {\n      return maybeDefine;\n    },\n    get maybeDefineMethod() {\n      return maybeDefineMethod;\n    },\n    get maybeDefineConst() {\n      return maybeDefineConst;\n    },\n    get maybeAddFunctions() {\n      return maybeAddFunctions;\n    },\n    get maybeAddConsts() {\n      return maybeAddConsts;\n    },\n    get maybeAddIterator() {\n      return maybeAddIterator;\n    },\n    get registerPolyfill() {\n      return registerPolyfill;\n    },\n    get polyfillAll() {\n      return polyfillAll;\n    }\n  };\n});\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Map\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Map\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Map\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      isObject = $__0.isObject,\n      maybeAddIterator = $__0.maybeAddIterator,\n      registerPolyfill = $__0.registerPolyfill;\n  var getOwnHashObject = $traceurRuntime.getOwnHashObject;\n  var $hasOwnProperty = Object.prototype.hasOwnProperty;\n  var deletedSentinel = {};\n  function lookupIndex(map, key) {\n    if (isObject(key)) {\n      var hashObject = getOwnHashObject(key);\n      return hashObject && map.objectIndex_[hashObject.hash];\n    }\n    if (typeof key === 'string')\n      return map.stringIndex_[key];\n    return map.primitiveIndex_[key];\n  }\n  function initMap(map) {\n    map.entries_ = [];\n    map.objectIndex_ = Object.create(null);\n    map.stringIndex_ = Object.create(null);\n    map.primitiveIndex_ = Object.create(null);\n    map.deletedCount_ = 0;\n  }\n  var Map = function Map() {\n    var iterable = arguments[0];\n    if (!isObject(this))\n      throw new TypeError('Map called on incompatible type');\n    if ($hasOwnProperty.call(this, 'entries_')) {\n      throw new TypeError('Map can not be reentrantly initialised');\n    }\n    initMap(this);\n    if (iterable !== null && iterable !== undefined) {\n      for (var $__2 = iterable[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__3; !($__3 = $__2.next()).done; ) {\n        var $__4 = $__3.value,\n            key = $__4[0],\n            value = $__4[1];\n        {\n          this.set(key, value);\n        }\n      }\n    }\n  };\n  ($traceurRuntime.createClass)(Map, {\n    get size() {\n      return this.entries_.length / 2 - this.deletedCount_;\n    },\n    get: function(key) {\n      var index = lookupIndex(this, key);\n      if (index !== undefined)\n        return this.entries_[index + 1];\n    },\n    set: function(key, value) {\n      var objectMode = isObject(key);\n      var stringMode = typeof key === 'string';\n      var index = lookupIndex(this, key);\n      if (index !== undefined) {\n        this.entries_[index + 1] = value;\n      } else {\n        index = this.entries_.length;\n        this.entries_[index] = key;\n        this.entries_[index + 1] = value;\n        if (objectMode) {\n          var hashObject = getOwnHashObject(key);\n          var hash = hashObject.hash;\n          this.objectIndex_[hash] = index;\n        } else if (stringMode) {\n          this.stringIndex_[key] = index;\n        } else {\n          this.primitiveIndex_[key] = index;\n        }\n      }\n      return this;\n    },\n    has: function(key) {\n      return lookupIndex(this, key) !== undefined;\n    },\n    delete: function(key) {\n      var objectMode = isObject(key);\n      var stringMode = typeof key === 'string';\n      var index;\n      var hash;\n      if (objectMode) {\n        var hashObject = getOwnHashObject(key);\n        if (hashObject) {\n          index = this.objectIndex_[hash = hashObject.hash];\n          delete this.objectIndex_[hash];\n        }\n      } else if (stringMode) {\n        index = this.stringIndex_[key];\n        delete this.stringIndex_[key];\n      } else {\n        index = this.primitiveIndex_[key];\n        delete this.primitiveIndex_[key];\n      }\n      if (index !== undefined) {\n        this.entries_[index] = deletedSentinel;\n        this.entries_[index + 1] = undefined;\n        this.deletedCount_++;\n        return true;\n      }\n      return false;\n    },\n    clear: function() {\n      initMap(this);\n    },\n    forEach: function(callbackFn) {\n      var thisArg = arguments[1];\n      for (var i = 0; i < this.entries_.length; i += 2) {\n        var key = this.entries_[i];\n        var value = this.entries_[i + 1];\n        if (key === deletedSentinel)\n          continue;\n        callbackFn.call(thisArg, value, key, this);\n      }\n    },\n    entries: $traceurRuntime.initGeneratorFunction(function $__5() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return [key, value];\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__5, this);\n    }),\n    keys: $traceurRuntime.initGeneratorFunction(function $__6() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return key;\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__6, this);\n    }),\n    values: $traceurRuntime.initGeneratorFunction(function $__7() {\n      var i,\n          key,\n          value;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              i = 0;\n              $ctx.state = 12;\n              break;\n            case 12:\n              $ctx.state = (i < this.entries_.length) ? 8 : -2;\n              break;\n            case 4:\n              i += 2;\n              $ctx.state = 12;\n              break;\n            case 8:\n              key = this.entries_[i];\n              value = this.entries_[i + 1];\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = (key === deletedSentinel) ? 4 : 6;\n              break;\n            case 6:\n              $ctx.state = 2;\n              return value;\n            case 2:\n              $ctx.maybeThrow();\n              $ctx.state = 4;\n              break;\n            default:\n              return $ctx.end();\n          }\n      }, $__7, this);\n    })\n  }, {});\n  Object.defineProperty(Map.prototype, Symbol.iterator, {\n    configurable: true,\n    writable: true,\n    value: Map.prototype.entries\n  });\n  function polyfillMap(global) {\n    var $__4 = global,\n        Object = $__4.Object,\n        Symbol = $__4.Symbol;\n    if (!global.Map)\n      global.Map = Map;\n    var mapPrototype = global.Map.prototype;\n    if (mapPrototype.entries === undefined)\n      global.Map = Map;\n    if (mapPrototype.entries) {\n      maybeAddIterator(mapPrototype, mapPrototype.entries, Symbol);\n      maybeAddIterator(Object.getPrototypeOf(new global.Map().entries()), function() {\n        return this;\n      }, Symbol);\n    }\n  }\n  registerPolyfill(polyfillMap);\n  return {\n    get Map() {\n      return Map;\n    },\n    get polyfillMap() {\n      return polyfillMap;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Map\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Set\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Set\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Set\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      isObject = $__0.isObject,\n      maybeAddIterator = $__0.maybeAddIterator,\n      registerPolyfill = $__0.registerPolyfill;\n  var Map = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Map\").Map;\n  var getOwnHashObject = $traceurRuntime.getOwnHashObject;\n  var $hasOwnProperty = Object.prototype.hasOwnProperty;\n  function initSet(set) {\n    set.map_ = new Map();\n  }\n  var Set = function Set() {\n    var iterable = arguments[0];\n    if (!isObject(this))\n      throw new TypeError('Set called on incompatible type');\n    if ($hasOwnProperty.call(this, 'map_')) {\n      throw new TypeError('Set can not be reentrantly initialised');\n    }\n    initSet(this);\n    if (iterable !== null && iterable !== undefined) {\n      for (var $__4 = iterable[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__5; !($__5 = $__4.next()).done; ) {\n        var item = $__5.value;\n        {\n          this.add(item);\n        }\n      }\n    }\n  };\n  ($traceurRuntime.createClass)(Set, {\n    get size() {\n      return this.map_.size;\n    },\n    has: function(key) {\n      return this.map_.has(key);\n    },\n    add: function(key) {\n      this.map_.set(key, key);\n      return this;\n    },\n    delete: function(key) {\n      return this.map_.delete(key);\n    },\n    clear: function() {\n      return this.map_.clear();\n    },\n    forEach: function(callbackFn) {\n      var thisArg = arguments[1];\n      var $__2 = this;\n      return this.map_.forEach((function(value, key) {\n        callbackFn.call(thisArg, key, key, $__2);\n      }));\n    },\n    values: $traceurRuntime.initGeneratorFunction(function $__7() {\n      var $__8,\n          $__9;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              $__8 = this.map_.keys()[Symbol.iterator]();\n              $ctx.sent = void 0;\n              $ctx.action = 'next';\n              $ctx.state = 12;\n              break;\n            case 12:\n              $__9 = $__8[$ctx.action]($ctx.sentIgnoreThrow);\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = ($__9.done) ? 3 : 2;\n              break;\n            case 3:\n              $ctx.sent = $__9.value;\n              $ctx.state = -2;\n              break;\n            case 2:\n              $ctx.state = 12;\n              return $__9.value;\n            default:\n              return $ctx.end();\n          }\n      }, $__7, this);\n    }),\n    entries: $traceurRuntime.initGeneratorFunction(function $__10() {\n      var $__11,\n          $__12;\n      return $traceurRuntime.createGeneratorInstance(function($ctx) {\n        while (true)\n          switch ($ctx.state) {\n            case 0:\n              $__11 = this.map_.entries()[Symbol.iterator]();\n              $ctx.sent = void 0;\n              $ctx.action = 'next';\n              $ctx.state = 12;\n              break;\n            case 12:\n              $__12 = $__11[$ctx.action]($ctx.sentIgnoreThrow);\n              $ctx.state = 9;\n              break;\n            case 9:\n              $ctx.state = ($__12.done) ? 3 : 2;\n              break;\n            case 3:\n              $ctx.sent = $__12.value;\n              $ctx.state = -2;\n              break;\n            case 2:\n              $ctx.state = 12;\n              return $__12.value;\n            default:\n              return $ctx.end();\n          }\n      }, $__10, this);\n    })\n  }, {});\n  Object.defineProperty(Set.prototype, Symbol.iterator, {\n    configurable: true,\n    writable: true,\n    value: Set.prototype.values\n  });\n  Object.defineProperty(Set.prototype, 'keys', {\n    configurable: true,\n    writable: true,\n    value: Set.prototype.values\n  });\n  function polyfillSet(global) {\n    var $__6 = global,\n        Object = $__6.Object,\n        Symbol = $__6.Symbol;\n    if (!global.Set)\n      global.Set = Set;\n    var setPrototype = global.Set.prototype;\n    if (setPrototype.values) {\n      maybeAddIterator(setPrototype, setPrototype.values, Symbol);\n      maybeAddIterator(Object.getPrototypeOf(new global.Set().values()), function() {\n        return this;\n      }, Symbol);\n    }\n  }\n  registerPolyfill(polyfillSet);\n  return {\n    get Set() {\n      return Set;\n    },\n    get polyfillSet() {\n      return polyfillSet;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Set\" + '');\nSystem.register(\"traceur-runtime@0.0.74/node_modules/rsvp/lib/rsvp/asap\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/node_modules/rsvp/lib/rsvp/asap\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/node_modules/rsvp/lib/rsvp/asap\", path);\n  }\n  var len = 0;\n  function asap(callback, arg) {\n    queue[len] = callback;\n    queue[len + 1] = arg;\n    len += 2;\n    if (len === 2) {\n      scheduleFlush();\n    }\n  }\n  var $__default = asap;\n  var browserGlobal = (typeof window !== 'undefined') ? window : {};\n  var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\n  var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n  function useNextTick() {\n    return function() {\n      process.nextTick(flush);\n    };\n  }\n  function useMutationObserver() {\n    var iterations = 0;\n    var observer = new BrowserMutationObserver(flush);\n    var node = document.createTextNode('');\n    observer.observe(node, {characterData: true});\n    return function() {\n      node.data = (iterations = ++iterations % 2);\n    };\n  }\n  function useMessageChannel() {\n    var channel = new MessageChannel();\n    channel.port1.onmessage = flush;\n    return function() {\n      channel.port2.postMessage(0);\n    };\n  }\n  function useSetTimeout() {\n    return function() {\n      setTimeout(flush, 1);\n    };\n  }\n  var queue = new Array(1000);\n  function flush() {\n    for (var i = 0; i < len; i += 2) {\n      var callback = queue[i];\n      var arg = queue[i + 1];\n      callback(arg);\n      queue[i] = undefined;\n      queue[i + 1] = undefined;\n    }\n    len = 0;\n  }\n  var scheduleFlush;\n  if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {\n    scheduleFlush = useNextTick();\n  } else if (BrowserMutationObserver) {\n    scheduleFlush = useMutationObserver();\n  } else if (isWorker) {\n    scheduleFlush = useMessageChannel();\n  } else {\n    scheduleFlush = useSetTimeout();\n  }\n  return {get default() {\n      return $__default;\n    }};\n});\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Promise\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Promise\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Promise\", path);\n  }\n  var async = System.get(\"traceur-runtime@0.0.74/node_modules/rsvp/lib/rsvp/asap\").default;\n  var registerPolyfill = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\").registerPolyfill;\n  var promiseRaw = {};\n  function isPromise(x) {\n    return x && typeof x === 'object' && x.status_ !== undefined;\n  }\n  function idResolveHandler(x) {\n    return x;\n  }\n  function idRejectHandler(x) {\n    throw x;\n  }\n  function chain(promise) {\n    var onResolve = arguments[1] !== (void 0) ? arguments[1] : idResolveHandler;\n    var onReject = arguments[2] !== (void 0) ? arguments[2] : idRejectHandler;\n    var deferred = getDeferred(promise.constructor);\n    switch (promise.status_) {\n      case undefined:\n        throw TypeError;\n      case 0:\n        promise.onResolve_.push(onResolve, deferred);\n        promise.onReject_.push(onReject, deferred);\n        break;\n      case +1:\n        promiseEnqueue(promise.value_, [onResolve, deferred]);\n        break;\n      case -1:\n        promiseEnqueue(promise.value_, [onReject, deferred]);\n        break;\n    }\n    return deferred.promise;\n  }\n  function getDeferred(C) {\n    if (this === $Promise) {\n      var promise = promiseInit(new $Promise(promiseRaw));\n      return {\n        promise: promise,\n        resolve: (function(x) {\n          promiseResolve(promise, x);\n        }),\n        reject: (function(r) {\n          promiseReject(promise, r);\n        })\n      };\n    } else {\n      var result = {};\n      result.promise = new C((function(resolve, reject) {\n        result.resolve = resolve;\n        result.reject = reject;\n      }));\n      return result;\n    }\n  }\n  function promiseSet(promise, status, value, onResolve, onReject) {\n    promise.status_ = status;\n    promise.value_ = value;\n    promise.onResolve_ = onResolve;\n    promise.onReject_ = onReject;\n    return promise;\n  }\n  function promiseInit(promise) {\n    return promiseSet(promise, 0, undefined, [], []);\n  }\n  var Promise = function Promise(resolver) {\n    if (resolver === promiseRaw)\n      return;\n    if (typeof resolver !== 'function')\n      throw new TypeError;\n    var promise = promiseInit(this);\n    try {\n      resolver((function(x) {\n        promiseResolve(promise, x);\n      }), (function(r) {\n        promiseReject(promise, r);\n      }));\n    } catch (e) {\n      promiseReject(promise, e);\n    }\n  };\n  ($traceurRuntime.createClass)(Promise, {\n    catch: function(onReject) {\n      return this.then(undefined, onReject);\n    },\n    then: function(onResolve, onReject) {\n      if (typeof onResolve !== 'function')\n        onResolve = idResolveHandler;\n      if (typeof onReject !== 'function')\n        onReject = idRejectHandler;\n      var that = this;\n      var constructor = this.constructor;\n      return chain(this, function(x) {\n        x = promiseCoerce(constructor, x);\n        return x === that ? onReject(new TypeError) : isPromise(x) ? x.then(onResolve, onReject) : onResolve(x);\n      }, onReject);\n    }\n  }, {\n    resolve: function(x) {\n      if (this === $Promise) {\n        if (isPromise(x)) {\n          return x;\n        }\n        return promiseSet(new $Promise(promiseRaw), +1, x);\n      } else {\n        return new this(function(resolve, reject) {\n          resolve(x);\n        });\n      }\n    },\n    reject: function(r) {\n      if (this === $Promise) {\n        return promiseSet(new $Promise(promiseRaw), -1, r);\n      } else {\n        return new this((function(resolve, reject) {\n          reject(r);\n        }));\n      }\n    },\n    all: function(values) {\n      var deferred = getDeferred(this);\n      var resolutions = [];\n      try {\n        var count = values.length;\n        if (count === 0) {\n          deferred.resolve(resolutions);\n        } else {\n          for (var i = 0; i < values.length; i++) {\n            this.resolve(values[i]).then(function(i, x) {\n              resolutions[i] = x;\n              if (--count === 0)\n                deferred.resolve(resolutions);\n            }.bind(undefined, i), (function(r) {\n              deferred.reject(r);\n            }));\n          }\n        }\n      } catch (e) {\n        deferred.reject(e);\n      }\n      return deferred.promise;\n    },\n    race: function(values) {\n      var deferred = getDeferred(this);\n      try {\n        for (var i = 0; i < values.length; i++) {\n          this.resolve(values[i]).then((function(x) {\n            deferred.resolve(x);\n          }), (function(r) {\n            deferred.reject(r);\n          }));\n        }\n      } catch (e) {\n        deferred.reject(e);\n      }\n      return deferred.promise;\n    }\n  });\n  var $Promise = Promise;\n  var $PromiseReject = $Promise.reject;\n  function promiseResolve(promise, x) {\n    promiseDone(promise, +1, x, promise.onResolve_);\n  }\n  function promiseReject(promise, r) {\n    promiseDone(promise, -1, r, promise.onReject_);\n  }\n  function promiseDone(promise, status, value, reactions) {\n    if (promise.status_ !== 0)\n      return;\n    promiseEnqueue(value, reactions);\n    promiseSet(promise, status, value);\n  }\n  function promiseEnqueue(value, tasks) {\n    async((function() {\n      for (var i = 0; i < tasks.length; i += 2) {\n        promiseHandle(value, tasks[i], tasks[i + 1]);\n      }\n    }));\n  }\n  function promiseHandle(value, handler, deferred) {\n    try {\n      var result = handler(value);\n      if (result === deferred.promise)\n        throw new TypeError;\n      else if (isPromise(result))\n        chain(result, deferred.resolve, deferred.reject);\n      else\n        deferred.resolve(result);\n    } catch (e) {\n      try {\n        deferred.reject(e);\n      } catch (e) {}\n    }\n  }\n  var thenableSymbol = '@@thenable';\n  function isObject(x) {\n    return x && (typeof x === 'object' || typeof x === 'function');\n  }\n  function promiseCoerce(constructor, x) {\n    if (!isPromise(x) && isObject(x)) {\n      var then;\n      try {\n        then = x.then;\n      } catch (r) {\n        var promise = $PromiseReject.call(constructor, r);\n        x[thenableSymbol] = promise;\n        return promise;\n      }\n      if (typeof then === 'function') {\n        var p = x[thenableSymbol];\n        if (p) {\n          return p;\n        } else {\n          var deferred = getDeferred(constructor);\n          x[thenableSymbol] = deferred.promise;\n          try {\n            then.call(x, deferred.resolve, deferred.reject);\n          } catch (r) {\n            deferred.reject(r);\n          }\n          return deferred.promise;\n        }\n      }\n    }\n    return x;\n  }\n  function polyfillPromise(global) {\n    if (!global.Promise)\n      global.Promise = Promise;\n  }\n  registerPolyfill(polyfillPromise);\n  return {\n    get Promise() {\n      return Promise;\n    },\n    get polyfillPromise() {\n      return polyfillPromise;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Promise\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/StringIterator\", [], function() {\n  \"use strict\";\n  var $__2;\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/StringIterator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/StringIterator\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      createIteratorResultObject = $__0.createIteratorResultObject,\n      isObject = $__0.isObject;\n  var toProperty = $traceurRuntime.toProperty;\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n  var iteratedString = Symbol('iteratedString');\n  var stringIteratorNextIndex = Symbol('stringIteratorNextIndex');\n  var StringIterator = function StringIterator() {};\n  ($traceurRuntime.createClass)(StringIterator, ($__2 = {}, Object.defineProperty($__2, \"next\", {\n    value: function() {\n      var o = this;\n      if (!isObject(o) || !hasOwnProperty.call(o, iteratedString)) {\n        throw new TypeError('this must be a StringIterator object');\n      }\n      var s = o[toProperty(iteratedString)];\n      if (s === undefined) {\n        return createIteratorResultObject(undefined, true);\n      }\n      var position = o[toProperty(stringIteratorNextIndex)];\n      var len = s.length;\n      if (position >= len) {\n        o[toProperty(iteratedString)] = undefined;\n        return createIteratorResultObject(undefined, true);\n      }\n      var first = s.charCodeAt(position);\n      var resultString;\n      if (first < 0xD800 || first > 0xDBFF || position + 1 === len) {\n        resultString = String.fromCharCode(first);\n      } else {\n        var second = s.charCodeAt(position + 1);\n        if (second < 0xDC00 || second > 0xDFFF) {\n          resultString = String.fromCharCode(first);\n        } else {\n          resultString = String.fromCharCode(first) + String.fromCharCode(second);\n        }\n      }\n      o[toProperty(stringIteratorNextIndex)] = position + resultString.length;\n      return createIteratorResultObject(resultString, false);\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__2, Symbol.iterator, {\n    value: function() {\n      return this;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), $__2), {});\n  function createStringIterator(string) {\n    var s = String(string);\n    var iterator = Object.create(StringIterator.prototype);\n    iterator[toProperty(iteratedString)] = s;\n    iterator[toProperty(stringIteratorNextIndex)] = 0;\n    return iterator;\n  }\n  return {get createStringIterator() {\n      return createStringIterator;\n    }};\n});\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/String\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/String\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/String\", path);\n  }\n  var createStringIterator = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/StringIterator\").createStringIterator;\n  var $__1 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      maybeAddFunctions = $__1.maybeAddFunctions,\n      maybeAddIterator = $__1.maybeAddIterator,\n      registerPolyfill = $__1.registerPolyfill;\n  var $toString = Object.prototype.toString;\n  var $indexOf = String.prototype.indexOf;\n  var $lastIndexOf = String.prototype.lastIndexOf;\n  function startsWith(search) {\n    var string = String(this);\n    if (this == null || $toString.call(search) == '[object RegExp]') {\n      throw TypeError();\n    }\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var position = arguments.length > 1 ? arguments[1] : undefined;\n    var pos = position ? Number(position) : 0;\n    if (isNaN(pos)) {\n      pos = 0;\n    }\n    var start = Math.min(Math.max(pos, 0), stringLength);\n    return $indexOf.call(string, searchString, pos) == start;\n  }\n  function endsWith(search) {\n    var string = String(this);\n    if (this == null || $toString.call(search) == '[object RegExp]') {\n      throw TypeError();\n    }\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var pos = stringLength;\n    if (arguments.length > 1) {\n      var position = arguments[1];\n      if (position !== undefined) {\n        pos = position ? Number(position) : 0;\n        if (isNaN(pos)) {\n          pos = 0;\n        }\n      }\n    }\n    var end = Math.min(Math.max(pos, 0), stringLength);\n    var start = end - searchLength;\n    if (start < 0) {\n      return false;\n    }\n    return $lastIndexOf.call(string, searchString, start) == start;\n  }\n  function contains(search) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var stringLength = string.length;\n    var searchString = String(search);\n    var searchLength = searchString.length;\n    var position = arguments.length > 1 ? arguments[1] : undefined;\n    var pos = position ? Number(position) : 0;\n    if (isNaN(pos)) {\n      pos = 0;\n    }\n    var start = Math.min(Math.max(pos, 0), stringLength);\n    return $indexOf.call(string, searchString, pos) != -1;\n  }\n  function repeat(count) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var n = count ? Number(count) : 0;\n    if (isNaN(n)) {\n      n = 0;\n    }\n    if (n < 0 || n == Infinity) {\n      throw RangeError();\n    }\n    if (n == 0) {\n      return '';\n    }\n    var result = '';\n    while (n--) {\n      result += string;\n    }\n    return result;\n  }\n  function codePointAt(position) {\n    if (this == null) {\n      throw TypeError();\n    }\n    var string = String(this);\n    var size = string.length;\n    var index = position ? Number(position) : 0;\n    if (isNaN(index)) {\n      index = 0;\n    }\n    if (index < 0 || index >= size) {\n      return undefined;\n    }\n    var first = string.charCodeAt(index);\n    var second;\n    if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n      second = string.charCodeAt(index + 1);\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      }\n    }\n    return first;\n  }\n  function raw(callsite) {\n    var raw = callsite.raw;\n    var len = raw.length >>> 0;\n    if (len === 0)\n      return '';\n    var s = '';\n    var i = 0;\n    while (true) {\n      s += raw[i];\n      if (i + 1 === len)\n        return s;\n      s += arguments[++i];\n    }\n  }\n  function fromCodePoint() {\n    var codeUnits = [];\n    var floor = Math.floor;\n    var highSurrogate;\n    var lowSurrogate;\n    var index = -1;\n    var length = arguments.length;\n    if (!length) {\n      return '';\n    }\n    while (++index < length) {\n      var codePoint = Number(arguments[index]);\n      if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) {\n        throw RangeError('Invalid code point: ' + codePoint);\n      }\n      if (codePoint <= 0xFFFF) {\n        codeUnits.push(codePoint);\n      } else {\n        codePoint -= 0x10000;\n        highSurrogate = (codePoint >> 10) + 0xD800;\n        lowSurrogate = (codePoint % 0x400) + 0xDC00;\n        codeUnits.push(highSurrogate, lowSurrogate);\n      }\n    }\n    return String.fromCharCode.apply(null, codeUnits);\n  }\n  function stringPrototypeIterator() {\n    var o = $traceurRuntime.checkObjectCoercible(this);\n    var s = String(o);\n    return createStringIterator(s);\n  }\n  function polyfillString(global) {\n    var String = global.String;\n    maybeAddFunctions(String.prototype, ['codePointAt', codePointAt, 'contains', contains, 'endsWith', endsWith, 'startsWith', startsWith, 'repeat', repeat]);\n    maybeAddFunctions(String, ['fromCodePoint', fromCodePoint, 'raw', raw]);\n    maybeAddIterator(String.prototype, stringPrototypeIterator, Symbol);\n  }\n  registerPolyfill(polyfillString);\n  return {\n    get startsWith() {\n      return startsWith;\n    },\n    get endsWith() {\n      return endsWith;\n    },\n    get contains() {\n      return contains;\n    },\n    get repeat() {\n      return repeat;\n    },\n    get codePointAt() {\n      return codePointAt;\n    },\n    get raw() {\n      return raw;\n    },\n    get fromCodePoint() {\n      return fromCodePoint;\n    },\n    get stringPrototypeIterator() {\n      return stringPrototypeIterator;\n    },\n    get polyfillString() {\n      return polyfillString;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/String\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/ArrayIterator\", [], function() {\n  \"use strict\";\n  var $__2;\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/ArrayIterator\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/ArrayIterator\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      toObject = $__0.toObject,\n      toUint32 = $__0.toUint32,\n      createIteratorResultObject = $__0.createIteratorResultObject;\n  var ARRAY_ITERATOR_KIND_KEYS = 1;\n  var ARRAY_ITERATOR_KIND_VALUES = 2;\n  var ARRAY_ITERATOR_KIND_ENTRIES = 3;\n  var ArrayIterator = function ArrayIterator() {};\n  ($traceurRuntime.createClass)(ArrayIterator, ($__2 = {}, Object.defineProperty($__2, \"next\", {\n    value: function() {\n      var iterator = toObject(this);\n      var array = iterator.iteratorObject_;\n      if (!array) {\n        throw new TypeError('Object is not an ArrayIterator');\n      }\n      var index = iterator.arrayIteratorNextIndex_;\n      var itemKind = iterator.arrayIterationKind_;\n      var length = toUint32(array.length);\n      if (index >= length) {\n        iterator.arrayIteratorNextIndex_ = Infinity;\n        return createIteratorResultObject(undefined, true);\n      }\n      iterator.arrayIteratorNextIndex_ = index + 1;\n      if (itemKind == ARRAY_ITERATOR_KIND_VALUES)\n        return createIteratorResultObject(array[index], false);\n      if (itemKind == ARRAY_ITERATOR_KIND_ENTRIES)\n        return createIteratorResultObject([index, array[index]], false);\n      return createIteratorResultObject(index, false);\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), Object.defineProperty($__2, Symbol.iterator, {\n    value: function() {\n      return this;\n    },\n    configurable: true,\n    enumerable: true,\n    writable: true\n  }), $__2), {});\n  function createArrayIterator(array, kind) {\n    var object = toObject(array);\n    var iterator = new ArrayIterator;\n    iterator.iteratorObject_ = object;\n    iterator.arrayIteratorNextIndex_ = 0;\n    iterator.arrayIterationKind_ = kind;\n    return iterator;\n  }\n  function entries() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_ENTRIES);\n  }\n  function keys() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_KEYS);\n  }\n  function values() {\n    return createArrayIterator(this, ARRAY_ITERATOR_KIND_VALUES);\n  }\n  return {\n    get entries() {\n      return entries;\n    },\n    get keys() {\n      return keys;\n    },\n    get values() {\n      return values;\n    }\n  };\n});\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Array\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Array\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Array\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/ArrayIterator\"),\n      entries = $__0.entries,\n      keys = $__0.keys,\n      values = $__0.values;\n  var $__1 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      checkIterable = $__1.checkIterable,\n      isCallable = $__1.isCallable,\n      isConstructor = $__1.isConstructor,\n      maybeAddFunctions = $__1.maybeAddFunctions,\n      maybeAddIterator = $__1.maybeAddIterator,\n      registerPolyfill = $__1.registerPolyfill,\n      toInteger = $__1.toInteger,\n      toLength = $__1.toLength,\n      toObject = $__1.toObject;\n  function from(arrLike) {\n    var mapFn = arguments[1];\n    var thisArg = arguments[2];\n    var C = this;\n    var items = toObject(arrLike);\n    var mapping = mapFn !== undefined;\n    var k = 0;\n    var arr,\n        len;\n    if (mapping && !isCallable(mapFn)) {\n      throw TypeError();\n    }\n    if (checkIterable(items)) {\n      arr = isConstructor(C) ? new C() : [];\n      for (var $__2 = items[$traceurRuntime.toProperty(Symbol.iterator)](),\n          $__3; !($__3 = $__2.next()).done; ) {\n        var item = $__3.value;\n        {\n          if (mapping) {\n            arr[k] = mapFn.call(thisArg, item, k);\n          } else {\n            arr[k] = item;\n          }\n          k++;\n        }\n      }\n      arr.length = k;\n      return arr;\n    }\n    len = toLength(items.length);\n    arr = isConstructor(C) ? new C(len) : new Array(len);\n    for (; k < len; k++) {\n      if (mapping) {\n        arr[k] = typeof thisArg === 'undefined' ? mapFn(items[k], k) : mapFn.call(thisArg, items[k], k);\n      } else {\n        arr[k] = items[k];\n      }\n    }\n    arr.length = len;\n    return arr;\n  }\n  function of() {\n    for (var items = [],\n        $__4 = 0; $__4 < arguments.length; $__4++)\n      items[$__4] = arguments[$__4];\n    var C = this;\n    var len = items.length;\n    var arr = isConstructor(C) ? new C(len) : new Array(len);\n    for (var k = 0; k < len; k++) {\n      arr[k] = items[k];\n    }\n    arr.length = len;\n    return arr;\n  }\n  function fill(value) {\n    var start = arguments[1] !== (void 0) ? arguments[1] : 0;\n    var end = arguments[2];\n    var object = toObject(this);\n    var len = toLength(object.length);\n    var fillStart = toInteger(start);\n    var fillEnd = end !== undefined ? toInteger(end) : len;\n    fillStart = fillStart < 0 ? Math.max(len + fillStart, 0) : Math.min(fillStart, len);\n    fillEnd = fillEnd < 0 ? Math.max(len + fillEnd, 0) : Math.min(fillEnd, len);\n    while (fillStart < fillEnd) {\n      object[fillStart] = value;\n      fillStart++;\n    }\n    return object;\n  }\n  function find(predicate) {\n    var thisArg = arguments[1];\n    return findHelper(this, predicate, thisArg);\n  }\n  function findIndex(predicate) {\n    var thisArg = arguments[1];\n    return findHelper(this, predicate, thisArg, true);\n  }\n  function findHelper(self, predicate) {\n    var thisArg = arguments[2];\n    var returnIndex = arguments[3] !== (void 0) ? arguments[3] : false;\n    var object = toObject(self);\n    var len = toLength(object.length);\n    if (!isCallable(predicate)) {\n      throw TypeError();\n    }\n    for (var i = 0; i < len; i++) {\n      var value = object[i];\n      if (predicate.call(thisArg, value, i, object)) {\n        return returnIndex ? i : value;\n      }\n    }\n    return returnIndex ? -1 : undefined;\n  }\n  function polyfillArray(global) {\n    var $__5 = global,\n        Array = $__5.Array,\n        Object = $__5.Object,\n        Symbol = $__5.Symbol;\n    maybeAddFunctions(Array.prototype, ['entries', entries, 'keys', keys, 'values', values, 'fill', fill, 'find', find, 'findIndex', findIndex]);\n    maybeAddFunctions(Array, ['from', from, 'of', of]);\n    maybeAddIterator(Array.prototype, values, Symbol);\n    maybeAddIterator(Object.getPrototypeOf([].values()), function() {\n      return this;\n    }, Symbol);\n  }\n  registerPolyfill(polyfillArray);\n  return {\n    get from() {\n      return from;\n    },\n    get of() {\n      return of;\n    },\n    get fill() {\n      return fill;\n    },\n    get find() {\n      return find;\n    },\n    get findIndex() {\n      return findIndex;\n    },\n    get polyfillArray() {\n      return polyfillArray;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Array\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Object\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Object\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Object\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      maybeAddFunctions = $__0.maybeAddFunctions,\n      registerPolyfill = $__0.registerPolyfill;\n  var $__1 = $traceurRuntime,\n      defineProperty = $__1.defineProperty,\n      getOwnPropertyDescriptor = $__1.getOwnPropertyDescriptor,\n      getOwnPropertyNames = $__1.getOwnPropertyNames,\n      isPrivateName = $__1.isPrivateName,\n      keys = $__1.keys;\n  function is(left, right) {\n    if (left === right)\n      return left !== 0 || 1 / left === 1 / right;\n    return left !== left && right !== right;\n  }\n  function assign(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      var props = source == null ? [] : keys(source);\n      var p,\n          length = props.length;\n      for (p = 0; p < length; p++) {\n        var name = props[p];\n        if (isPrivateName(name))\n          continue;\n        target[name] = source[name];\n      }\n    }\n    return target;\n  }\n  function mixin(target, source) {\n    var props = getOwnPropertyNames(source);\n    var p,\n        descriptor,\n        length = props.length;\n    for (p = 0; p < length; p++) {\n      var name = props[p];\n      if (isPrivateName(name))\n        continue;\n      descriptor = getOwnPropertyDescriptor(source, props[p]);\n      defineProperty(target, props[p], descriptor);\n    }\n    return target;\n  }\n  function polyfillObject(global) {\n    var Object = global.Object;\n    maybeAddFunctions(Object, ['assign', assign, 'is', is, 'mixin', mixin]);\n  }\n  registerPolyfill(polyfillObject);\n  return {\n    get is() {\n      return is;\n    },\n    get assign() {\n      return assign;\n    },\n    get mixin() {\n      return mixin;\n    },\n    get polyfillObject() {\n      return polyfillObject;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Object\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/Number\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/Number\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/Number\", path);\n  }\n  var $__0 = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\"),\n      isNumber = $__0.isNumber,\n      maybeAddConsts = $__0.maybeAddConsts,\n      maybeAddFunctions = $__0.maybeAddFunctions,\n      registerPolyfill = $__0.registerPolyfill,\n      toInteger = $__0.toInteger;\n  var $abs = Math.abs;\n  var $isFinite = isFinite;\n  var $isNaN = isNaN;\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n  var MIN_SAFE_INTEGER = -Math.pow(2, 53) + 1;\n  var EPSILON = Math.pow(2, -52);\n  function NumberIsFinite(number) {\n    return isNumber(number) && $isFinite(number);\n  }\n  ;\n  function isInteger(number) {\n    return NumberIsFinite(number) && toInteger(number) === number;\n  }\n  function NumberIsNaN(number) {\n    return isNumber(number) && $isNaN(number);\n  }\n  ;\n  function isSafeInteger(number) {\n    if (NumberIsFinite(number)) {\n      var integral = toInteger(number);\n      if (integral === number)\n        return $abs(integral) <= MAX_SAFE_INTEGER;\n    }\n    return false;\n  }\n  function polyfillNumber(global) {\n    var Number = global.Number;\n    maybeAddConsts(Number, ['MAX_SAFE_INTEGER', MAX_SAFE_INTEGER, 'MIN_SAFE_INTEGER', MIN_SAFE_INTEGER, 'EPSILON', EPSILON]);\n    maybeAddFunctions(Number, ['isFinite', NumberIsFinite, 'isInteger', isInteger, 'isNaN', NumberIsNaN, 'isSafeInteger', isSafeInteger]);\n  }\n  registerPolyfill(polyfillNumber);\n  return {\n    get MAX_SAFE_INTEGER() {\n      return MAX_SAFE_INTEGER;\n    },\n    get MIN_SAFE_INTEGER() {\n      return MIN_SAFE_INTEGER;\n    },\n    get EPSILON() {\n      return EPSILON;\n    },\n    get isFinite() {\n      return NumberIsFinite;\n    },\n    get isInteger() {\n      return isInteger;\n    },\n    get isNaN() {\n      return NumberIsNaN;\n    },\n    get isSafeInteger() {\n      return isSafeInteger;\n    },\n    get polyfillNumber() {\n      return polyfillNumber;\n    }\n  };\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/Number\" + '');\nSystem.register(\"traceur-runtime@0.0.74/src/runtime/polyfills/polyfills\", [], function() {\n  \"use strict\";\n  var __moduleName = \"traceur-runtime@0.0.74/src/runtime/polyfills/polyfills\";\n  function require(path) {\n    return $traceurRuntime.require(\"traceur-runtime@0.0.74/src/runtime/polyfills/polyfills\", path);\n  }\n  var polyfillAll = System.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/utils\").polyfillAll;\n  polyfillAll(this);\n  var setupGlobals = $traceurRuntime.setupGlobals;\n  $traceurRuntime.setupGlobals = function(global) {\n    setupGlobals(global);\n    polyfillAll(global);\n  };\n  return {};\n});\nSystem.get(\"traceur-runtime@0.0.74/src/runtime/polyfills/polyfills\" + '');\n"
  },
  {
    "path": "client/index.html",
    "content": "<!doctype html>\n<!--[if IE 9]>         <html lang=\"en-gb\" class=\"lt-ie10\"> <![endif]-->\n<!--[if gt IE 9]><!--> <html lang=\"en-gb\"> <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  <title>ES6 + AngularJS</title>\n  <base href=\"/\">\n  <link rel=\"stylesheet\" href=\"/main.css\">\n</head>\n<body data-main-app ng-cloak>\n  <!--[if lt IE 10]>\n    <div class=\"u-padding-Am deprecation-warning\">\n      <h1>You are using an outdated browser.</h1>\n      <p>Please <a href=\"http://whatbrowser.org/\">upgrade your browser</a> to improve your experience.</p>\n    </div>\n  <![endif]-->\n  <noscript>\n    <div class=\"u-padding-Am deprecation-warning\">\n      <h1>Please enable Javascript</h1>\n      <p>GoCardless requires your browser to have Javascript enabled.\n      <a href=\"http://enable-javascript.com\" target=\"_blank\">Learn more</a></p>\n    </div>\n  </noscript>\n\n  <ui-view name=\"site-header\"></ui-view>\n  <ui-view></ui-view>\n\n  <script src=\"/components/traceur-runtime/traceur-runtime.js\"></script>\n  <script src=\"/components/es6-module-loader/dist/es6-module-loader.src.js\"></script>\n  <script src=\"/components/system.js/dist/system.src.js\"></script>\n\n  <script src=\"/loader.config.js\"></script>\n  <script>\n    System.baseURL = '/';\n    System.import('app/bootstrap');\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "client/loader.config.js",
    "content": "System.config({\n  meta: {\n    'components/angular/angular': { format: 'global', exports: 'angular' },\n    'components/angular-mocks/angular-mocks': { deps: ['angular'] },\n    'components/angular-touch/angular-touch': { deps: ['angular'] },\n    'components/angular-animate/angular-animate': { deps: ['angular'] },\n    'components/angular-aria/angular-aria/angular-aria': { deps: ['angular'] },\n    'components/angular-messages/angular-messages': { deps: ['angular'] },\n    'components/angular-i18n-en-gb/angular-i18n/angular-locale_en-gb': { deps: ['angular'] },\n    'components/angular-ui-router/angular-ui-router/release/angular-ui-router': { deps: ['angular'] },\n  },\n  map: {\n    'app': 'app-compiled',\n    'text': 'components/plugin-text/text',\n    'json': 'components/plugin-json/json',\n    'lodash': 'components/lodash/dist/lodash',\n    'angular': 'components/angular/angular',\n    'angular-mock': 'components/angular-mocks/angular-mocks',\n    'angular-touch': 'components/angular-touch/angular-touch',\n    'angular-animate': 'components/angular-animate/angular-animate',\n    'angular-aria': 'components/angular-aria/angular-aria',\n    'angular-messages': 'components/angular-messages/angular-messages',\n    'angular-i18n-en-gb': 'components/angular-i18n/angular-locale_en-gb',\n    'angular-ui-router': 'components/angular-ui-router/release/angular-ui-router',\n    'rtts-assert': 'components/assert/src/assert',\n  }\n});\n"
  },
  {
    "path": "config/file-name-to-module-name.js",
    "content": "function fileNameToModuleName(filePath) {\n  return filePath.replace(/\\\\/g, '/')\n    // module name should be relative to `client` folder\n    .replace(/.*\\/base\\//, '')\n    .replace(/.*\\/client\\//, '')\n    .replace(/.*\\/tools\\//, '')\n    // module name should not include `src`, `test`, `lib`\n    .replace(/\\/src\\//, '/')\n    .replace(/\\/lib\\//, '/')\n    // module name should not have a suffix\n    .replace(/\\.\\w*$/, '');\n}\nif (typeof module !== 'undefined') {\n  module.exports = fileNameToModuleName;\n}\n"
  },
  {
    "path": "config/karma-spec-loader.config.js",
    "content": "'use strict';\n\n// make it async\nwindow.__karma__.loaded = function noop() {};\n\n// Karma serves files here\nSystem.baseURL = '/base/';\nSystem.map.app = 'app';\n\n// use \"app\" not \"app-compiled\"\ndelete System.map.app;\n\nvar TEST_REGEXP = /[\\._]spec\\.js$/;\nvar IGNORE_PATH_REGEXP = /^components\\/|app-compiled\\//;\n\nPromise.all(\n  Object.keys(window.__karma__.files) // All files served by Karma.\n  .filter(function onlySpecFiles(path) {\n    return TEST_REGEXP.test(path);\n  })\n  .map(window.fileNameToModuleName) // Normalize paths to module names.\n  .filter(function excludeComponentSpecFiles(path) {\n    return !IGNORE_PATH_REGEXP.test(path);\n  })\n  .map(function(path) {\n    return System.import(path);\n  })\n).then(function() {\n  window.__karma__.start();\n}, function(error) {\n  console.error(error.stack || error);\n  window.__karma__.start();\n});\n"
  },
  {
    "path": "config/karma.config.js",
    "content": "'use strict';\n\nvar traceurOptions = require('./traceur.config');\n\ntraceurOptions.sourceMaps = true;\ntraceurOptions.modules = 'instantiate';\ntraceurOptions.moduleName = null;\n\nmodule.exports = function(config) {\n  config.set({\n    basePath: './client',\n    frameworks: ['jasmine', 'traceur'],\n    browsers: ['Chrome'],\n    reporters: ['progress'],\n    files: [\n      'components/es6-module-loader/dist/es6-module-loader.src.js',\n      'components/system.js/dist/system.src.js',\n      'loader.config.js',\n\n      // Serve but don't create script tags for any files being `import`ed\n      { pattern: '**/*.js', included: false },\n      { pattern: '**/*.html', included: false },\n      { pattern: '**/*.json', included: false },\n\n      '../config/traceur-runtime-patch.js',\n      '../config/file-name-to-module-name.js',\n\n      // Load and initialize all spec files using SystemJS\n      '../config/karma-spec-loader.config.js',\n    ],\n    exclude: [\n      '*-compiled/**',\n      'assets/**',\n    ],\n    preprocessors: {\n      'app/**/*.js': ['traceur'],\n    },\n    traceurPreprocessor: {\n      options: traceurOptions\n    },\n  });\n};\n"
  },
  {
    "path": "config/protractor.config.js",
    "content": "'use strict';\n\nvar options = {\n  port: process.env.HTTP_PORT || '8000'\n};\n\nfunction disableNgAnimate() {\n  angular.module('disableNgAnimate', []).run([\n    '$animate',\n    function($animate) {\n      $animate.enabled(false);\n    }\n  ]);\n}\n\nexports.config = {\n  onPrepare: function onPrepare() {\n    browser.addMockModule('disableNgAnimate', disableNgAnimate);\n  },\n  directConnect: true,\n  suites: {\n    full: 'client/app/**/*.e2e.js'\n  },\n  capabilities: {\n    browserName: 'chrome',\n    shardTestFiles: true,\n    maxInstances: 2,\n    version: 'ANY'\n  },\n  baseUrl: 'http://localhost:' + options.port,\n  rootElement: '[data-main-app]',\n  framework: 'jasmine',\n  jasmineNodeOpts: {\n    onComplete: null,\n    realtimeFailure: true,\n    showTiming: true,\n    isVerbose: true,\n    showColors: true,\n    includeStackTrace: true,\n    defaultTimeoutInterval: 30000\n  }\n};\n"
  },
  {
    "path": "config/traceur-runtime-patch.js",
    "content": "(function(type) {\n  Object.keys(type).forEach(function(name) {\n    type[name].__assertName = name;\n  });\n})(window.$traceurRuntime.type);\n\n"
  },
  {
    "path": "config/traceur.config.js",
    "content": "module.exports = {\n  strict: false,\n  types: true,\n  typeAssersions: true,\n  typeAssertionModule: 'rtts-assert',\n  annotations: true,\n  memberVariables: true,\n  // freeVariableChecker: true,\n  debug: true\n};\n"
  },
  {
    "path": "npm-shrinkwrap.json",
    "content": "{\n  \"name\": \"es6-angular\",\n  \"version\": \"0.0.1-pre\",\n  \"dependencies\": {\n    \"assetgraph\": {\n      \"version\": \"1.13.1\",\n      \"from\": \"assetgraph@>=1.12.1 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/assetgraph/-/assetgraph-1.13.1.tgz\",\n      \"dependencies\": {\n        \"accord\": {\n          \"version\": \"0.11.0\",\n          \"from\": \"accord@0.11.0\",\n          \"resolved\": \"https://registry.npmjs.org/accord/-/accord-0.11.0.tgz\",\n          \"dependencies\": {\n            \"fobject\": {\n              \"version\": \"0.0.0\",\n              \"from\": \"fobject@0.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/fobject/-/fobject-0.0.0.tgz\"\n            },\n            \"indx\": {\n              \"version\": \"0.1.2\",\n              \"from\": \"indx@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/indx/-/indx-0.1.2.tgz\",\n              \"dependencies\": {\n                \"coffee-script\": {\n                  \"version\": \"1.7.1\",\n                  \"from\": \"coffee-script@>=1.7.0 <1.8.0\",\n                  \"resolved\": \"https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz\"\n                },\n                \"colors\": {\n                  \"version\": \"0.6.2\",\n                  \"from\": \"colors@>=0.6.0 <0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/colors/-/colors-0.6.2.tgz\"\n                }\n              }\n            },\n            \"lodash\": {\n              \"version\": \"2.4.1\",\n              \"from\": \"lodash@>=2.4.1 <2.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n            },\n            \"resolve\": {\n              \"version\": \"0.7.4\",\n              \"from\": \"resolve@>=0.7.0 <0.8.0\",\n              \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz\"\n            },\n            \"uglify-js\": {\n              \"version\": \"2.4.15\",\n              \"from\": \"uglify-js@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.15.tgz\",\n              \"dependencies\": {\n                \"source-map\": {\n                  \"version\": \"0.1.34\",\n                  \"from\": \"source-map@0.1.34\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                },\n                \"optimist\": {\n                  \"version\": \"0.3.7\",\n                  \"from\": \"optimist@>=0.3.5 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n                  \"dependencies\": {\n                    \"wordwrap\": {\n                      \"version\": \"0.0.2\",\n                      \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                    }\n                  }\n                },\n                \"uglify-to-browserify\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n                }\n              }\n            },\n            \"when\": {\n              \"version\": \"3.6.3\",\n              \"from\": \"when@>=3.0.0 <4.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/when/-/when-3.6.3.tgz\"\n            }\n          }\n        },\n        \"async\": {\n          \"version\": \"0.2.9\",\n          \"from\": \"async@0.2.9\",\n          \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.9.tgz\"\n        },\n        \"chalk\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"chalk@0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz\",\n          \"dependencies\": {\n            \"has-color\": {\n              \"version\": \"0.1.7\",\n              \"from\": \"has-color@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz\"\n            },\n            \"ansi-styles\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"ansi-styles@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz\"\n            },\n            \"strip-ansi\": {\n              \"version\": \"0.1.1\",\n              \"from\": \"strip-ansi@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz\"\n            }\n          }\n        },\n        \"createerror\": {\n          \"version\": \"0.4.1\",\n          \"from\": \"createerror@0.4.1\",\n          \"resolved\": \"https://registry.npmjs.org/createerror/-/createerror-0.4.1.tgz\"\n        },\n        \"cssmin\": {\n          \"version\": \"0.3.1\",\n          \"from\": \"cssmin@0.3.1\",\n          \"resolved\": \"https://registry.npmjs.org/cssmin/-/cssmin-0.3.1.tgz\"\n        },\n        \"cssom-papandreou\": {\n          \"version\": \"0.2.4-patch6\",\n          \"from\": \"cssom-papandreou@0.2.4-patch6\",\n          \"resolved\": \"https://registry.npmjs.org/cssom-papandreou/-/cssom-papandreou-0.2.4-patch6.tgz\"\n        },\n        \"deep-extend\": {\n          \"version\": \"0.2.11\",\n          \"from\": \"deep-extend@0.2.11\",\n          \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n        },\n        \"glob\": {\n          \"version\": \"4.2.1\",\n          \"from\": \"glob@4.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.2.1.tgz\",\n          \"dependencies\": {\n            \"inflight\": {\n              \"version\": \"1.0.4\",\n              \"from\": \"inflight@>=1.0.4 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n              \"dependencies\": {\n                \"wrappy\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                }\n              }\n            },\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            },\n            \"minimatch\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"minimatch@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz\",\n              \"dependencies\": {\n                \"lru-cache\": {\n                  \"version\": \"2.5.0\",\n                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                },\n                \"sigmund\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                }\n              }\n            },\n            \"once\": {\n              \"version\": \"1.3.1\",\n              \"from\": \"once@>=1.3.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n              \"dependencies\": {\n                \"wrappy\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"html-minifier\": {\n          \"version\": \"0.6.8\",\n          \"from\": \"html-minifier@0.6.8\",\n          \"resolved\": \"https://registry.npmjs.org/html-minifier/-/html-minifier-0.6.8.tgz\",\n          \"dependencies\": {\n            \"change-case\": {\n              \"version\": \"2.1.5\",\n              \"from\": \"change-case@>=2.1.0 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/change-case/-/change-case-2.1.5.tgz\",\n              \"dependencies\": {\n                \"camel-case\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"camel-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/camel-case/-/camel-case-1.0.2.tgz\"\n                },\n                \"constant-case\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"constant-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/constant-case/-/constant-case-1.0.0.tgz\"\n                },\n                \"dot-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"dot-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/dot-case/-/dot-case-1.0.1.tgz\"\n                },\n                \"is-lower-case\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"is-lower-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.0.0.tgz\"\n                },\n                \"is-upper-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"is-upper-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.0.1.tgz\"\n                },\n                \"lower-case\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"lower-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lower-case/-/lower-case-1.0.2.tgz\"\n                },\n                \"param-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"param-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/param-case/-/param-case-1.0.1.tgz\"\n                },\n                \"pascal-case\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"pascal-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/pascal-case/-/pascal-case-1.0.0.tgz\"\n                },\n                \"path-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"path-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/path-case/-/path-case-1.0.1.tgz\"\n                },\n                \"sentence-case\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"sentence-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.0.tgz\"\n                },\n                \"snake-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"snake-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/snake-case/-/snake-case-1.0.1.tgz\"\n                },\n                \"swap-case\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"swap-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/swap-case/-/swap-case-1.0.2.tgz\"\n                },\n                \"title-case\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"title-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/title-case/-/title-case-1.0.1.tgz\"\n                },\n                \"upper-case\": {\n                  \"version\": \"1.0.3\",\n                  \"from\": \"upper-case@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/upper-case/-/upper-case-1.0.3.tgz\"\n                },\n                \"upper-case-first\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"upper-case-first@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.0.1.tgz\"\n                }\n              }\n            },\n            \"clean-css\": {\n              \"version\": \"2.2.20\",\n              \"from\": \"clean-css@>=2.2.0 <2.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/clean-css/-/clean-css-2.2.20.tgz\",\n              \"dependencies\": {\n                \"commander\": {\n                  \"version\": \"2.2.0\",\n                  \"from\": \"commander@>=2.2.0 <2.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.2.0.tgz\"\n                }\n              }\n            },\n            \"cli\": {\n              \"version\": \"0.6.5\",\n              \"from\": \"cli@>=0.6.0 <0.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/cli/-/cli-0.6.5.tgz\",\n              \"dependencies\": {\n                \"glob\": {\n                  \"version\": \"3.2.11\",\n                  \"from\": \"glob@>=3.2.1 <3.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n                  \"dependencies\": {\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    },\n                    \"minimatch\": {\n                      \"version\": \"0.3.0\",\n                      \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                      \"dependencies\": {\n                        \"lru-cache\": {\n                          \"version\": \"2.5.0\",\n                          \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                        },\n                        \"sigmund\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"exit\": {\n                  \"version\": \"0.1.2\",\n                  \"from\": \"exit@0.1.2\",\n                  \"resolved\": \"https://registry.npmjs.org/exit/-/exit-0.1.2.tgz\"\n                }\n              }\n            },\n            \"uglify-js\": {\n              \"version\": \"2.4.15\",\n              \"from\": \"uglify-js@>=2.4.0 <2.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.15.tgz\",\n              \"dependencies\": {\n                \"source-map\": {\n                  \"version\": \"0.1.34\",\n                  \"from\": \"source-map@0.1.34\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                },\n                \"optimist\": {\n                  \"version\": \"0.3.7\",\n                  \"from\": \"optimist@>=0.3.5 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n                  \"dependencies\": {\n                    \"wordwrap\": {\n                      \"version\": \"0.0.2\",\n                      \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                    }\n                  }\n                },\n                \"uglify-to-browserify\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n                }\n              }\n            },\n            \"relateurl\": {\n              \"version\": \"0.2.5\",\n              \"from\": \"relateurl@>=0.2.0 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/relateurl/-/relateurl-0.2.5.tgz\"\n            }\n          }\n        },\n        \"httperrors\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"httperrors@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/httperrors/-/httperrors-0.2.0.tgz\",\n          \"dependencies\": {\n            \"createerror\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"createerror@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/createerror/-/createerror-0.0.1.tgz\",\n              \"dependencies\": {\n                \"xtend\": {\n                  \"version\": \"1.0.3\",\n                  \"from\": \"xtend@1.0.3\",\n                  \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"imageinfo\": {\n          \"version\": \"1.0.4\",\n          \"from\": \"imageinfo@1.0.4\",\n          \"resolved\": \"https://registry.npmjs.org/imageinfo/-/imageinfo-1.0.4.tgz\"\n        },\n        \"jsdom\": {\n          \"version\": \"0.11.0\",\n          \"from\": \"jsdom@0.11.0\",\n          \"resolved\": \"https://registry.npmjs.org/jsdom/-/jsdom-0.11.0.tgz\",\n          \"dependencies\": {\n            \"htmlparser2\": {\n              \"version\": \"3.8.2\",\n              \"from\": \"htmlparser2@>=3.1.5 <4.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz\",\n              \"dependencies\": {\n                \"domhandler\": {\n                  \"version\": \"2.3.0\",\n                  \"from\": \"domhandler@>=2.3.0 <2.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz\"\n                },\n                \"domutils\": {\n                  \"version\": \"1.5.0\",\n                  \"from\": \"domutils@>=1.5.0 <1.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domutils/-/domutils-1.5.0.tgz\"\n                },\n                \"domelementtype\": {\n                  \"version\": \"1.1.3\",\n                  \"from\": \"domelementtype@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz\"\n                },\n                \"readable-stream\": {\n                  \"version\": \"1.1.13\",\n                  \"from\": \"readable-stream@>=1.1.0 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"entities\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"entities@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/entities/-/entities-1.0.0.tgz\"\n                }\n              }\n            },\n            \"nwmatcher\": {\n              \"version\": \"1.3.3\",\n              \"from\": \"nwmatcher@>=1.3.2 <1.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.3.tgz\"\n            },\n            \"xmlhttprequest\": {\n              \"version\": \"1.6.0\",\n              \"from\": \"xmlhttprequest@>=1.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.6.0.tgz\"\n            },\n            \"cssom\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"cssom@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/cssom/-/cssom-0.3.0.tgz\"\n            },\n            \"cssstyle\": {\n              \"version\": \"0.2.22\",\n              \"from\": \"cssstyle@>=0.2.9 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.22.tgz\"\n            },\n            \"contextify\": {\n              \"version\": \"0.1.9\",\n              \"from\": \"contextify@>=0.1.5 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/contextify/-/contextify-0.1.9.tgz\",\n              \"dependencies\": {\n                \"bindings\": {\n                  \"version\": \"1.2.1\",\n                  \"from\": \"bindings@*\",\n                  \"resolved\": \"https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz\"\n                },\n                \"nan\": {\n                  \"version\": \"1.3.0\",\n                  \"from\": \"nan@>=1.3.0 <1.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.3.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"minimize\": {\n          \"version\": \"0.7.6\",\n          \"from\": \"minimize@0.7.6\",\n          \"resolved\": \"https://registry.npmjs.org/minimize/-/minimize-0.7.6.tgz\",\n          \"dependencies\": {\n            \"htmlparser2\": {\n              \"version\": \"3.7.3\",\n              \"from\": \"htmlparser2@>=3.7.0 <3.8.0\",\n              \"resolved\": \"https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.7.3.tgz\",\n              \"dependencies\": {\n                \"domhandler\": {\n                  \"version\": \"2.2.1\",\n                  \"from\": \"domhandler@>=2.2.0 <2.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz\"\n                },\n                \"domutils\": {\n                  \"version\": \"1.5.0\",\n                  \"from\": \"domutils@>=1.5.0 <1.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domutils/-/domutils-1.5.0.tgz\"\n                },\n                \"domelementtype\": {\n                  \"version\": \"1.1.3\",\n                  \"from\": \"domelementtype@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz\"\n                },\n                \"readable-stream\": {\n                  \"version\": \"1.1.13\",\n                  \"from\": \"readable-stream@>=1.1.9 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"entities\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"entities@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/entities/-/entities-1.0.0.tgz\"\n                }\n              }\n            },\n            \"utile\": {\n              \"version\": \"0.2.1\",\n              \"from\": \"utile@>=0.2.1 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/utile/-/utile-0.2.1.tgz\",\n              \"dependencies\": {\n                \"deep-equal\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"deep-equal@*\",\n                  \"resolved\": \"https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.1.tgz\"\n                },\n                \"i\": {\n                  \"version\": \"0.3.2\",\n                  \"from\": \"i@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/i/-/i-0.3.2.tgz\"\n                },\n                \"ncp\": {\n                  \"version\": \"0.4.2\",\n                  \"from\": \"ncp@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz\"\n                },\n                \"rimraf\": {\n                  \"version\": \"2.2.8\",\n                  \"from\": \"rimraf@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"mkdirp\": {\n          \"version\": \"0.3.5\",\n          \"from\": \"mkdirp@0.3.5\",\n          \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz\"\n        },\n        \"normalizeurl\": {\n          \"version\": \"0.1.3\",\n          \"from\": \"normalizeurl@0.1.3\",\n          \"resolved\": \"https://registry.npmjs.org/normalizeurl/-/normalizeurl-0.1.3.tgz\"\n        },\n        \"optimist\": {\n          \"version\": \"0.6.1\",\n          \"from\": \"optimist@0.6.1\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n          \"dependencies\": {\n            \"wordwrap\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n            },\n            \"minimist\": {\n              \"version\": \"0.0.10\",\n              \"from\": \"minimist@0.0.10\",\n              \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n            }\n          }\n        },\n        \"passerror\": {\n          \"version\": \"1.0.1\",\n          \"from\": \"passerror@1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/passerror/-/passerror-1.0.1.tgz\"\n        },\n        \"request\": {\n          \"version\": \"2.9.153\",\n          \"from\": \"request@2.9.153\",\n          \"resolved\": \"https://registry.npmjs.org/request/-/request-2.9.153.tgz\"\n        },\n        \"seq\": {\n          \"version\": \"0.3.5\",\n          \"from\": \"seq@0.3.5\",\n          \"resolved\": \"https://registry.npmjs.org/seq/-/seq-0.3.5.tgz\",\n          \"dependencies\": {\n            \"chainsaw\": {\n              \"version\": \"0.0.9\",\n              \"from\": \"chainsaw@0.0.9\",\n              \"resolved\": \"https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz\",\n              \"dependencies\": {\n                \"traverse\": {\n                  \"version\": \"0.3.9\",\n                  \"from\": \"traverse@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz\"\n                }\n              }\n            },\n            \"hashish\": {\n              \"version\": \"0.0.4\",\n              \"from\": \"hashish@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz\",\n              \"dependencies\": {\n                \"traverse\": {\n                  \"version\": \"0.6.6\",\n                  \"from\": \"traverse@>=0.2.4\",\n                  \"resolved\": \"https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"setimmediate\": {\n          \"version\": \"1.0.2\",\n          \"from\": \"setimmediate@1.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.2.tgz\"\n        },\n        \"source-map\": {\n          \"version\": \"0.1.33\",\n          \"from\": \"source-map@0.1.33\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.33.tgz\",\n          \"dependencies\": {\n            \"amdefine\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"amdefine@>=0.0.4\",\n              \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n            }\n          }\n        },\n        \"uglify-js-papandreou\": {\n          \"version\": \"2.4.13-patch1\",\n          \"from\": \"uglify-js-papandreou@2.4.13-patch1\",\n          \"resolved\": \"https://registry.npmjs.org/uglify-js-papandreou/-/uglify-js-papandreou-2.4.13-patch1.tgz\",\n          \"dependencies\": {\n            \"async\": {\n              \"version\": \"0.2.10\",\n              \"from\": \"async@0.2.10\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n            },\n            \"source-map\": {\n              \"version\": \"0.1.40\",\n              \"from\": \"source-map@0.1.40\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"optimist\": {\n              \"version\": \"0.3.7\",\n              \"from\": \"optimist@0.3.7\",\n              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n              \"dependencies\": {\n                \"wordwrap\": {\n                  \"version\": \"0.0.2\",\n                  \"from\": \"wordwrap@>=0.0.1 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                }\n              }\n            },\n            \"uglify-to-browserify\": {\n              \"version\": \"1.0.2\",\n              \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n            }\n          }\n        },\n        \"uglifyast\": {\n          \"version\": \"0.3.1\",\n          \"from\": \"uglifyast@0.3.1\",\n          \"resolved\": \"https://registry.npmjs.org/uglifyast/-/uglifyast-0.3.1.tgz\"\n        },\n        \"urltools\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"urltools@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/urltools/-/urltools-0.2.0.tgz\",\n          \"dependencies\": {\n            \"underscore\": {\n              \"version\": \"1.5.2\",\n              \"from\": \"underscore@1.5.2\",\n              \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz\"\n            },\n            \"glob\": {\n              \"version\": \"3.2.11\",\n              \"from\": \"glob@3.2.11\",\n              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n              \"dependencies\": {\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                },\n                \"minimatch\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                  \"dependencies\": {\n                    \"lru-cache\": {\n                      \"version\": \"2.5.0\",\n                      \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                    },\n                    \"sigmund\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"xmldom\": {\n          \"version\": \"0.1.19\",\n          \"from\": \"xmldom@0.1.19\",\n          \"resolved\": \"https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz\"\n        }\n      }\n    },\n    \"assetgraph-builder\": {\n      \"version\": \"2.7.0\",\n      \"from\": \"assetgraph-builder@>=2.5.1 <3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-2.7.0.tgz\",\n      \"dependencies\": {\n        \"async\": {\n          \"version\": \"0.2.9\",\n          \"from\": \"async@0.2.9\",\n          \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.9.tgz\"\n        },\n        \"chalk\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"chalk@0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz\",\n          \"dependencies\": {\n            \"has-color\": {\n              \"version\": \"0.1.7\",\n              \"from\": \"has-color@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz\"\n            },\n            \"ansi-styles\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"ansi-styles@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz\"\n            },\n            \"strip-ansi\": {\n              \"version\": \"0.1.1\",\n              \"from\": \"strip-ansi@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz\"\n            }\n          }\n        },\n        \"express-processimage\": {\n          \"version\": \"1.3.1\",\n          \"from\": \"express-processimage@1.3.1\",\n          \"resolved\": \"https://registry.npmjs.org/express-processimage/-/express-processimage-1.3.1.tgz\",\n          \"dependencies\": {\n            \"express-hijackresponse\": {\n              \"version\": \"0.0.7\",\n              \"from\": \"express-hijackresponse@0.0.7\",\n              \"resolved\": \"https://registry.npmjs.org/express-hijackresponse/-/express-hijackresponse-0.0.7.tgz\"\n            },\n            \"gm\": {\n              \"version\": \"1.6.1\",\n              \"from\": \"gm@1.6.1\",\n              \"resolved\": \"https://registry.npmjs.org/gm/-/gm-1.6.1.tgz\",\n              \"dependencies\": {\n                \"debug\": {\n                  \"version\": \"0.7.0\",\n                  \"from\": \"debug@0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/debug/-/debug-0.7.0.tgz\"\n                }\n              }\n            },\n            \"inkscape\": {\n              \"version\": \"0.0.5\",\n              \"from\": \"inkscape@0.0.5\",\n              \"resolved\": \"https://registry.npmjs.org/inkscape/-/inkscape-0.0.5.tgz\",\n              \"dependencies\": {\n                \"gettemporaryfilepath\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"gettemporaryfilepath@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/gettemporaryfilepath/-/gettemporaryfilepath-0.0.1.tgz\"\n                }\n              }\n            },\n            \"optimist\": {\n              \"version\": \"0.6.1\",\n              \"from\": \"optimist@0.6.1\",\n              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n              \"dependencies\": {\n                \"wordwrap\": {\n                  \"version\": \"0.0.2\",\n                  \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                },\n                \"minimist\": {\n                  \"version\": \"0.0.10\",\n                  \"from\": \"minimist@>=0.0.1 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                }\n              }\n            },\n            \"optipng\": {\n              \"version\": \"0.1.1\",\n              \"from\": \"optipng@0.1.1\",\n              \"resolved\": \"https://registry.npmjs.org/optipng/-/optipng-0.1.1.tgz\",\n              \"dependencies\": {\n                \"gettemporaryfilepath\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"gettemporaryfilepath@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/gettemporaryfilepath/-/gettemporaryfilepath-0.0.1.tgz\"\n                },\n                \"memoizeasync\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"memoizeasync@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/memoizeasync/-/memoizeasync-0.0.1.tgz\"\n                },\n                \"optipng-bin\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"optipng-bin@0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.1.0.tgz\"\n                },\n                \"which\": {\n                  \"version\": \"1.0.5\",\n                  \"from\": \"which@1.0.5\",\n                  \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.5.tgz\"\n                }\n              }\n            },\n            \"passerror\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"passerror@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/passerror/-/passerror-0.0.1.tgz\"\n            },\n            \"pngcrush\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"pngcrush@0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/pngcrush/-/pngcrush-0.1.0.tgz\",\n              \"dependencies\": {\n                \"gettemporaryfilepath\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"gettemporaryfilepath@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/gettemporaryfilepath/-/gettemporaryfilepath-0.0.1.tgz\"\n                }\n              }\n            },\n            \"pngquant\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"pngquant@0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/pngquant/-/pngquant-0.3.0.tgz\",\n              \"dependencies\": {\n                \"pngquant-bin\": {\n                  \"version\": \"2.0.0\",\n                  \"from\": \"pngquant-bin@2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-2.0.0.tgz\",\n                  \"dependencies\": {\n                    \"bin-build\": {\n                      \"version\": \"2.1.0\",\n                      \"from\": \"bin-build@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/bin-build/-/bin-build-2.1.0.tgz\",\n                      \"dependencies\": {\n                        \"download\": {\n                          \"version\": \"3.1.2\",\n                          \"from\": \"download@>=3.0.1 <4.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/download/-/download-3.1.2.tgz\",\n                          \"dependencies\": {\n                            \"concat-stream\": {\n                              \"version\": \"1.4.7\",\n                              \"from\": \"concat-stream@>=1.4.6 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz\",\n                              \"dependencies\": {\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                },\n                                \"typedarray\": {\n                                  \"version\": \"0.0.6\",\n                                  \"from\": \"typedarray@>=0.0.5 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\"\n                                },\n                                \"readable-stream\": {\n                                  \"version\": \"1.1.13\",\n                                  \"from\": \"readable-stream@>=1.1.9 <1.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-tar\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-tar@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-tar/-/decompress-tar-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-tar\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-tar@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-tarbz2\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-tarbz2@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-bzip2\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-bzip2@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz\"\n                                },\n                                \"seek-bzip\": {\n                                  \"version\": \"1.0.4\",\n                                  \"from\": \"seek-bzip@>=1.0.3 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.4.tgz\",\n                                  \"dependencies\": {\n                                    \"commander\": {\n                                      \"version\": \"2.4.0\",\n                                      \"from\": \"commander@>=2.4.0 <2.5.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.4.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-targz\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-targz@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-targz/-/decompress-targz-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-gzip\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-gzip@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-unzip\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"decompress-unzip@>=2.0.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-2.0.1.tgz\",\n                              \"dependencies\": {\n                                \"adm-zip\": {\n                                  \"version\": \"0.4.4\",\n                                  \"from\": \"adm-zip@>=0.4.4 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz\"\n                                },\n                                \"is-zip\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-zip@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"temp-write\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"temp-write@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/temp-write/-/temp-write-1.1.0.tgz\",\n                                  \"dependencies\": {\n                                    \"graceful-fs\": {\n                                      \"version\": \"3.0.5\",\n                                      \"from\": \"graceful-fs@>=3.0.2 <4.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                                    },\n                                    \"mkdirp\": {\n                                      \"version\": \"0.5.0\",\n                                      \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                                      \"dependencies\": {\n                                        \"minimist\": {\n                                          \"version\": \"0.0.8\",\n                                          \"from\": \"minimist@0.0.8\",\n                                          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"uuid\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"uuid@>=2.0.1 <3.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"download-status\": {\n                              \"version\": \"2.1.0\",\n                              \"from\": \"download-status@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/download-status/-/download-status-2.1.0.tgz\",\n                              \"dependencies\": {\n                                \"chalk\": {\n                                  \"version\": \"0.5.1\",\n                                  \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                  \"dependencies\": {\n                                    \"ansi-styles\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                    },\n                                    \"escape-string-regexp\": {\n                                      \"version\": \"1.0.2\",\n                                      \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                    },\n                                    \"has-ansi\": {\n                                      \"version\": \"0.1.0\",\n                                      \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-regex\": {\n                                          \"version\": \"0.2.1\",\n                                          \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"strip-ansi\": {\n                                      \"version\": \"0.3.0\",\n                                      \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-regex\": {\n                                          \"version\": \"0.2.1\",\n                                          \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"supports-color\": {\n                                      \"version\": \"0.2.0\",\n                                      \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"lpad-align\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"lpad-align@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/lpad-align/-/lpad-align-1.0.2.tgz\",\n                                  \"dependencies\": {\n                                    \"longest\": {\n                                      \"version\": \"0.2.1\",\n                                      \"from\": \"longest@>=0.2.1 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/longest/-/longest-0.2.1.tgz\"\n                                    },\n                                    \"lpad\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"lpad@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/lpad/-/lpad-1.0.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"object-assign\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"object-assign@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n                                },\n                                \"progress\": {\n                                  \"version\": \"1.1.8\",\n                                  \"from\": \"progress@>=1.1.8 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/progress/-/progress-1.1.8.tgz\"\n                                }\n                              }\n                            },\n                            \"each-async\": {\n                              \"version\": \"1.1.0\",\n                              \"from\": \"each-async@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/each-async/-/each-async-1.1.0.tgz\",\n                              \"dependencies\": {\n                                \"onetime\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"onetime@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/onetime/-/onetime-1.0.0.tgz\"\n                                },\n                                \"setimmediate\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"setimmediate@>=1.0.2 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.2.tgz\"\n                                }\n                              }\n                            },\n                            \"get-stdin\": {\n                              \"version\": \"3.0.2\",\n                              \"from\": \"get-stdin@>=3.0.0 <4.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-3.0.2.tgz\"\n                            },\n                            \"gulp-rename\": {\n                              \"version\": \"1.2.0\",\n                              \"from\": \"gulp-rename@>=1.2.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.0.tgz\"\n                            },\n                            \"meow\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"meow@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/meow/-/meow-1.0.0.tgz\",\n                              \"dependencies\": {\n                                \"camelcase-keys\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"camelcase-keys@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"camelcase\": {\n                                      \"version\": \"1.0.2\",\n                                      \"from\": \"camelcase@>=1.0.1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-1.0.2.tgz\"\n                                    },\n                                    \"map-obj\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"map-obj@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/map-obj/-/map-obj-1.0.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"indent-string\": {\n                                  \"version\": \"1.2.0\",\n                                  \"from\": \"indent-string@>=1.1.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-1.2.0.tgz\",\n                                  \"dependencies\": {\n                                    \"repeating\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"repeating@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/repeating/-/repeating-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"is-finite\": {\n                                          \"version\": \"1.0.0\",\n                                          \"from\": \"is-finite@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-finite/-/is-finite-1.0.0.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"minimist\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                },\n                                \"object-assign\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"object-assign@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n                                }\n                              }\n                            },\n                            \"rc\": {\n                              \"version\": \"0.5.4\",\n                              \"from\": \"rc@>=0.5.1 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/rc/-/rc-0.5.4.tgz\",\n                              \"dependencies\": {\n                                \"minimist\": {\n                                  \"version\": \"0.0.10\",\n                                  \"from\": \"minimist@>=0.0.7 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                                },\n                                \"deep-extend\": {\n                                  \"version\": \"0.2.11\",\n                                  \"from\": \"deep-extend@>=0.2.5 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n                                },\n                                \"strip-json-comments\": {\n                                  \"version\": \"0.1.3\",\n                                  \"from\": \"strip-json-comments@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz\"\n                                },\n                                \"ini\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"ini@>=1.1.0 <1.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.1.0.tgz\"\n                                }\n                              }\n                            },\n                            \"request\": {\n                              \"version\": \"2.49.0\",\n                              \"from\": \"request@>=2.34.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/request/-/request-2.49.0.tgz\",\n                              \"dependencies\": {\n                                \"bl\": {\n                                  \"version\": \"0.9.3\",\n                                  \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                                  \"dependencies\": {\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"caseless\": {\n                                  \"version\": \"0.8.0\",\n                                  \"from\": \"caseless@>=0.8.0 <0.9.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz\"\n                                },\n                                \"forever-agent\": {\n                                  \"version\": \"0.5.2\",\n                                  \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                                },\n                                \"form-data\": {\n                                  \"version\": \"0.1.4\",\n                                  \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                                  \"dependencies\": {\n                                    \"mime\": {\n                                      \"version\": \"1.2.11\",\n                                      \"from\": \"mime@>=1.2.11 <1.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                                    },\n                                    \"async\": {\n                                      \"version\": \"0.9.0\",\n                                      \"from\": \"async@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"json-stringify-safe\": {\n                                  \"version\": \"5.0.0\",\n                                  \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                                },\n                                \"mime-types\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                                },\n                                \"node-uuid\": {\n                                  \"version\": \"1.4.2\",\n                                  \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                                },\n                                \"qs\": {\n                                  \"version\": \"2.3.3\",\n                                  \"from\": \"qs@>=2.3.1 <2.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.3.3.tgz\"\n                                },\n                                \"tunnel-agent\": {\n                                  \"version\": \"0.4.0\",\n                                  \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                                },\n                                \"tough-cookie\": {\n                                  \"version\": \"0.12.1\",\n                                  \"from\": \"tough-cookie@>=0.12.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n                                  \"dependencies\": {\n                                    \"punycode\": {\n                                      \"version\": \"1.3.2\",\n                                      \"from\": \"punycode@>=0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                                    }\n                                  }\n                                },\n                                \"http-signature\": {\n                                  \"version\": \"0.10.0\",\n                                  \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                                  \"dependencies\": {\n                                    \"assert-plus\": {\n                                      \"version\": \"0.1.2\",\n                                      \"from\": \"assert-plus@0.1.2\",\n                                      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                                    },\n                                    \"asn1\": {\n                                      \"version\": \"0.1.11\",\n                                      \"from\": \"asn1@0.1.11\",\n                                      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                                    },\n                                    \"ctype\": {\n                                      \"version\": \"0.5.2\",\n                                      \"from\": \"ctype@0.5.2\",\n                                      \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                                    }\n                                  }\n                                },\n                                \"oauth-sign\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"oauth-sign@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz\"\n                                },\n                                \"hawk\": {\n                                  \"version\": \"1.1.1\",\n                                  \"from\": \"hawk@1.1.1\",\n                                  \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"hoek\": {\n                                      \"version\": \"0.9.1\",\n                                      \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                                    },\n                                    \"boom\": {\n                                      \"version\": \"0.4.2\",\n                                      \"from\": \"boom@>=0.4.0 <0.5.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                                    },\n                                    \"cryptiles\": {\n                                      \"version\": \"0.2.2\",\n                                      \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                                    },\n                                    \"sntp\": {\n                                      \"version\": \"0.2.4\",\n                                      \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                                    }\n                                  }\n                                },\n                                \"aws-sign2\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                                },\n                                \"stringstream\": {\n                                  \"version\": \"0.0.4\",\n                                  \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                                },\n                                \"combined-stream\": {\n                                  \"version\": \"0.0.7\",\n                                  \"from\": \"combined-stream@>=0.0.5 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                                  \"dependencies\": {\n                                    \"delayed-stream\": {\n                                      \"version\": \"0.0.5\",\n                                      \"from\": \"delayed-stream@0.0.5\",\n                                      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"stream-combiner\": {\n                              \"version\": \"0.2.1\",\n                              \"from\": \"stream-combiner@>=0.2.1 <0.3.0\",\n                              \"resolved\": \"https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.1.tgz\",\n                              \"dependencies\": {\n                                \"duplexer\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"duplexer@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz\"\n                                },\n                                \"through\": {\n                                  \"version\": \"2.3.6\",\n                                  \"from\": \"through@>=2.3.4 <2.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/through/-/through-2.3.6.tgz\"\n                                }\n                              }\n                            },\n                            \"through2\": {\n                              \"version\": \"0.6.3\",\n                              \"from\": \"through2@>=0.6.1 <0.7.0\",\n                              \"resolved\": \"https://registry.npmjs.org/through2/-/through2-0.6.3.tgz\",\n                              \"dependencies\": {\n                                \"readable-stream\": {\n                                  \"version\": \"1.0.33\",\n                                  \"from\": \"readable-stream@>=1.0.33-1 <1.1.0-0\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    },\n                                    \"inherits\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                    }\n                                  }\n                                },\n                                \"xtend\": {\n                                  \"version\": \"4.0.0\",\n                                  \"from\": \"xtend@>=4.0.0 <4.1.0-0\",\n                                  \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                }\n                              }\n                            },\n                            \"url-regex\": {\n                              \"version\": \"1.0.4\",\n                              \"from\": \"url-regex@>=1.0.3 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/url-regex/-/url-regex-1.0.4.tgz\"\n                            },\n                            \"vinyl\": {\n                              \"version\": \"0.4.6\",\n                              \"from\": \"vinyl@>=0.4.3 <0.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz\",\n                              \"dependencies\": {\n                                \"clone\": {\n                                  \"version\": \"0.2.0\",\n                                  \"from\": \"clone@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/clone/-/clone-0.2.0.tgz\"\n                                },\n                                \"clone-stats\": {\n                                  \"version\": \"0.0.1\",\n                                  \"from\": \"clone-stats@>=0.0.1 <0.0.2\",\n                                  \"resolved\": \"https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz\"\n                                }\n                              }\n                            },\n                            \"vinyl-fs\": {\n                              \"version\": \"0.3.13\",\n                              \"from\": \"vinyl-fs@>=0.3.7 <0.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.13.tgz\",\n                              \"dependencies\": {\n                                \"defaults\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"defaults@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/defaults/-/defaults-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"clone\": {\n                                      \"version\": \"0.1.19\",\n                                      \"from\": \"clone@>=0.1.5 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/clone/-/clone-0.1.19.tgz\"\n                                    }\n                                  }\n                                },\n                                \"glob-stream\": {\n                                  \"version\": \"3.1.18\",\n                                  \"from\": \"glob-stream@>=3.1.5 <4.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz\",\n                                  \"dependencies\": {\n                                    \"glob\": {\n                                      \"version\": \"4.3.1\",\n                                      \"from\": \"glob@>=4.3.1 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n                                      \"dependencies\": {\n                                        \"inflight\": {\n                                          \"version\": \"1.0.4\",\n                                          \"from\": \"inflight@>=1.0.4 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        },\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"minimatch\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n                                      \"dependencies\": {\n                                        \"brace-expansion\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                                          \"dependencies\": {\n                                            \"balanced-match\": {\n                                              \"version\": \"0.2.0\",\n                                              \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                                            },\n                                            \"concat-map\": {\n                                              \"version\": \"0.0.0\",\n                                              \"from\": \"concat-map@0.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"ordered-read-streams\": {\n                                      \"version\": \"0.1.0\",\n                                      \"from\": \"ordered-read-streams@>=0.1.0 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz\"\n                                    },\n                                    \"glob2base\": {\n                                      \"version\": \"0.0.12\",\n                                      \"from\": \"glob2base@>=0.0.12 <0.0.13\",\n                                      \"resolved\": \"https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz\",\n                                      \"dependencies\": {\n                                        \"find-index\": {\n                                          \"version\": \"0.1.1\",\n                                          \"from\": \"find-index@>=0.1.1 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"unique-stream\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"unique-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"glob-watcher\": {\n                                  \"version\": \"0.0.6\",\n                                  \"from\": \"glob-watcher@>=0.0.6 <0.0.7\",\n                                  \"resolved\": \"https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz\",\n                                  \"dependencies\": {\n                                    \"gaze\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"gaze@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/gaze/-/gaze-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"globule\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"globule@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/globule/-/globule-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"lodash\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"lodash@>=1.0.1 <1.1.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-1.0.1.tgz\"\n                                            },\n                                            \"glob\": {\n                                              \"version\": \"3.1.21\",\n                                              \"from\": \"glob@>=3.1.21 <3.2.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.1.21.tgz\",\n                                              \"dependencies\": {\n                                                \"graceful-fs\": {\n                                                  \"version\": \"1.2.3\",\n                                                  \"from\": \"graceful-fs@>=1.2.0 <1.3.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz\"\n                                                },\n                                                \"inherits\": {\n                                                  \"version\": \"1.0.0\",\n                                                  \"from\": \"inherits@>=1.0.0 <2.0.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz\"\n                                                }\n                                              }\n                                            },\n                                            \"minimatch\": {\n                                              \"version\": \"0.2.14\",\n                                              \"from\": \"minimatch@>=0.2.11 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n                                              \"dependencies\": {\n                                                \"lru-cache\": {\n                                                  \"version\": \"2.5.0\",\n                                                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                                                },\n                                                \"sigmund\": {\n                                                  \"version\": \"1.0.0\",\n                                                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                                                }\n                                              }\n                                            }\n                                          }\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"graceful-fs\": {\n                                  \"version\": \"3.0.5\",\n                                  \"from\": \"graceful-fs@>=3.0.0 <4.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                                },\n                                \"mkdirp\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"mkdirp@>=0.0.0 <1.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                                  \"dependencies\": {\n                                    \"minimist\": {\n                                      \"version\": \"0.0.8\",\n                                      \"from\": \"minimist@0.0.8\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                    }\n                                  }\n                                },\n                                \"strip-bom\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"strip-bom@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"first-chunk-stream\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"first-chunk-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz\"\n                                    },\n                                    \"is-utf8\": {\n                                      \"version\": \"0.2.0\",\n                                      \"from\": \"is-utf8@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"ware\": {\n                              \"version\": \"1.2.0\",\n                              \"from\": \"ware@>=1.0.1 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ware/-/ware-1.2.0.tgz\",\n                              \"dependencies\": {\n                                \"wrap-fn\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"wrap-fn@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"co\": {\n                                      \"version\": \"3.1.0\",\n                                      \"from\": \"co@3.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/co/-/co-3.1.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"exec-series\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"exec-series@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/exec-series/-/exec-series-1.0.1.tgz\",\n                          \"dependencies\": {\n                            \"async-each-series\": {\n                              \"version\": \"0.1.1\",\n                              \"from\": \"async-each-series@>=0.1.0 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz\"\n                            }\n                          }\n                        },\n                        \"rimraf\": {\n                          \"version\": \"2.2.8\",\n                          \"from\": \"rimraf@>=2.2.6 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                        },\n                        \"tempfile\": {\n                          \"version\": \"1.1.0\",\n                          \"from\": \"tempfile@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/tempfile/-/tempfile-1.1.0.tgz\",\n                          \"dependencies\": {\n                            \"uuid\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"uuid@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"bin-wrapper\": {\n                      \"version\": \"2.1.1\",\n                      \"from\": \"bin-wrapper@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-2.1.1.tgz\",\n                      \"dependencies\": {\n                        \"bin-check\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"bin-check@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/bin-check/-/bin-check-1.0.0.tgz\",\n                          \"dependencies\": {\n                            \"executable\": {\n                              \"version\": \"1.0.3\",\n                              \"from\": \"executable@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/executable/-/executable-1.0.3.tgz\",\n                              \"dependencies\": {\n                                \"meow\": {\n                                  \"version\": \"2.0.0\",\n                                  \"from\": \"meow@>=2.0.0 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/meow/-/meow-2.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"camelcase-keys\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"camelcase-keys@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz\",\n                                      \"dependencies\": {\n                                        \"camelcase\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"camelcase@>=1.0.1 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-1.0.2.tgz\"\n                                        },\n                                        \"map-obj\": {\n                                          \"version\": \"1.0.0\",\n                                          \"from\": \"map-obj@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/map-obj/-/map-obj-1.0.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"indent-string\": {\n                                      \"version\": \"1.2.0\",\n                                      \"from\": \"indent-string@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-1.2.0.tgz\",\n                                      \"dependencies\": {\n                                        \"get-stdin\": {\n                                          \"version\": \"3.0.2\",\n                                          \"from\": \"get-stdin@>=3.0.0 <4.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-3.0.2.tgz\"\n                                        },\n                                        \"repeating\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"repeating@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/repeating/-/repeating-1.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"is-finite\": {\n                                              \"version\": \"1.0.0\",\n                                              \"from\": \"is-finite@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/is-finite/-/is-finite-1.0.0.tgz\"\n                                            },\n                                            \"meow\": {\n                                              \"version\": \"1.0.0\",\n                                              \"from\": \"meow@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/meow/-/meow-1.0.0.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    },\n                                    \"object-assign\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"object-assign@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"bin-version-check\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"bin-version-check@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/bin-version-check/-/bin-version-check-1.0.0.tgz\",\n                          \"dependencies\": {\n                            \"bin-version\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"bin-version@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/bin-version/-/bin-version-1.0.0.tgz\",\n                              \"dependencies\": {\n                                \"find-versions\": {\n                                  \"version\": \"1.1.1\",\n                                  \"from\": \"find-versions@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/find-versions/-/find-versions-1.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"array-uniq\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"array-uniq@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.1.tgz\"\n                                    },\n                                    \"get-stdin\": {\n                                      \"version\": \"3.0.2\",\n                                      \"from\": \"get-stdin@>=3.0.0 <4.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-3.0.2.tgz\"\n                                    },\n                                    \"semver-regex\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"semver-regex@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"minimist\": {\n                              \"version\": \"1.1.0\",\n                              \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                            }\n                          }\n                        },\n                        \"download\": {\n                          \"version\": \"3.1.2\",\n                          \"from\": \"download@>=3.0.1 <4.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/download/-/download-3.1.2.tgz\",\n                          \"dependencies\": {\n                            \"concat-stream\": {\n                              \"version\": \"1.4.7\",\n                              \"from\": \"concat-stream@>=1.4.6 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz\",\n                              \"dependencies\": {\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                },\n                                \"typedarray\": {\n                                  \"version\": \"0.0.6\",\n                                  \"from\": \"typedarray@>=0.0.5 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\"\n                                },\n                                \"readable-stream\": {\n                                  \"version\": \"1.1.13\",\n                                  \"from\": \"readable-stream@>=1.1.9 <1.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-tar\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-tar@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-tar/-/decompress-tar-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-tar\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-tar@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-tarbz2\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-tarbz2@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-bzip2\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-bzip2@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz\"\n                                },\n                                \"seek-bzip\": {\n                                  \"version\": \"1.0.4\",\n                                  \"from\": \"seek-bzip@>=1.0.3 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.4.tgz\",\n                                  \"dependencies\": {\n                                    \"commander\": {\n                                      \"version\": \"2.4.0\",\n                                      \"from\": \"commander@>=2.4.0 <2.5.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.4.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-targz\": {\n                              \"version\": \"2.0.2\",\n                              \"from\": \"decompress-targz@>=2.0.1 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-targz/-/decompress-targz-2.0.2.tgz\",\n                              \"dependencies\": {\n                                \"is-gzip\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-gzip@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"tar-stream\": {\n                                  \"version\": \"0.4.7\",\n                                  \"from\": \"tar-stream@>=0.4.5 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n                                  \"dependencies\": {\n                                    \"bl\": {\n                                      \"version\": \"0.9.3\",\n                                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                                    },\n                                    \"end-of-stream\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"xtend\": {\n                                      \"version\": \"4.0.0\",\n                                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"decompress-unzip\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"decompress-unzip@>=2.0.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-2.0.1.tgz\",\n                              \"dependencies\": {\n                                \"adm-zip\": {\n                                  \"version\": \"0.4.4\",\n                                  \"from\": \"adm-zip@>=0.4.4 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz\"\n                                },\n                                \"is-zip\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"is-zip@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz\"\n                                },\n                                \"rimraf\": {\n                                  \"version\": \"2.2.8\",\n                                  \"from\": \"rimraf@>=2.2.8 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                                },\n                                \"strip-dirs\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"strip-dirs@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-dirs/-/strip-dirs-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"chalk\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"ansi-styles\": {\n                                          \"version\": \"1.1.0\",\n                                          \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                        },\n                                        \"escape-string-regexp\": {\n                                          \"version\": \"1.0.2\",\n                                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                        },\n                                        \"has-ansi\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"strip-ansi\": {\n                                          \"version\": \"0.3.0\",\n                                          \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                          \"dependencies\": {\n                                            \"ansi-regex\": {\n                                              \"version\": \"0.2.1\",\n                                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"supports-color\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-absolute\": {\n                                      \"version\": \"0.1.5\",\n                                      \"from\": \"is-absolute@>=0.1.4 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.5.tgz\",\n                                      \"dependencies\": {\n                                        \"is-relative\": {\n                                          \"version\": \"0.1.3\",\n                                          \"from\": \"is-relative@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"is-integer\": {\n                                      \"version\": \"1.0.3\",\n                                      \"from\": \"is-integer@>=1.0.3 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-integer/-/is-integer-1.0.3.tgz\"\n                                    },\n                                    \"minimist\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"temp-write\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"temp-write@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/temp-write/-/temp-write-1.1.0.tgz\",\n                                  \"dependencies\": {\n                                    \"graceful-fs\": {\n                                      \"version\": \"3.0.5\",\n                                      \"from\": \"graceful-fs@>=3.0.2 <4.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                                    },\n                                    \"mkdirp\": {\n                                      \"version\": \"0.5.0\",\n                                      \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                                      \"dependencies\": {\n                                        \"minimist\": {\n                                          \"version\": \"0.0.8\",\n                                          \"from\": \"minimist@0.0.8\",\n                                          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"uuid\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"uuid@>=2.0.1 <3.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"each-async\": {\n                              \"version\": \"1.1.0\",\n                              \"from\": \"each-async@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/each-async/-/each-async-1.1.0.tgz\",\n                              \"dependencies\": {\n                                \"onetime\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"onetime@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/onetime/-/onetime-1.0.0.tgz\"\n                                },\n                                \"setimmediate\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"setimmediate@>=1.0.2 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.2.tgz\"\n                                }\n                              }\n                            },\n                            \"get-stdin\": {\n                              \"version\": \"3.0.2\",\n                              \"from\": \"get-stdin@>=3.0.0 <4.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-3.0.2.tgz\"\n                            },\n                            \"gulp-rename\": {\n                              \"version\": \"1.2.0\",\n                              \"from\": \"gulp-rename@>=1.2.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.0.tgz\"\n                            },\n                            \"meow\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"meow@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/meow/-/meow-1.0.0.tgz\",\n                              \"dependencies\": {\n                                \"camelcase-keys\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"camelcase-keys@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"camelcase\": {\n                                      \"version\": \"1.0.2\",\n                                      \"from\": \"camelcase@>=1.0.1 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-1.0.2.tgz\"\n                                    },\n                                    \"map-obj\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"map-obj@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/map-obj/-/map-obj-1.0.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"indent-string\": {\n                                  \"version\": \"1.2.0\",\n                                  \"from\": \"indent-string@>=1.1.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-1.2.0.tgz\",\n                                  \"dependencies\": {\n                                    \"repeating\": {\n                                      \"version\": \"1.1.0\",\n                                      \"from\": \"repeating@>=1.1.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/repeating/-/repeating-1.1.0.tgz\",\n                                      \"dependencies\": {\n                                        \"is-finite\": {\n                                          \"version\": \"1.0.0\",\n                                          \"from\": \"is-finite@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/is-finite/-/is-finite-1.0.0.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"minimist\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"minimist@>=1.1.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n                                },\n                                \"object-assign\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"object-assign@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n                                }\n                              }\n                            },\n                            \"rc\": {\n                              \"version\": \"0.5.4\",\n                              \"from\": \"rc@>=0.5.1 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/rc/-/rc-0.5.4.tgz\",\n                              \"dependencies\": {\n                                \"minimist\": {\n                                  \"version\": \"0.0.10\",\n                                  \"from\": \"minimist@>=0.0.7 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                                },\n                                \"deep-extend\": {\n                                  \"version\": \"0.2.11\",\n                                  \"from\": \"deep-extend@>=0.2.5 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n                                },\n                                \"strip-json-comments\": {\n                                  \"version\": \"0.1.3\",\n                                  \"from\": \"strip-json-comments@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz\"\n                                },\n                                \"ini\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"ini@>=1.1.0 <1.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.1.0.tgz\"\n                                }\n                              }\n                            },\n                            \"request\": {\n                              \"version\": \"2.49.0\",\n                              \"from\": \"request@>=2.34.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/request/-/request-2.49.0.tgz\",\n                              \"dependencies\": {\n                                \"bl\": {\n                                  \"version\": \"0.9.3\",\n                                  \"from\": \"bl@>=0.9.0 <0.10.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                                  \"dependencies\": {\n                                    \"readable-stream\": {\n                                      \"version\": \"1.0.33\",\n                                      \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                      \"dependencies\": {\n                                        \"core-util-is\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                        },\n                                        \"isarray\": {\n                                          \"version\": \"0.0.1\",\n                                          \"from\": \"isarray@0.0.1\",\n                                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                        },\n                                        \"string_decoder\": {\n                                          \"version\": \"0.10.31\",\n                                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"caseless\": {\n                                  \"version\": \"0.8.0\",\n                                  \"from\": \"caseless@>=0.8.0 <0.9.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz\"\n                                },\n                                \"forever-agent\": {\n                                  \"version\": \"0.5.2\",\n                                  \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                                },\n                                \"form-data\": {\n                                  \"version\": \"0.1.4\",\n                                  \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                                  \"dependencies\": {\n                                    \"mime\": {\n                                      \"version\": \"1.2.11\",\n                                      \"from\": \"mime@>=1.2.11 <1.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                                    },\n                                    \"async\": {\n                                      \"version\": \"0.9.0\",\n                                      \"from\": \"async@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"json-stringify-safe\": {\n                                  \"version\": \"5.0.0\",\n                                  \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                                },\n                                \"mime-types\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                                },\n                                \"node-uuid\": {\n                                  \"version\": \"1.4.2\",\n                                  \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                                },\n                                \"qs\": {\n                                  \"version\": \"2.3.3\",\n                                  \"from\": \"qs@>=2.3.1 <2.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.3.3.tgz\"\n                                },\n                                \"tunnel-agent\": {\n                                  \"version\": \"0.4.0\",\n                                  \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                                },\n                                \"tough-cookie\": {\n                                  \"version\": \"0.12.1\",\n                                  \"from\": \"tough-cookie@>=0.12.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n                                  \"dependencies\": {\n                                    \"punycode\": {\n                                      \"version\": \"1.3.2\",\n                                      \"from\": \"punycode@>=0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                                    }\n                                  }\n                                },\n                                \"http-signature\": {\n                                  \"version\": \"0.10.0\",\n                                  \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                                  \"dependencies\": {\n                                    \"assert-plus\": {\n                                      \"version\": \"0.1.2\",\n                                      \"from\": \"assert-plus@0.1.2\",\n                                      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                                    },\n                                    \"asn1\": {\n                                      \"version\": \"0.1.11\",\n                                      \"from\": \"asn1@0.1.11\",\n                                      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                                    },\n                                    \"ctype\": {\n                                      \"version\": \"0.5.2\",\n                                      \"from\": \"ctype@0.5.2\",\n                                      \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                                    }\n                                  }\n                                },\n                                \"oauth-sign\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"oauth-sign@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz\"\n                                },\n                                \"hawk\": {\n                                  \"version\": \"1.1.1\",\n                                  \"from\": \"hawk@1.1.1\",\n                                  \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"hoek\": {\n                                      \"version\": \"0.9.1\",\n                                      \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                                    },\n                                    \"boom\": {\n                                      \"version\": \"0.4.2\",\n                                      \"from\": \"boom@>=0.4.0 <0.5.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                                    },\n                                    \"cryptiles\": {\n                                      \"version\": \"0.2.2\",\n                                      \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                                    },\n                                    \"sntp\": {\n                                      \"version\": \"0.2.4\",\n                                      \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                                    }\n                                  }\n                                },\n                                \"aws-sign2\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                                },\n                                \"stringstream\": {\n                                  \"version\": \"0.0.4\",\n                                  \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                                },\n                                \"combined-stream\": {\n                                  \"version\": \"0.0.7\",\n                                  \"from\": \"combined-stream@>=0.0.5 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                                  \"dependencies\": {\n                                    \"delayed-stream\": {\n                                      \"version\": \"0.0.5\",\n                                      \"from\": \"delayed-stream@0.0.5\",\n                                      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"stream-combiner\": {\n                              \"version\": \"0.2.1\",\n                              \"from\": \"stream-combiner@>=0.2.1 <0.3.0\",\n                              \"resolved\": \"https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.1.tgz\",\n                              \"dependencies\": {\n                                \"duplexer\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"duplexer@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz\"\n                                },\n                                \"through\": {\n                                  \"version\": \"2.3.6\",\n                                  \"from\": \"through@>=2.3.4 <2.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/through/-/through-2.3.6.tgz\"\n                                }\n                              }\n                            },\n                            \"through2\": {\n                              \"version\": \"0.6.3\",\n                              \"from\": \"through2@>=0.6.1 <0.7.0\",\n                              \"resolved\": \"https://registry.npmjs.org/through2/-/through2-0.6.3.tgz\",\n                              \"dependencies\": {\n                                \"readable-stream\": {\n                                  \"version\": \"1.0.33\",\n                                  \"from\": \"readable-stream@>=1.0.33-1 <1.1.0-0\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    },\n                                    \"inherits\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                    }\n                                  }\n                                },\n                                \"xtend\": {\n                                  \"version\": \"4.0.0\",\n                                  \"from\": \"xtend@>=4.0.0 <4.1.0-0\",\n                                  \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                                }\n                              }\n                            },\n                            \"url-regex\": {\n                              \"version\": \"1.0.4\",\n                              \"from\": \"url-regex@>=1.0.3 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/url-regex/-/url-regex-1.0.4.tgz\"\n                            },\n                            \"vinyl\": {\n                              \"version\": \"0.4.6\",\n                              \"from\": \"vinyl@>=0.4.3 <0.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz\",\n                              \"dependencies\": {\n                                \"clone\": {\n                                  \"version\": \"0.2.0\",\n                                  \"from\": \"clone@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/clone/-/clone-0.2.0.tgz\"\n                                },\n                                \"clone-stats\": {\n                                  \"version\": \"0.0.1\",\n                                  \"from\": \"clone-stats@>=0.0.1 <0.0.2\",\n                                  \"resolved\": \"https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz\"\n                                }\n                              }\n                            },\n                            \"vinyl-fs\": {\n                              \"version\": \"0.3.13\",\n                              \"from\": \"vinyl-fs@>=0.3.7 <0.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.13.tgz\",\n                              \"dependencies\": {\n                                \"defaults\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"defaults@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/defaults/-/defaults-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"clone\": {\n                                      \"version\": \"0.1.19\",\n                                      \"from\": \"clone@>=0.1.5 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/clone/-/clone-0.1.19.tgz\"\n                                    }\n                                  }\n                                },\n                                \"glob-stream\": {\n                                  \"version\": \"3.1.18\",\n                                  \"from\": \"glob-stream@>=3.1.5 <4.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz\",\n                                  \"dependencies\": {\n                                    \"glob\": {\n                                      \"version\": \"4.3.1\",\n                                      \"from\": \"glob@>=4.3.1 <5.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n                                      \"dependencies\": {\n                                        \"inflight\": {\n                                          \"version\": \"1.0.4\",\n                                          \"from\": \"inflight@>=1.0.4 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        },\n                                        \"inherits\": {\n                                          \"version\": \"2.0.1\",\n                                          \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                        },\n                                        \"once\": {\n                                          \"version\": \"1.3.1\",\n                                          \"from\": \"once@>=1.3.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                          \"dependencies\": {\n                                            \"wrappy\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"minimatch\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n                                      \"dependencies\": {\n                                        \"brace-expansion\": {\n                                          \"version\": \"1.0.1\",\n                                          \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                                          \"dependencies\": {\n                                            \"balanced-match\": {\n                                              \"version\": \"0.2.0\",\n                                              \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                                            },\n                                            \"concat-map\": {\n                                              \"version\": \"0.0.0\",\n                                              \"from\": \"concat-map@0.0.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                                            }\n                                          }\n                                        }\n                                      }\n                                    },\n                                    \"ordered-read-streams\": {\n                                      \"version\": \"0.1.0\",\n                                      \"from\": \"ordered-read-streams@>=0.1.0 <0.2.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz\"\n                                    },\n                                    \"glob2base\": {\n                                      \"version\": \"0.0.12\",\n                                      \"from\": \"glob2base@>=0.0.12 <0.0.13\",\n                                      \"resolved\": \"https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz\",\n                                      \"dependencies\": {\n                                        \"find-index\": {\n                                          \"version\": \"0.1.1\",\n                                          \"from\": \"find-index@>=0.1.1 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz\"\n                                        }\n                                      }\n                                    },\n                                    \"unique-stream\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"unique-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz\"\n                                    }\n                                  }\n                                },\n                                \"glob-watcher\": {\n                                  \"version\": \"0.0.6\",\n                                  \"from\": \"glob-watcher@>=0.0.6 <0.0.7\",\n                                  \"resolved\": \"https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz\",\n                                  \"dependencies\": {\n                                    \"gaze\": {\n                                      \"version\": \"0.5.1\",\n                                      \"from\": \"gaze@>=0.5.1 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/gaze/-/gaze-0.5.1.tgz\",\n                                      \"dependencies\": {\n                                        \"globule\": {\n                                          \"version\": \"0.1.0\",\n                                          \"from\": \"globule@>=0.1.0 <0.2.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/globule/-/globule-0.1.0.tgz\",\n                                          \"dependencies\": {\n                                            \"lodash\": {\n                                              \"version\": \"1.0.1\",\n                                              \"from\": \"lodash@>=1.0.1 <1.1.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-1.0.1.tgz\"\n                                            },\n                                            \"glob\": {\n                                              \"version\": \"3.1.21\",\n                                              \"from\": \"glob@>=3.1.21 <3.2.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.1.21.tgz\",\n                                              \"dependencies\": {\n                                                \"graceful-fs\": {\n                                                  \"version\": \"1.2.3\",\n                                                  \"from\": \"graceful-fs@>=1.2.0 <1.3.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz\"\n                                                },\n                                                \"inherits\": {\n                                                  \"version\": \"1.0.0\",\n                                                  \"from\": \"inherits@>=1.0.0 <2.0.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz\"\n                                                }\n                                              }\n                                            },\n                                            \"minimatch\": {\n                                              \"version\": \"0.2.14\",\n                                              \"from\": \"minimatch@>=0.2.11 <0.3.0\",\n                                              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n                                              \"dependencies\": {\n                                                \"lru-cache\": {\n                                                  \"version\": \"2.5.0\",\n                                                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                                                },\n                                                \"sigmund\": {\n                                                  \"version\": \"1.0.0\",\n                                                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                                                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                                                }\n                                              }\n                                            }\n                                          }\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"graceful-fs\": {\n                                  \"version\": \"3.0.5\",\n                                  \"from\": \"graceful-fs@>=3.0.0 <4.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                                },\n                                \"mkdirp\": {\n                                  \"version\": \"0.5.0\",\n                                  \"from\": \"mkdirp@>=0.0.0 <1.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                                  \"dependencies\": {\n                                    \"minimist\": {\n                                      \"version\": \"0.0.8\",\n                                      \"from\": \"minimist@0.0.8\",\n                                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                    }\n                                  }\n                                },\n                                \"strip-bom\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"strip-bom@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz\",\n                                  \"dependencies\": {\n                                    \"first-chunk-stream\": {\n                                      \"version\": \"1.0.0\",\n                                      \"from\": \"first-chunk-stream@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz\"\n                                    },\n                                    \"is-utf8\": {\n                                      \"version\": \"0.2.0\",\n                                      \"from\": \"is-utf8@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"ware\": {\n                              \"version\": \"1.2.0\",\n                              \"from\": \"ware@>=1.0.1 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ware/-/ware-1.2.0.tgz\",\n                              \"dependencies\": {\n                                \"wrap-fn\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"wrap-fn@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.1.tgz\",\n                                  \"dependencies\": {\n                                    \"co\": {\n                                      \"version\": \"3.1.0\",\n                                      \"from\": \"co@3.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/co/-/co-3.1.0.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"download-status\": {\n                          \"version\": \"2.1.0\",\n                          \"from\": \"download-status@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/download-status/-/download-status-2.1.0.tgz\",\n                          \"dependencies\": {\n                            \"chalk\": {\n                              \"version\": \"0.5.1\",\n                              \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                              \"dependencies\": {\n                                \"ansi-styles\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                                },\n                                \"escape-string-regexp\": {\n                                  \"version\": \"1.0.2\",\n                                  \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                                },\n                                \"has-ansi\": {\n                                  \"version\": \"0.1.0\",\n                                  \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                                  \"dependencies\": {\n                                    \"ansi-regex\": {\n                                      \"version\": \"0.2.1\",\n                                      \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                    }\n                                  }\n                                },\n                                \"strip-ansi\": {\n                                  \"version\": \"0.3.0\",\n                                  \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                                  \"dependencies\": {\n                                    \"ansi-regex\": {\n                                      \"version\": \"0.2.1\",\n                                      \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                                    }\n                                  }\n                                },\n                                \"supports-color\": {\n                                  \"version\": \"0.2.0\",\n                                  \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                                }\n                              }\n                            },\n                            \"lpad-align\": {\n                              \"version\": \"1.0.2\",\n                              \"from\": \"lpad-align@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/lpad-align/-/lpad-align-1.0.2.tgz\",\n                              \"dependencies\": {\n                                \"longest\": {\n                                  \"version\": \"0.2.1\",\n                                  \"from\": \"longest@>=0.2.1 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/longest/-/longest-0.2.1.tgz\"\n                                },\n                                \"lpad\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"lpad@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/lpad/-/lpad-1.0.0.tgz\"\n                                }\n                              }\n                            },\n                            \"object-assign\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"object-assign@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n                            },\n                            \"progress\": {\n                              \"version\": \"1.1.8\",\n                              \"from\": \"progress@>=1.1.8 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/progress/-/progress-1.1.8.tgz\"\n                            }\n                          }\n                        },\n                        \"globby\": {\n                          \"version\": \"0.1.1\",\n                          \"from\": \"globby@>=0.1.1 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/globby/-/globby-0.1.1.tgz\",\n                          \"dependencies\": {\n                            \"array-differ\": {\n                              \"version\": \"0.1.0\",\n                              \"from\": \"array-differ@>=0.1.0 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/array-differ/-/array-differ-0.1.0.tgz\"\n                            },\n                            \"array-union\": {\n                              \"version\": \"0.1.0\",\n                              \"from\": \"array-union@>=0.1.0 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/array-union/-/array-union-0.1.0.tgz\",\n                              \"dependencies\": {\n                                \"array-uniq\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"array-uniq@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/array-uniq/-/array-uniq-0.1.1.tgz\"\n                                }\n                              }\n                            },\n                            \"async\": {\n                              \"version\": \"0.9.0\",\n                              \"from\": \"async@>=0.9.0 <0.10.0\",\n                              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                            },\n                            \"glob\": {\n                              \"version\": \"4.3.1\",\n                              \"from\": \"glob@>=4.0.2 <5.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n                              \"dependencies\": {\n                                \"inflight\": {\n                                  \"version\": \"1.0.4\",\n                                  \"from\": \"inflight@>=1.0.4 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n                                  \"dependencies\": {\n                                    \"wrappy\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                    }\n                                  }\n                                },\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                },\n                                \"minimatch\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n                                  \"dependencies\": {\n                                    \"brace-expansion\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                                      \"dependencies\": {\n                                        \"balanced-match\": {\n                                          \"version\": \"0.2.0\",\n                                          \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                                        },\n                                        \"concat-map\": {\n                                          \"version\": \"0.0.0\",\n                                          \"from\": \"concat-map@0.0.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"once\": {\n                                  \"version\": \"1.3.1\",\n                                  \"from\": \"once@>=1.3.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                                  \"dependencies\": {\n                                    \"wrappy\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"is-path-global\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"is-path-global@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/is-path-global/-/is-path-global-1.0.1.tgz\",\n                          \"dependencies\": {\n                            \"is-path-inside\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"is-path-inside@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz\",\n                              \"dependencies\": {\n                                \"path-is-inside\": {\n                                  \"version\": \"1.0.1\",\n                                  \"from\": \"path-is-inside@>=1.0.1 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.1.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"lnfs\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"lnfs@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lnfs/-/lnfs-1.0.0.tgz\",\n                          \"dependencies\": {\n                            \"mkdirp\": {\n                              \"version\": \"0.5.0\",\n                              \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                              \"dependencies\": {\n                                \"minimist\": {\n                                  \"version\": \"0.0.8\",\n                                  \"from\": \"minimist@0.0.8\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                }\n                              }\n                            },\n                            \"rimraf\": {\n                              \"version\": \"2.2.8\",\n                              \"from\": \"rimraf@>=2.2.8 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                            }\n                          }\n                        },\n                        \"npm-installed\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"npm-installed@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/npm-installed/-/npm-installed-1.0.0.tgz\",\n                          \"dependencies\": {\n                            \"npm-which\": {\n                              \"version\": \"1.0.2\",\n                              \"from\": \"npm-which@>=1.0.1 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/npm-which/-/npm-which-1.0.2.tgz\",\n                              \"dependencies\": {\n                                \"commander\": {\n                                  \"version\": \"2.5.0\",\n                                  \"from\": \"commander@>=2.2.0 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.5.0.tgz\"\n                                },\n                                \"npm-path\": {\n                                  \"version\": \"1.0.1\",\n                                  \"from\": \"npm-path@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/npm-path/-/npm-path-1.0.1.tgz\"\n                                },\n                                \"which\": {\n                                  \"version\": \"1.0.8\",\n                                  \"from\": \"which@>=1.0.5 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.8.tgz\"\n                                }\n                              }\n                            },\n                            \"rc\": {\n                              \"version\": \"0.5.4\",\n                              \"from\": \"rc@>=0.5.1 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/rc/-/rc-0.5.4.tgz\",\n                              \"dependencies\": {\n                                \"minimist\": {\n                                  \"version\": \"0.0.10\",\n                                  \"from\": \"minimist@>=0.0.7 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                                },\n                                \"deep-extend\": {\n                                  \"version\": \"0.2.11\",\n                                  \"from\": \"deep-extend@>=0.2.5 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n                                },\n                                \"strip-json-comments\": {\n                                  \"version\": \"0.1.3\",\n                                  \"from\": \"strip-json-comments@>=0.1.0 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz\"\n                                },\n                                \"ini\": {\n                                  \"version\": \"1.1.0\",\n                                  \"from\": \"ini@>=1.1.0 <1.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.1.0.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"os-filter-obj\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"os-filter-obj@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.0.tgz\"\n                        }\n                      }\n                    },\n                    \"imagemin-log\": {\n                      \"version\": \"1.0.2\",\n                      \"from\": \"imagemin-log@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/imagemin-log/-/imagemin-log-1.0.2.tgz\",\n                      \"dependencies\": {\n                        \"stream-log\": {\n                          \"version\": \"0.2.3\",\n                          \"from\": \"stream-log@>=0.2.1 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/stream-log/-/stream-log-0.2.3.tgz\",\n                          \"dependencies\": {\n                            \"longest\": {\n                              \"version\": \"0.2.1\",\n                              \"from\": \"longest@>=0.2.1 <0.3.0\",\n                              \"resolved\": \"https://registry.npmjs.org/longest/-/longest-0.2.1.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"svgfilter\": {\n              \"version\": \"0.4.0\",\n              \"from\": \"svgfilter@0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/svgfilter/-/svgfilter-0.4.0.tgz\",\n              \"dependencies\": {\n                \"assetgraph\": {\n                  \"version\": \"1.8.0\",\n                  \"from\": \"assetgraph@1.8.0\",\n                  \"resolved\": \"https://registry.npmjs.org/assetgraph/-/assetgraph-1.8.0.tgz\",\n                  \"dependencies\": {\n                    \"accord\": {\n                      \"version\": \"0.11.0\",\n                      \"from\": \"accord@0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/accord/-/accord-0.11.0.tgz\",\n                      \"dependencies\": {\n                        \"fobject\": {\n                          \"version\": \"0.0.0\",\n                          \"from\": \"fobject@0.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/fobject/-/fobject-0.0.0.tgz\"\n                        },\n                        \"indx\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"indx@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/indx/-/indx-0.1.2.tgz\",\n                          \"dependencies\": {\n                            \"coffee-script\": {\n                              \"version\": \"1.7.1\",\n                              \"from\": \"coffee-script@>=1.7.0 <1.8.0\",\n                              \"resolved\": \"https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz\"\n                            },\n                            \"colors\": {\n                              \"version\": \"0.6.2\",\n                              \"from\": \"colors@>=0.6.0 <0.7.0\",\n                              \"resolved\": \"https://registry.npmjs.org/colors/-/colors-0.6.2.tgz\"\n                            }\n                          }\n                        },\n                        \"resolve\": {\n                          \"version\": \"0.7.4\",\n                          \"from\": \"resolve@>=0.7.0 <0.8.0\",\n                          \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz\"\n                        },\n                        \"uglify-js\": {\n                          \"version\": \"2.4.15\",\n                          \"from\": \"uglify-js@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.15.tgz\",\n                          \"dependencies\": {\n                            \"source-map\": {\n                              \"version\": \"0.1.34\",\n                              \"from\": \"source-map@0.1.34\",\n                              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz\",\n                              \"dependencies\": {\n                                \"amdefine\": {\n                                  \"version\": \"0.1.0\",\n                                  \"from\": \"amdefine@>=0.0.4\",\n                                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                                }\n                              }\n                            },\n                            \"optimist\": {\n                              \"version\": \"0.3.7\",\n                              \"from\": \"optimist@>=0.3.5 <0.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n                              \"dependencies\": {\n                                \"wordwrap\": {\n                                  \"version\": \"0.0.2\",\n                                  \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                                }\n                              }\n                            },\n                            \"uglify-to-browserify\": {\n                              \"version\": \"1.0.2\",\n                              \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n                            }\n                          }\n                        },\n                        \"when\": {\n                          \"version\": \"3.6.3\",\n                          \"from\": \"when@>=3.0.0 <4.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/when/-/when-3.6.3.tgz\"\n                        }\n                      }\n                    },\n                    \"createerror\": {\n                      \"version\": \"0.4.1\",\n                      \"from\": \"createerror@0.4.1\",\n                      \"resolved\": \"https://registry.npmjs.org/createerror/-/createerror-0.4.1.tgz\"\n                    },\n                    \"cssmin\": {\n                      \"version\": \"0.3.1\",\n                      \"from\": \"cssmin@0.3.1\",\n                      \"resolved\": \"https://registry.npmjs.org/cssmin/-/cssmin-0.3.1.tgz\"\n                    },\n                    \"cssom-papandreou\": {\n                      \"version\": \"0.2.4-patch6\",\n                      \"from\": \"cssom-papandreou@0.2.4-patch6\",\n                      \"resolved\": \"https://registry.npmjs.org/cssom-papandreou/-/cssom-papandreou-0.2.4-patch6.tgz\"\n                    },\n                    \"glob\": {\n                      \"version\": \"4.0.3\",\n                      \"from\": \"glob@4.0.3\",\n                      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.0.3.tgz\",\n                      \"dependencies\": {\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        },\n                        \"minimatch\": {\n                          \"version\": \"0.3.0\",\n                          \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                          \"dependencies\": {\n                            \"lru-cache\": {\n                              \"version\": \"2.5.0\",\n                              \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                            },\n                            \"sigmund\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                            }\n                          }\n                        },\n                        \"once\": {\n                          \"version\": \"1.3.1\",\n                          \"from\": \"once@>=1.3.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                          \"dependencies\": {\n                            \"wrappy\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                            }\n                          }\n                        },\n                        \"graceful-fs\": {\n                          \"version\": \"3.0.5\",\n                          \"from\": \"graceful-fs@>=3.0.2 <4.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                        }\n                      }\n                    },\n                    \"httperrors\": {\n                      \"version\": \"0.2.0\",\n                      \"from\": \"httperrors@0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/httperrors/-/httperrors-0.2.0.tgz\",\n                      \"dependencies\": {\n                        \"createerror\": {\n                          \"version\": \"0.0.1\",\n                          \"from\": \"createerror@0.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/createerror/-/createerror-0.0.1.tgz\",\n                          \"dependencies\": {\n                            \"xtend\": {\n                              \"version\": \"1.0.3\",\n                              \"from\": \"xtend@1.0.3\",\n                              \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"imageinfo\": {\n                      \"version\": \"1.0.4\",\n                      \"from\": \"imageinfo@1.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/imageinfo/-/imageinfo-1.0.4.tgz\"\n                    },\n                    \"jsdom\": {\n                      \"version\": \"0.11.0\",\n                      \"from\": \"jsdom@0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/jsdom/-/jsdom-0.11.0.tgz\",\n                      \"dependencies\": {\n                        \"htmlparser2\": {\n                          \"version\": \"3.8.2\",\n                          \"from\": \"htmlparser2@>=3.1.5 <4.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz\",\n                          \"dependencies\": {\n                            \"domhandler\": {\n                              \"version\": \"2.3.0\",\n                              \"from\": \"domhandler@>=2.3.0 <2.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz\"\n                            },\n                            \"domutils\": {\n                              \"version\": \"1.5.0\",\n                              \"from\": \"domutils@>=1.5.0 <1.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/domutils/-/domutils-1.5.0.tgz\"\n                            },\n                            \"domelementtype\": {\n                              \"version\": \"1.1.3\",\n                              \"from\": \"domelementtype@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz\"\n                            },\n                            \"readable-stream\": {\n                              \"version\": \"1.1.13\",\n                              \"from\": \"readable-stream@>=1.1.0 <1.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                              \"dependencies\": {\n                                \"core-util-is\": {\n                                  \"version\": \"1.0.1\",\n                                  \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                },\n                                \"isarray\": {\n                                  \"version\": \"0.0.1\",\n                                  \"from\": \"isarray@0.0.1\",\n                                  \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                },\n                                \"string_decoder\": {\n                                  \"version\": \"0.10.31\",\n                                  \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                },\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                }\n                              }\n                            },\n                            \"entities\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"entities@>=1.0.0 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/entities/-/entities-1.0.0.tgz\"\n                            }\n                          }\n                        },\n                        \"nwmatcher\": {\n                          \"version\": \"1.3.3\",\n                          \"from\": \"nwmatcher@>=1.3.2 <1.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.3.tgz\"\n                        },\n                        \"xmlhttprequest\": {\n                          \"version\": \"1.6.0\",\n                          \"from\": \"xmlhttprequest@>=1.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.6.0.tgz\"\n                        },\n                        \"cssom\": {\n                          \"version\": \"0.3.0\",\n                          \"from\": \"cssom@>=0.3.0 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/cssom/-/cssom-0.3.0.tgz\"\n                        },\n                        \"cssstyle\": {\n                          \"version\": \"0.2.22\",\n                          \"from\": \"cssstyle@>=0.2.9 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.22.tgz\"\n                        },\n                        \"contextify\": {\n                          \"version\": \"0.1.9\",\n                          \"from\": \"contextify@>=0.1.5 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/contextify/-/contextify-0.1.9.tgz\",\n                          \"dependencies\": {\n                            \"bindings\": {\n                              \"version\": \"1.2.1\",\n                              \"from\": \"bindings@*\",\n                              \"resolved\": \"https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz\"\n                            },\n                            \"nan\": {\n                              \"version\": \"1.3.0\",\n                              \"from\": \"nan@>=1.3.0 <1.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.3.0.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"lodash\": {\n                      \"version\": \"2.4.1\",\n                      \"from\": \"lodash@2.4.1\",\n                      \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n                    },\n                    \"mkdirp\": {\n                      \"version\": \"0.3.5\",\n                      \"from\": \"mkdirp@0.3.5\",\n                      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz\"\n                    },\n                    \"normalizeurl\": {\n                      \"version\": \"0.1.3\",\n                      \"from\": \"normalizeurl@0.1.3\",\n                      \"resolved\": \"https://registry.npmjs.org/normalizeurl/-/normalizeurl-0.1.3.tgz\"\n                    },\n                    \"optimist\": {\n                      \"version\": \"0.6.1\",\n                      \"from\": \"optimist@0.6.1\",\n                      \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n                      \"dependencies\": {\n                        \"wordwrap\": {\n                          \"version\": \"0.0.2\",\n                          \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                        },\n                        \"minimist\": {\n                          \"version\": \"0.0.10\",\n                          \"from\": \"minimist@>=0.0.1 <0.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                        }\n                      }\n                    },\n                    \"request\": {\n                      \"version\": \"2.9.153\",\n                      \"from\": \"request@2.9.153\",\n                      \"resolved\": \"https://registry.npmjs.org/request/-/request-2.9.153.tgz\"\n                    },\n                    \"setimmediate\": {\n                      \"version\": \"1.0.2\",\n                      \"from\": \"setimmediate@1.0.2\",\n                      \"resolved\": \"https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.2.tgz\"\n                    },\n                    \"source-map\": {\n                      \"version\": \"0.1.33\",\n                      \"from\": \"source-map@0.1.33\",\n                      \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.33.tgz\",\n                      \"dependencies\": {\n                        \"amdefine\": {\n                          \"version\": \"0.1.0\",\n                          \"from\": \"amdefine@>=0.0.4\",\n                          \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                        }\n                      }\n                    },\n                    \"uglify-js-papandreou\": {\n                      \"version\": \"2.4.13-patch1\",\n                      \"from\": \"uglify-js-papandreou@2.4.13-patch1\",\n                      \"resolved\": \"https://registry.npmjs.org/uglify-js-papandreou/-/uglify-js-papandreou-2.4.13-patch1.tgz\",\n                      \"dependencies\": {\n                        \"optimist\": {\n                          \"version\": \"0.3.7\",\n                          \"from\": \"optimist@>=0.3.5 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n                          \"dependencies\": {\n                            \"wordwrap\": {\n                              \"version\": \"0.0.2\",\n                              \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                            }\n                          }\n                        },\n                        \"uglify-to-browserify\": {\n                          \"version\": \"1.0.2\",\n                          \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n                        }\n                      }\n                    },\n                    \"uglifyast\": {\n                      \"version\": \"0.3.1\",\n                      \"from\": \"uglifyast@0.3.1\",\n                      \"resolved\": \"https://registry.npmjs.org/uglifyast/-/uglifyast-0.3.1.tgz\"\n                    },\n                    \"urltools\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"urltools@0.1.1\",\n                      \"resolved\": \"https://registry.npmjs.org/urltools/-/urltools-0.1.1.tgz\",\n                      \"dependencies\": {\n                        \"underscore\": {\n                          \"version\": \"1.5.2\",\n                          \"from\": \"underscore@>=1.5.2 <1.6.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz\"\n                        },\n                        \"glob\": {\n                          \"version\": \"3.2.11\",\n                          \"from\": \"glob@>=3.2.7 <3.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n                          \"dependencies\": {\n                            \"inherits\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                            },\n                            \"minimatch\": {\n                              \"version\": \"0.3.0\",\n                              \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                              \"dependencies\": {\n                                \"lru-cache\": {\n                                  \"version\": \"2.5.0\",\n                                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                                },\n                                \"sigmund\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"xmldom\": {\n                      \"version\": \"0.1.19\",\n                      \"from\": \"xmldom@0.1.19\",\n                      \"resolved\": \"https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz\"\n                    }\n                  }\n                },\n                \"optimist\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"optimist@0.5.2\",\n                  \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.5.2.tgz\",\n                  \"dependencies\": {\n                    \"wordwrap\": {\n                      \"version\": \"0.0.2\",\n                      \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                    }\n                  }\n                },\n                \"passerror\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"passerror@1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/passerror/-/passerror-1.0.1.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"extend\": {\n          \"version\": \"1.2.1\",\n          \"from\": \"extend@1.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend/-/extend-1.2.1.tgz\"\n        },\n        \"jpegtran\": {\n          \"version\": \"0.0.6\",\n          \"from\": \"jpegtran@0.0.6\",\n          \"resolved\": \"https://registry.npmjs.org/jpegtran/-/jpegtran-0.0.6.tgz\",\n          \"dependencies\": {\n            \"memoizeasync\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"memoizeasync@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/memoizeasync/-/memoizeasync-0.0.1.tgz\"\n            },\n            \"jpegtran-bin\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"jpegtran-bin@0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-0.1.0.tgz\"\n            },\n            \"which\": {\n              \"version\": \"1.0.5\",\n              \"from\": \"which@1.0.5\",\n              \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.5.tgz\"\n            }\n          }\n        },\n        \"memoizesync\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"memoizesync@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/memoizesync/-/memoizesync-0.2.0.tgz\",\n          \"dependencies\": {\n            \"lru-cache\": {\n              \"version\": \"2.3.1\",\n              \"from\": \"lru-cache@2.3.1\",\n              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.1.tgz\"\n            }\n          }\n        },\n        \"ngmin\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"ngmin@0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/ngmin/-/ngmin-0.4.0.tgz\",\n          \"dependencies\": {\n            \"astral\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"astral@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/astral/-/astral-0.1.0.tgz\"\n            },\n            \"astral-angular-annotate\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"astral-angular-annotate@>=0.0.1 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/astral-angular-annotate/-/astral-angular-annotate-0.0.2.tgz\",\n              \"dependencies\": {\n                \"astral-pass\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"astral-pass@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/astral-pass/-/astral-pass-0.1.0.tgz\"\n                }\n              }\n            },\n            \"escodegen\": {\n              \"version\": \"0.0.28\",\n              \"from\": \"escodegen@>=0.0.15 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz\",\n              \"dependencies\": {\n                \"estraverse\": {\n                  \"version\": \"1.3.2\",\n                  \"from\": \"estraverse@>=1.3.0 <1.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz\"\n                },\n                \"source-map\": {\n                  \"version\": \"0.1.40\",\n                  \"from\": \"source-map@>=0.1.2\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"esprima\": {\n              \"version\": \"1.0.4\",\n              \"from\": \"esprima@>=1.0.2 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz\"\n            },\n            \"commander\": {\n              \"version\": \"1.1.1\",\n              \"from\": \"commander@>=1.1.1 <1.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/commander/-/commander-1.1.1.tgz\",\n              \"dependencies\": {\n                \"keypress\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"keypress@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz\"\n                }\n              }\n            },\n            \"clone\": {\n              \"version\": \"0.1.19\",\n              \"from\": \"clone@>=0.1.6 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/clone/-/clone-0.1.19.tgz\"\n            }\n          }\n        },\n        \"optimist\": {\n          \"version\": \"0.2.6\",\n          \"from\": \"optimist@0.2.6\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.2.6.tgz\",\n          \"dependencies\": {\n            \"wordwrap\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"wordwrap@>=0.0.1 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n            }\n          }\n        },\n        \"optipng\": {\n          \"version\": \"0.0.6\",\n          \"from\": \"optipng@0.0.6\",\n          \"resolved\": \"https://registry.npmjs.org/optipng/-/optipng-0.0.6.tgz\",\n          \"dependencies\": {\n            \"gettemporaryfilepath\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"gettemporaryfilepath@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/gettemporaryfilepath/-/gettemporaryfilepath-0.0.1.tgz\"\n            },\n            \"memoizeasync\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"memoizeasync@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/memoizeasync/-/memoizeasync-0.0.1.tgz\"\n            },\n            \"optipng-bin\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"optipng-bin@0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.1.0.tgz\"\n            },\n            \"which\": {\n              \"version\": \"1.0.5\",\n              \"from\": \"which@1.0.5\",\n              \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.5.tgz\"\n            }\n          }\n        },\n        \"passerror\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"passerror@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/passerror/-/passerror-1.0.0.tgz\"\n        },\n        \"pngcrush\": {\n          \"version\": \"0.0.5\",\n          \"from\": \"pngcrush@0.0.5\",\n          \"resolved\": \"https://registry.npmjs.org/pngcrush/-/pngcrush-0.0.5.tgz\",\n          \"dependencies\": {\n            \"gettemporaryfilepath\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"gettemporaryfilepath@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/gettemporaryfilepath/-/gettemporaryfilepath-0.0.1.tgz\"\n            }\n          }\n        },\n        \"pngquant\": {\n          \"version\": \"0.1.5\",\n          \"from\": \"pngquant@0.1.5\",\n          \"resolved\": \"https://registry.npmjs.org/pngquant/-/pngquant-0.1.5.tgz\",\n          \"dependencies\": {\n            \"pngquant-bin\": {\n              \"version\": \"0.1.7\",\n              \"from\": \"pngquant-bin@0.1.7\",\n              \"resolved\": \"https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-0.1.7.tgz\",\n              \"dependencies\": {\n                \"bin-wrapper\": {\n                  \"version\": \"0.2.4\",\n                  \"from\": \"bin-wrapper@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-0.2.4.tgz\",\n                  \"dependencies\": {\n                    \"bin-check\": {\n                      \"version\": \"0.1.5\",\n                      \"from\": \"bin-check@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/bin-check/-/bin-check-0.1.5.tgz\"\n                    },\n                    \"download\": {\n                      \"version\": \"0.1.19\",\n                      \"from\": \"download@>=0.1.2 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/download/-/download-0.1.19.tgz\",\n                      \"dependencies\": {\n                        \"decompress\": {\n                          \"version\": \"0.2.5\",\n                          \"from\": \"decompress@>=0.2.5 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/decompress/-/decompress-0.2.5.tgz\",\n                          \"dependencies\": {\n                            \"adm-zip\": {\n                              \"version\": \"0.4.4\",\n                              \"from\": \"adm-zip@>=0.4.3 <0.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz\"\n                            },\n                            \"ext-name\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"ext-name@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ext-name/-/ext-name-1.0.1.tgz\",\n                              \"dependencies\": {\n                                \"ext-list\": {\n                                  \"version\": \"0.2.0\",\n                                  \"from\": \"ext-list@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/ext-list/-/ext-list-0.2.0.tgz\",\n                                  \"dependencies\": {\n                                    \"got\": {\n                                      \"version\": \"0.2.0\",\n                                      \"from\": \"got@>=0.2.0 <0.3.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/got/-/got-0.2.0.tgz\",\n                                      \"dependencies\": {\n                                        \"object-assign\": {\n                                          \"version\": \"0.3.1\",\n                                          \"from\": \"object-assign@>=0.3.0 <0.4.0\",\n                                          \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"underscore.string\": {\n                                  \"version\": \"2.3.3\",\n                                  \"from\": \"underscore.string@>=2.3.3 <2.4.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz\"\n                                }\n                              }\n                            },\n                            \"stream-combiner\": {\n                              \"version\": \"0.0.4\",\n                              \"from\": \"stream-combiner@>=0.0.4 <0.0.5\",\n                              \"resolved\": \"https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz\",\n                              \"dependencies\": {\n                                \"duplexer\": {\n                                  \"version\": \"0.1.1\",\n                                  \"from\": \"duplexer@>=0.1.1 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz\"\n                                }\n                              }\n                            },\n                            \"tar\": {\n                              \"version\": \"0.1.20\",\n                              \"from\": \"tar@>=0.1.18 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/tar/-/tar-0.1.20.tgz\",\n                              \"dependencies\": {\n                                \"block-stream\": {\n                                  \"version\": \"0.0.7\",\n                                  \"from\": \"block-stream@*\",\n                                  \"resolved\": \"https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz\"\n                                },\n                                \"fstream\": {\n                                  \"version\": \"0.1.31\",\n                                  \"from\": \"fstream@>=0.1.28 <0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz\",\n                                  \"dependencies\": {\n                                    \"graceful-fs\": {\n                                      \"version\": \"3.0.5\",\n                                      \"from\": \"graceful-fs@>=3.0.2 <3.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                                    },\n                                    \"mkdirp\": {\n                                      \"version\": \"0.5.0\",\n                                      \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                                      \"dependencies\": {\n                                        \"minimist\": {\n                                          \"version\": \"0.0.8\",\n                                          \"from\": \"minimist@0.0.8\",\n                                          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                        }\n                                      }\n                                    }\n                                  }\n                                },\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"each-async\": {\n                          \"version\": \"0.1.3\",\n                          \"from\": \"each-async@>=0.1.1 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/each-async/-/each-async-0.1.3.tgz\"\n                        },\n                        \"get-stdin\": {\n                          \"version\": \"0.1.0\",\n                          \"from\": \"get-stdin@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-0.1.0.tgz\"\n                        },\n                        \"get-urls\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"get-urls@>=0.1.1 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/get-urls/-/get-urls-0.1.2.tgz\"\n                        },\n                        \"mkdirp\": {\n                          \"version\": \"0.3.5\",\n                          \"from\": \"mkdirp@>=0.3.5 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz\"\n                        },\n                        \"nopt\": {\n                          \"version\": \"2.2.1\",\n                          \"from\": \"nopt@>=2.2.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz\",\n                          \"dependencies\": {\n                            \"abbrev\": {\n                              \"version\": \"1.0.5\",\n                              \"from\": \"abbrev@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n                            }\n                          }\n                        },\n                        \"request\": {\n                          \"version\": \"2.49.0\",\n                          \"from\": \"request@>=2.34.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/request/-/request-2.49.0.tgz\",\n                          \"dependencies\": {\n                            \"bl\": {\n                              \"version\": \"0.9.3\",\n                              \"from\": \"bl@>=0.9.0 <0.10.0\",\n                              \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                              \"dependencies\": {\n                                \"readable-stream\": {\n                                  \"version\": \"1.0.33\",\n                                  \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    },\n                                    \"inherits\": {\n                                      \"version\": \"2.0.1\",\n                                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"caseless\": {\n                              \"version\": \"0.8.0\",\n                              \"from\": \"caseless@>=0.8.0 <0.9.0\",\n                              \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz\"\n                            },\n                            \"forever-agent\": {\n                              \"version\": \"0.5.2\",\n                              \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                            },\n                            \"form-data\": {\n                              \"version\": \"0.1.4\",\n                              \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                              \"dependencies\": {\n                                \"mime\": {\n                                  \"version\": \"1.2.11\",\n                                  \"from\": \"mime@>=1.2.11 <1.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                                },\n                                \"async\": {\n                                  \"version\": \"0.9.0\",\n                                  \"from\": \"async@>=0.9.0 <0.10.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                                }\n                              }\n                            },\n                            \"json-stringify-safe\": {\n                              \"version\": \"5.0.0\",\n                              \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                            },\n                            \"mime-types\": {\n                              \"version\": \"1.0.2\",\n                              \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                            },\n                            \"node-uuid\": {\n                              \"version\": \"1.4.2\",\n                              \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                            },\n                            \"qs\": {\n                              \"version\": \"2.3.3\",\n                              \"from\": \"qs@>=2.3.1 <2.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.3.3.tgz\"\n                            },\n                            \"tunnel-agent\": {\n                              \"version\": \"0.4.0\",\n                              \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                            },\n                            \"tough-cookie\": {\n                              \"version\": \"0.12.1\",\n                              \"from\": \"tough-cookie@>=0.12.0\",\n                              \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n                              \"dependencies\": {\n                                \"punycode\": {\n                                  \"version\": \"1.3.2\",\n                                  \"from\": \"punycode@>=0.2.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                                }\n                              }\n                            },\n                            \"http-signature\": {\n                              \"version\": \"0.10.0\",\n                              \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                              \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                              \"dependencies\": {\n                                \"assert-plus\": {\n                                  \"version\": \"0.1.2\",\n                                  \"from\": \"assert-plus@0.1.2\",\n                                  \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                                },\n                                \"asn1\": {\n                                  \"version\": \"0.1.11\",\n                                  \"from\": \"asn1@0.1.11\",\n                                  \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                                },\n                                \"ctype\": {\n                                  \"version\": \"0.5.2\",\n                                  \"from\": \"ctype@0.5.2\",\n                                  \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                                }\n                              }\n                            },\n                            \"oauth-sign\": {\n                              \"version\": \"0.5.0\",\n                              \"from\": \"oauth-sign@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz\"\n                            },\n                            \"hawk\": {\n                              \"version\": \"1.1.1\",\n                              \"from\": \"hawk@1.1.1\",\n                              \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                              \"dependencies\": {\n                                \"hoek\": {\n                                  \"version\": \"0.9.1\",\n                                  \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                                },\n                                \"boom\": {\n                                  \"version\": \"0.4.2\",\n                                  \"from\": \"boom@>=0.4.0 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                                },\n                                \"cryptiles\": {\n                                  \"version\": \"0.2.2\",\n                                  \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                                },\n                                \"sntp\": {\n                                  \"version\": \"0.2.4\",\n                                  \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                                }\n                              }\n                            },\n                            \"aws-sign2\": {\n                              \"version\": \"0.5.0\",\n                              \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                            },\n                            \"stringstream\": {\n                              \"version\": \"0.0.4\",\n                              \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                            },\n                            \"combined-stream\": {\n                              \"version\": \"0.0.7\",\n                              \"from\": \"combined-stream@>=0.0.5 <0.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                              \"dependencies\": {\n                                \"delayed-stream\": {\n                                  \"version\": \"0.0.5\",\n                                  \"from\": \"delayed-stream@0.0.5\",\n                                  \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"through2\": {\n                          \"version\": \"0.4.2\",\n                          \"from\": \"through2@>=0.4.0 <0.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/through2/-/through2-0.4.2.tgz\",\n                          \"dependencies\": {\n                            \"readable-stream\": {\n                              \"version\": \"1.0.33\",\n                              \"from\": \"readable-stream@>=1.0.17 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                              \"dependencies\": {\n                                \"core-util-is\": {\n                                  \"version\": \"1.0.1\",\n                                  \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                },\n                                \"isarray\": {\n                                  \"version\": \"0.0.1\",\n                                  \"from\": \"isarray@0.0.1\",\n                                  \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                },\n                                \"string_decoder\": {\n                                  \"version\": \"0.10.31\",\n                                  \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                },\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                }\n                              }\n                            },\n                            \"xtend\": {\n                              \"version\": \"2.1.2\",\n                              \"from\": \"xtend@>=2.1.1 <2.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz\",\n                              \"dependencies\": {\n                                \"object-keys\": {\n                                  \"version\": \"0.4.0\",\n                                  \"from\": \"object-keys@>=0.4.0 <0.5.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"executable\": {\n                      \"version\": \"0.1.3\",\n                      \"from\": \"executable@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/executable/-/executable-0.1.3.tgz\"\n                    },\n                    \"find-file\": {\n                      \"version\": \"0.1.4\",\n                      \"from\": \"find-file@>=0.1.2 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/find-file/-/find-file-0.1.4.tgz\"\n                    },\n                    \"mout\": {\n                      \"version\": \"0.9.1\",\n                      \"from\": \"mout@>=0.9.1 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mout/-/mout-0.9.1.tgz\"\n                    },\n                    \"rimraf\": {\n                      \"version\": \"2.2.8\",\n                      \"from\": \"rimraf@>=2.2.6 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                    },\n                    \"tempfile\": {\n                      \"version\": \"0.1.3\",\n                      \"from\": \"tempfile@>=0.1.2 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz\",\n                      \"dependencies\": {\n                        \"uuid\": {\n                          \"version\": \"1.4.2\",\n                          \"from\": \"uuid@>=1.4.0 <1.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"semver\": {\n          \"version\": \"3.0.1\",\n          \"from\": \"semver@3.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/semver/-/semver-3.0.1.tgz\"\n        },\n        \"seq\": {\n          \"version\": \"0.3.5\",\n          \"from\": \"seq@0.3.5\",\n          \"resolved\": \"https://registry.npmjs.org/seq/-/seq-0.3.5.tgz\",\n          \"dependencies\": {\n            \"chainsaw\": {\n              \"version\": \"0.0.9\",\n              \"from\": \"chainsaw@0.0.9\",\n              \"resolved\": \"https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz\",\n              \"dependencies\": {\n                \"traverse\": {\n                  \"version\": \"0.3.9\",\n                  \"from\": \"traverse@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz\"\n                }\n              }\n            },\n            \"hashish\": {\n              \"version\": \"0.0.4\",\n              \"from\": \"hashish@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz\",\n              \"dependencies\": {\n                \"traverse\": {\n                  \"version\": \"0.6.6\",\n                  \"from\": \"traverse@>=0.2.4\",\n                  \"resolved\": \"https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"temp\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"temp@0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/temp/-/temp-0.4.0.tgz\"\n        },\n        \"underscore\": {\n          \"version\": \"1.2.0\",\n          \"from\": \"underscore@1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.2.0.tgz\"\n        },\n        \"urltools\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"urltools@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/urltools/-/urltools-0.2.0.tgz\",\n          \"dependencies\": {\n            \"underscore\": {\n              \"version\": \"1.5.2\",\n              \"from\": \"underscore@1.5.2\",\n              \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz\"\n            },\n            \"glob\": {\n              \"version\": \"3.2.11\",\n              \"from\": \"glob@3.2.11\",\n              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n              \"dependencies\": {\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                },\n                \"minimatch\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                  \"dependencies\": {\n                    \"lru-cache\": {\n                      \"version\": \"2.5.0\",\n                      \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                    },\n                    \"sigmund\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"assetgraph-sprite\": {\n          \"version\": \"0.6.2\",\n          \"from\": \"assetgraph-sprite@0.6.2\",\n          \"resolved\": \"https://registry.npmjs.org/assetgraph-sprite/-/assetgraph-sprite-0.6.2.tgz\",\n          \"dependencies\": {\n            \"passerror\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"passerror@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/passerror/-/passerror-0.0.1.tgz\"\n            },\n            \"underscore\": {\n              \"version\": \"1.4.2\",\n              \"from\": \"underscore@1.4.2\",\n              \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.4.2.tgz\"\n            },\n            \"canvas\": {\n              \"version\": \"1.1.2\",\n              \"from\": \"canvas@1.1.2\",\n              \"resolved\": \"https://registry.npmjs.org/canvas/-/canvas-1.1.2.tgz\",\n              \"dependencies\": {\n                \"nan\": {\n                  \"version\": \"0.4.4\",\n                  \"from\": \"nan@>=0.4.1 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/nan/-/nan-0.4.4.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"histogram\": {\n          \"version\": \"0.1.5\",\n          \"from\": \"histogram@0.1.5\",\n          \"resolved\": \"https://registry.npmjs.org/histogram/-/histogram-0.1.5.tgz\",\n          \"dependencies\": {\n            \"canvas\": {\n              \"version\": \"1.1.6\",\n              \"from\": \"canvas@>=1.1.1 <1.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/canvas/-/canvas-1.1.6.tgz\",\n              \"dependencies\": {\n                \"nan\": {\n                  \"version\": \"1.2.0\",\n                  \"from\": \"nan@>=1.2.0 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.2.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"node-zopfli\": {\n          \"version\": \"1.1.4\",\n          \"from\": \"node-zopfli@1.1.4\",\n          \"resolved\": \"https://registry.npmjs.org/node-zopfli/-/node-zopfli-1.1.4.tgz\",\n          \"dependencies\": {\n            \"commander\": {\n              \"version\": \"2.2.0\",\n              \"from\": \"commander@>=2.2.0 <2.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.2.0.tgz\"\n            },\n            \"buffer-crc32\": {\n              \"version\": \"0.2.5\",\n              \"from\": \"buffer-crc32@>=0.2.1 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz\"\n            },\n            \"async\": {\n              \"version\": \"0.9.0\",\n              \"from\": \"async@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n            },\n            \"lodash\": {\n              \"version\": \"2.4.1\",\n              \"from\": \"lodash@>=2.4.1 <2.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n            },\n            \"nan\": {\n              \"version\": \"1.1.2\",\n              \"from\": \"nan@>=1.1.0 <1.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.1.2.tgz\"\n            },\n            \"node-pre-gyp\": {\n              \"version\": \"0.5.31\",\n              \"from\": \"node-pre-gyp@>=0.5.11 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.5.31.tgz\",\n              \"dependencies\": {\n                \"nopt\": {\n                  \"version\": \"3.0.1\",\n                  \"from\": \"nopt@~3.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz\",\n                  \"dependencies\": {\n                    \"abbrev\": {\n                      \"version\": \"1.0.5\",\n                      \"from\": \"abbrev@1\",\n                      \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n                    }\n                  }\n                },\n                \"npmlog\": {\n                  \"version\": \"0.1.1\",\n                  \"from\": \"npmlog@~0.1.1\",\n                  \"resolved\": \"https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz\",\n                  \"dependencies\": {\n                    \"ansi\": {\n                      \"version\": \"0.3.0\",\n                      \"from\": \"ansi@~0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz\"\n                    }\n                  }\n                },\n                \"request\": {\n                  \"version\": \"2.47.0\",\n                  \"from\": \"request@2.x\",\n                  \"resolved\": \"https://registry.npmjs.org/request/-/request-2.47.0.tgz\",\n                  \"dependencies\": {\n                    \"bl\": {\n                      \"version\": \"0.9.3\",\n                      \"from\": \"bl@~0.9.0\",\n                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                      \"dependencies\": {\n                        \"readable-stream\": {\n                          \"version\": \"1.0.33\",\n                          \"from\": \"readable-stream@~1.0.26\",\n                          \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                          \"dependencies\": {\n                            \"core-util-is\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"core-util-is@~1.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                            },\n                            \"isarray\": {\n                              \"version\": \"0.0.1\",\n                              \"from\": \"isarray@0.0.1\",\n                              \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                            },\n                            \"string_decoder\": {\n                              \"version\": \"0.10.31\",\n                              \"from\": \"string_decoder@~0.10.x\",\n                              \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                            },\n                            \"inherits\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"inherits@~2.0.1\",\n                              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"caseless\": {\n                      \"version\": \"0.6.0\",\n                      \"from\": \"caseless@~0.6.0\",\n                      \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz\"\n                    },\n                    \"forever-agent\": {\n                      \"version\": \"0.5.2\",\n                      \"from\": \"forever-agent@~0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                    },\n                    \"form-data\": {\n                      \"version\": \"0.1.4\",\n                      \"from\": \"form-data@~0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                      \"dependencies\": {\n                        \"mime\": {\n                          \"version\": \"1.2.11\",\n                          \"from\": \"mime@~1.2.11\",\n                          \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                        },\n                        \"async\": {\n                          \"version\": \"0.9.0\",\n                          \"from\": \"async@~0.9.0\",\n                          \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                        }\n                      }\n                    },\n                    \"json-stringify-safe\": {\n                      \"version\": \"5.0.0\",\n                      \"from\": \"json-stringify-safe@~5.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                    },\n                    \"mime-types\": {\n                      \"version\": \"1.0.2\",\n                      \"from\": \"mime-types@~1.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                    },\n                    \"node-uuid\": {\n                      \"version\": \"1.4.1\",\n                      \"from\": \"node-uuid@~1.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz\"\n                    },\n                    \"qs\": {\n                      \"version\": \"2.3.1\",\n                      \"from\": \"qs@~2.3.1\",\n                      \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.3.1.tgz\"\n                    },\n                    \"tunnel-agent\": {\n                      \"version\": \"0.4.0\",\n                      \"from\": \"tunnel-agent@~0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                    },\n                    \"tough-cookie\": {\n                      \"version\": \"0.12.1\",\n                      \"from\": \"tough-cookie@>=0.12.0\",\n                      \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n                      \"dependencies\": {\n                        \"punycode\": {\n                          \"version\": \"1.3.2\",\n                          \"from\": \"punycode@>=0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                        }\n                      }\n                    },\n                    \"http-signature\": {\n                      \"version\": \"0.10.0\",\n                      \"from\": \"http-signature@~0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                      \"dependencies\": {\n                        \"assert-plus\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"assert-plus@0.1.2\",\n                          \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                        },\n                        \"asn1\": {\n                          \"version\": \"0.1.11\",\n                          \"from\": \"asn1@0.1.11\",\n                          \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                        },\n                        \"ctype\": {\n                          \"version\": \"0.5.2\",\n                          \"from\": \"ctype@0.5.2\",\n                          \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                        }\n                      }\n                    },\n                    \"oauth-sign\": {\n                      \"version\": \"0.4.0\",\n                      \"from\": \"oauth-sign@~0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz\"\n                    },\n                    \"hawk\": {\n                      \"version\": \"1.1.1\",\n                      \"from\": \"hawk@1.1.1\",\n                      \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                      \"dependencies\": {\n                        \"hoek\": {\n                          \"version\": \"0.9.1\",\n                          \"from\": \"hoek@0.9.x\",\n                          \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                        },\n                        \"boom\": {\n                          \"version\": \"0.4.2\",\n                          \"from\": \"boom@0.4.x\",\n                          \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                        },\n                        \"cryptiles\": {\n                          \"version\": \"0.2.2\",\n                          \"from\": \"cryptiles@0.2.x\",\n                          \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                        },\n                        \"sntp\": {\n                          \"version\": \"0.2.4\",\n                          \"from\": \"sntp@0.2.x\",\n                          \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                        }\n                      }\n                    },\n                    \"aws-sign2\": {\n                      \"version\": \"0.5.0\",\n                      \"from\": \"aws-sign2@~0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                    },\n                    \"stringstream\": {\n                      \"version\": \"0.0.4\",\n                      \"from\": \"stringstream@~0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                    },\n                    \"combined-stream\": {\n                      \"version\": \"0.0.5\",\n                      \"from\": \"combined-stream@~0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz\",\n                      \"dependencies\": {\n                        \"delayed-stream\": {\n                          \"version\": \"0.0.5\",\n                          \"from\": \"delayed-stream@0.0.5\",\n                          \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"semver\": {\n                  \"version\": \"4.1.0\",\n                  \"from\": \"semver@~4.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/semver/-/semver-4.1.0.tgz\"\n                },\n                \"tar\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"tar@~1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/tar/-/tar-1.0.1.tgz\",\n                  \"dependencies\": {\n                    \"block-stream\": {\n                      \"version\": \"0.0.7\",\n                      \"from\": \"block-stream@*\",\n                      \"resolved\": \"https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz\"\n                    },\n                    \"fstream\": {\n                      \"version\": \"1.0.2\",\n                      \"from\": \"fstream@^1.0.2\",\n                      \"resolved\": \"https://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz\",\n                      \"dependencies\": {\n                        \"graceful-fs\": {\n                          \"version\": \"3.0.4\",\n                          \"from\": \"graceful-fs@3\",\n                          \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz\"\n                        }\n                      }\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@2\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"tar-pack\": {\n                  \"version\": \"2.0.0\",\n                  \"from\": \"tar-pack@~2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz\",\n                  \"dependencies\": {\n                    \"uid-number\": {\n                      \"version\": \"0.0.3\",\n                      \"from\": \"uid-number@0.0.3\",\n                      \"resolved\": \"https://registry.npmjs.org/uid-number/-/uid-number-0.0.3.tgz\"\n                    },\n                    \"once\": {\n                      \"version\": \"1.1.1\",\n                      \"from\": \"once@~1.1.1\",\n                      \"resolved\": \"https://registry.npmjs.org/once/-/once-1.1.1.tgz\"\n                    },\n                    \"debug\": {\n                      \"version\": \"0.7.4\",\n                      \"from\": \"debug@~0.7.2\",\n                      \"resolved\": \"https://registry.npmjs.org/debug/-/debug-0.7.4.tgz\"\n                    },\n                    \"fstream\": {\n                      \"version\": \"0.1.31\",\n                      \"from\": \"fstream@~0.1.22\",\n                      \"resolved\": \"https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz\",\n                      \"dependencies\": {\n                        \"graceful-fs\": {\n                          \"version\": \"3.0.4\",\n                          \"from\": \"graceful-fs@3\",\n                          \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@~2.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    },\n                    \"tar\": {\n                      \"version\": \"0.1.20\",\n                      \"from\": \"tar@~0.1.17\",\n                      \"resolved\": \"https://registry.npmjs.org/tar/-/tar-0.1.20.tgz\",\n                      \"dependencies\": {\n                        \"block-stream\": {\n                          \"version\": \"0.0.7\",\n                          \"from\": \"block-stream@*\",\n                          \"resolved\": \"https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@~2.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    },\n                    \"fstream-ignore\": {\n                      \"version\": \"0.0.7\",\n                      \"from\": \"fstream-ignore@0.0.7\",\n                      \"resolved\": \"https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz\",\n                      \"dependencies\": {\n                        \"minimatch\": {\n                          \"version\": \"0.2.14\",\n                          \"from\": \"minimatch@~0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n                          \"dependencies\": {\n                            \"lru-cache\": {\n                              \"version\": \"2.5.0\",\n                              \"from\": \"lru-cache@2\",\n                              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                            },\n                            \"sigmund\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"sigmund@~1.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                            }\n                          }\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@~2.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    },\n                    \"readable-stream\": {\n                      \"version\": \"1.0.33\",\n                      \"from\": \"readable-stream@~1.0.2\",\n                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                      \"dependencies\": {\n                        \"core-util-is\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"core-util-is@~1.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                        },\n                        \"isarray\": {\n                          \"version\": \"0.0.1\",\n                          \"from\": \"isarray@0.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                        },\n                        \"string_decoder\": {\n                          \"version\": \"0.10.31\",\n                          \"from\": \"string_decoder@~0.10.x\",\n                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@~2.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    },\n                    \"graceful-fs\": {\n                      \"version\": \"1.2.3\",\n                      \"from\": \"graceful-fs@1.2\",\n                      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz\"\n                    }\n                  }\n                },\n                \"mkdirp\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"mkdirp@~0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                  \"dependencies\": {\n                    \"minimist\": {\n                      \"version\": \"0.0.8\",\n                      \"from\": \"minimist@0.0.8\",\n                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                    }\n                  }\n                },\n                \"rc\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"rc@~0.5.1\",\n                  \"resolved\": \"https://registry.npmjs.org/rc/-/rc-0.5.2.tgz\",\n                  \"dependencies\": {\n                    \"minimist\": {\n                      \"version\": \"0.0.10\",\n                      \"from\": \"minimist@~0.0.7\",\n                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                    },\n                    \"deep-extend\": {\n                      \"version\": \"0.2.11\",\n                      \"from\": \"deep-extend@~0.2.5\",\n                      \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n                    },\n                    \"strip-json-comments\": {\n                      \"version\": \"0.1.3\",\n                      \"from\": \"strip-json-comments@0.1.x\",\n                      \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz\"\n                    },\n                    \"ini\": {\n                      \"version\": \"1.1.0\",\n                      \"from\": \"ini@~1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.1.0.tgz\"\n                    }\n                  }\n                },\n                \"rimraf\": {\n                  \"version\": \"2.2.8\",\n                  \"from\": \"rimraf@~2.2.8\",\n                  \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"autoprefixer\": {\n      \"version\": \"4.0.0\",\n      \"from\": \"autoprefixer@>=4.0.0 <5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/autoprefixer/-/autoprefixer-4.0.0.tgz\",\n      \"dependencies\": {\n        \"fs-extra\": {\n          \"version\": \"0.11.1\",\n          \"from\": \"fs-extra@0.11.1\",\n          \"resolved\": \"https://registry.npmjs.org/fs-extra/-/fs-extra-0.11.1.tgz\",\n          \"dependencies\": {\n            \"ncp\": {\n              \"version\": \"0.6.0\",\n              \"from\": \"ncp@>=0.6.0 <0.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-0.6.0.tgz\"\n            },\n            \"mkdirp\": {\n              \"version\": \"0.5.0\",\n              \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n              \"dependencies\": {\n                \"minimist\": {\n                  \"version\": \"0.0.8\",\n                  \"from\": \"minimist@0.0.8\",\n                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                }\n              }\n            },\n            \"jsonfile\": {\n              \"version\": \"2.0.0\",\n              \"from\": \"jsonfile@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/jsonfile/-/jsonfile-2.0.0.tgz\"\n            },\n            \"rimraf\": {\n              \"version\": \"2.2.8\",\n              \"from\": \"rimraf@>=2.2.8 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n            }\n          }\n        },\n        \"postcss\": {\n          \"version\": \"3.0.7\",\n          \"from\": \"postcss@>=3.0.1 <3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/postcss/-/postcss-3.0.7.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.40\",\n              \"from\": \"source-map@>=0.1.8 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"js-base64\": {\n              \"version\": \"2.1.5\",\n              \"from\": \"js-base64@>=2.1.5 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/js-base64/-/js-base64-2.1.5.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"autoprefixer-core\": {\n      \"version\": \"4.0.2\",\n      \"from\": \"autoprefixer-core@>=4.0.1 <5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-4.0.2.tgz\",\n      \"dependencies\": {\n        \"caniuse-db\": {\n          \"version\": \"1.0.30000031\",\n          \"from\": \"caniuse-db@>=1.0.30000030 <2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000031.tgz\"\n        },\n        \"postcss\": {\n          \"version\": \"3.0.7\",\n          \"from\": \"postcss@>=3.0.6 <3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/postcss/-/postcss-3.0.7.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.40\",\n              \"from\": \"source-map@>=0.1.40 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"js-base64\": {\n              \"version\": \"2.1.5\",\n              \"from\": \"js-base64@>=2.1.5 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/js-base64/-/js-base64-2.1.5.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"bower\": {\n      \"version\": \"1.3.12\",\n      \"from\": \"bower@>=1.3.12 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/bower/-/bower-1.3.12.tgz\",\n      \"dependencies\": {\n        \"abbrev\": {\n          \"version\": \"1.0.5\",\n          \"from\": \"abbrev@>=1.0.4 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n        },\n        \"archy\": {\n          \"version\": \"0.0.2\",\n          \"from\": \"archy@0.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/archy/-/archy-0.0.2.tgz\"\n        },\n        \"bower-config\": {\n          \"version\": \"0.5.2\",\n          \"from\": \"bower-config@>=0.5.2 <0.6.0\",\n          \"resolved\": \"https://registry.npmjs.org/bower-config/-/bower-config-0.5.2.tgz\",\n          \"dependencies\": {\n            \"graceful-fs\": {\n              \"version\": \"2.0.3\",\n              \"from\": \"graceful-fs@2.0.3\",\n              \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz\"\n            },\n            \"mout\": {\n              \"version\": \"0.9.1\",\n              \"from\": \"mout@0.9.1\",\n              \"resolved\": \"https://registry.npmjs.org/mout/-/mout-0.9.1.tgz\"\n            },\n            \"optimist\": {\n              \"version\": \"0.6.1\",\n              \"from\": \"optimist@0.6.1\",\n              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n              \"dependencies\": {\n                \"wordwrap\": {\n                  \"version\": \"0.0.2\",\n                  \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                },\n                \"minimist\": {\n                  \"version\": \"0.0.10\",\n                  \"from\": \"minimist@0.0.10\",\n                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n                }\n              }\n            },\n            \"osenv\": {\n              \"version\": \"0.0.3\",\n              \"from\": \"osenv@0.0.3\",\n              \"resolved\": \"https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz\"\n            }\n          }\n        },\n        \"bower-endpoint-parser\": {\n          \"version\": \"0.2.2\",\n          \"from\": \"bower-endpoint-parser@>=0.2.2 <0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz\"\n        },\n        \"bower-json\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"bower-json@>=0.4.0 <0.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/bower-json/-/bower-json-0.4.0.tgz\",\n          \"dependencies\": {\n            \"deep-extend\": {\n              \"version\": \"0.2.11\",\n              \"from\": \"deep-extend@0.2.11\",\n              \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz\"\n            },\n            \"graceful-fs\": {\n              \"version\": \"2.0.3\",\n              \"from\": \"graceful-fs@2.0.3\",\n              \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz\"\n            },\n            \"intersect\": {\n              \"version\": \"0.0.3\",\n              \"from\": \"intersect@0.0.3\",\n              \"resolved\": \"https://registry.npmjs.org/intersect/-/intersect-0.0.3.tgz\"\n            }\n          }\n        },\n        \"bower-logger\": {\n          \"version\": \"0.2.2\",\n          \"from\": \"bower-logger@>=0.2.2 <0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/bower-logger/-/bower-logger-0.2.2.tgz\"\n        },\n        \"bower-registry-client\": {\n          \"version\": \"0.2.1\",\n          \"from\": \"bower-registry-client@>=0.2.0 <0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/bower-registry-client/-/bower-registry-client-0.2.1.tgz\",\n          \"dependencies\": {\n            \"async\": {\n              \"version\": \"0.2.10\",\n              \"from\": \"async@0.2.10\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n            },\n            \"graceful-fs\": {\n              \"version\": \"2.0.3\",\n              \"from\": \"graceful-fs@2.0.3\",\n              \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz\"\n            },\n            \"lru-cache\": {\n              \"version\": \"2.3.1\",\n              \"from\": \"lru-cache@2.3.1\",\n              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.1.tgz\"\n            },\n            \"request\": {\n              \"version\": \"2.27.0\",\n              \"from\": \"request@2.27.0\",\n              \"resolved\": \"https://registry.npmjs.org/request/-/request-2.27.0.tgz\",\n              \"dependencies\": {\n                \"qs\": {\n                  \"version\": \"0.6.6\",\n                  \"from\": \"qs@>=0.6.0 <0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/qs/-/qs-0.6.6.tgz\"\n                },\n                \"json-stringify-safe\": {\n                  \"version\": \"5.0.0\",\n                  \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                },\n                \"forever-agent\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                },\n                \"tunnel-agent\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"tunnel-agent@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz\"\n                },\n                \"http-signature\": {\n                  \"version\": \"0.10.0\",\n                  \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                  \"dependencies\": {\n                    \"assert-plus\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"assert-plus@0.1.2\",\n                      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                    },\n                    \"asn1\": {\n                      \"version\": \"0.1.11\",\n                      \"from\": \"asn1@0.1.11\",\n                      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                    },\n                    \"ctype\": {\n                      \"version\": \"0.5.2\",\n                      \"from\": \"ctype@0.5.2\",\n                      \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                    }\n                  }\n                },\n                \"hawk\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"hawk@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz\",\n                  \"dependencies\": {\n                    \"hoek\": {\n                      \"version\": \"0.9.1\",\n                      \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                    },\n                    \"boom\": {\n                      \"version\": \"0.4.2\",\n                      \"from\": \"boom@>=0.4.0 <0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                    },\n                    \"cryptiles\": {\n                      \"version\": \"0.2.2\",\n                      \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                    },\n                    \"sntp\": {\n                      \"version\": \"0.2.4\",\n                      \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                    }\n                  }\n                },\n                \"aws-sign\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"aws-sign@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz\"\n                },\n                \"oauth-sign\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"oauth-sign@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz\"\n                },\n                \"cookie-jar\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"cookie-jar@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz\"\n                },\n                \"node-uuid\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                },\n                \"mime\": {\n                  \"version\": \"1.2.11\",\n                  \"from\": \"mime@>=1.2.9 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                },\n                \"form-data\": {\n                  \"version\": \"0.1.4\",\n                  \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                  \"dependencies\": {\n                    \"combined-stream\": {\n                      \"version\": \"0.0.7\",\n                      \"from\": \"combined-stream@>=0.0.4 <0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                      \"dependencies\": {\n                        \"delayed-stream\": {\n                          \"version\": \"0.0.5\",\n                          \"from\": \"delayed-stream@0.0.5\",\n                          \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                        }\n                      }\n                    },\n                    \"async\": {\n                      \"version\": \"0.9.0\",\n                      \"from\": \"async@>=0.9.0 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"request-replay\": {\n              \"version\": \"0.2.0\",\n              \"from\": \"request-replay@0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/request-replay/-/request-replay-0.2.0.tgz\",\n              \"dependencies\": {\n                \"retry\": {\n                  \"version\": \"0.6.1\",\n                  \"from\": \"retry@>=0.6.0 <0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/retry/-/retry-0.6.1.tgz\"\n                }\n              }\n            },\n            \"mkdirp\": {\n              \"version\": \"0.3.5\",\n              \"from\": \"mkdirp@0.3.5\",\n              \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz\"\n            }\n          }\n        },\n        \"cardinal\": {\n          \"version\": \"0.4.0\",\n          \"from\": \"cardinal@0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/cardinal/-/cardinal-0.4.0.tgz\",\n          \"dependencies\": {\n            \"redeyed\": {\n              \"version\": \"0.4.4\",\n              \"from\": \"redeyed@>=0.4.0 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz\",\n              \"dependencies\": {\n                \"esprima\": {\n                  \"version\": \"1.0.4\",\n                  \"from\": \"esprima@>=1.0.4 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"chalk\": {\n          \"version\": \"0.5.0\",\n          \"from\": \"chalk@0.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.0.tgz\",\n          \"dependencies\": {\n            \"ansi-styles\": {\n              \"version\": \"1.1.0\",\n              \"from\": \"ansi-styles@>=1.1.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n            },\n            \"escape-string-regexp\": {\n              \"version\": \"1.0.2\",\n              \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n            },\n            \"has-ansi\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"has-ansi@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n              \"dependencies\": {\n                \"ansi-regex\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                }\n              }\n            },\n            \"strip-ansi\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"strip-ansi@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n              \"dependencies\": {\n                \"ansi-regex\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                }\n              }\n            },\n            \"supports-color\": {\n              \"version\": \"0.2.0\",\n              \"from\": \"supports-color@>=0.2.0 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n            }\n          }\n        },\n        \"chmodr\": {\n          \"version\": \"0.1.0\",\n          \"from\": \"chmodr@0.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/chmodr/-/chmodr-0.1.0.tgz\"\n        },\n        \"decompress-zip\": {\n          \"version\": \"0.0.8\",\n          \"from\": \"decompress-zip@0.0.8\",\n          \"resolved\": \"https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.0.8.tgz\",\n          \"dependencies\": {\n            \"q\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"q@1.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/q/-/q-1.0.1.tgz\"\n            },\n            \"mkpath\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"mkpath@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz\"\n            },\n            \"binary\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"binary@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/binary/-/binary-0.3.0.tgz\",\n              \"dependencies\": {\n                \"chainsaw\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"chainsaw@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz\",\n                  \"dependencies\": {\n                    \"traverse\": {\n                      \"version\": \"0.3.9\",\n                      \"from\": \"traverse@0.3.9\",\n                      \"resolved\": \"https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz\"\n                    }\n                  }\n                },\n                \"buffers\": {\n                  \"version\": \"0.1.1\",\n                  \"from\": \"buffers@>=0.1.1 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz\"\n                }\n              }\n            },\n            \"touch\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"touch@0.0.2\",\n              \"resolved\": \"https://registry.npmjs.org/touch/-/touch-0.0.2.tgz\",\n              \"dependencies\": {\n                \"nopt\": {\n                  \"version\": \"1.0.10\",\n                  \"from\": \"nopt@>=1.0.10 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz\",\n                  \"dependencies\": {\n                    \"abbrev\": {\n                      \"version\": \"1.0.5\",\n                      \"from\": \"abbrev@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"readable-stream\": {\n              \"version\": \"1.1.13\",\n              \"from\": \"readable-stream@1.1.13\",\n              \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n              \"dependencies\": {\n                \"core-util-is\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                },\n                \"isarray\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"isarray@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                },\n                \"string_decoder\": {\n                  \"version\": \"0.10.31\",\n                  \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                },\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                }\n              }\n            },\n            \"nopt\": {\n              \"version\": \"2.2.1\",\n              \"from\": \"nopt@2.2.1\",\n              \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz\",\n              \"dependencies\": {\n                \"abbrev\": {\n                  \"version\": \"1.0.5\",\n                  \"from\": \"abbrev@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"fstream\": {\n          \"version\": \"1.0.3\",\n          \"from\": \"fstream@>=1.0.2 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/fstream/-/fstream-1.0.3.tgz\",\n          \"dependencies\": {\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.0 <2.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            }\n          }\n        },\n        \"fstream-ignore\": {\n          \"version\": \"1.0.2\",\n          \"from\": \"fstream-ignore@>=1.0.1 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz\",\n          \"dependencies\": {\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            },\n            \"minimatch\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n              \"dependencies\": {\n                \"brace-expansion\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                  \"dependencies\": {\n                    \"balanced-match\": {\n                      \"version\": \"0.2.0\",\n                      \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                    },\n                    \"concat-map\": {\n                      \"version\": \"0.0.0\",\n                      \"from\": \"concat-map@0.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"glob\": {\n          \"version\": \"4.0.6\",\n          \"from\": \"glob@4.0.6\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.0.6.tgz\",\n          \"dependencies\": {\n            \"graceful-fs\": {\n              \"version\": \"3.0.5\",\n              \"from\": \"graceful-fs@>=3.0.2 <4.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n            },\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.1 <2.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            },\n            \"minimatch\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"minimatch@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz\",\n              \"dependencies\": {\n                \"sigmund\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                }\n              }\n            },\n            \"once\": {\n              \"version\": \"1.3.1\",\n              \"from\": \"once@>=1.3.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n              \"dependencies\": {\n                \"wrappy\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"handlebars\": {\n          \"version\": \"2.0.0\",\n          \"from\": \"handlebars@>=2.0.0 <2.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/handlebars/-/handlebars-2.0.0.tgz\",\n          \"dependencies\": {\n            \"optimist\": {\n              \"version\": \"0.3.7\",\n              \"from\": \"optimist@0.3.7\",\n              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n              \"dependencies\": {\n                \"wordwrap\": {\n                  \"version\": \"0.0.2\",\n                  \"from\": \"wordwrap@>=0.0.1 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                }\n              }\n            },\n            \"uglify-js\": {\n              \"version\": \"2.3.6\",\n              \"from\": \"uglify-js@2.3.6\",\n              \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz\",\n              \"dependencies\": {\n                \"async\": {\n                  \"version\": \"0.2.10\",\n                  \"from\": \"async@>=0.2.6 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n                },\n                \"source-map\": {\n                  \"version\": \"0.1.40\",\n                  \"from\": \"source-map@>=0.1.7 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"inquirer\": {\n          \"version\": \"0.7.1\",\n          \"from\": \"inquirer@0.7.1\",\n          \"resolved\": \"https://registry.npmjs.org/inquirer/-/inquirer-0.7.1.tgz\",\n          \"dependencies\": {\n            \"cli-color\": {\n              \"version\": \"0.3.2\",\n              \"from\": \"cli-color@>=0.3.2 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz\",\n              \"dependencies\": {\n                \"d\": {\n                  \"version\": \"0.1.1\",\n                  \"from\": \"d@>=0.1.1 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/d/-/d-0.1.1.tgz\"\n                },\n                \"es5-ext\": {\n                  \"version\": \"0.10.4\",\n                  \"from\": \"es5-ext@>=0.10.2 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.4.tgz\",\n                  \"dependencies\": {\n                    \"es6-iterator\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"es6-iterator@>=0.1.1 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.2.tgz\"\n                    },\n                    \"es6-symbol\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"es6-symbol@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/es6-symbol/-/es6-symbol-0.1.1.tgz\"\n                    }\n                  }\n                },\n                \"memoizee\": {\n                  \"version\": \"0.3.8\",\n                  \"from\": \"memoizee@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/memoizee/-/memoizee-0.3.8.tgz\",\n                  \"dependencies\": {\n                    \"es6-weak-map\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"es6-weak-map@>=0.1.2 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.2.tgz\",\n                      \"dependencies\": {\n                        \"es6-iterator\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"es6-iterator@>=0.1.1 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.2.tgz\"\n                        },\n                        \"es6-symbol\": {\n                          \"version\": \"0.1.1\",\n                          \"from\": \"es6-symbol@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/es6-symbol/-/es6-symbol-0.1.1.tgz\"\n                        }\n                      }\n                    },\n                    \"event-emitter\": {\n                      \"version\": \"0.3.1\",\n                      \"from\": \"event-emitter@>=0.3.1 <0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.1.tgz\"\n                    },\n                    \"lru-queue\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"lru-queue@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz\"\n                    },\n                    \"next-tick\": {\n                      \"version\": \"0.2.2\",\n                      \"from\": \"next-tick@>=0.2.2 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz\"\n                    }\n                  }\n                },\n                \"timers-ext\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"timers-ext@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.0.tgz\",\n                  \"dependencies\": {\n                    \"next-tick\": {\n                      \"version\": \"0.2.2\",\n                      \"from\": \"next-tick@>=0.2.2 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"figures\": {\n              \"version\": \"1.3.5\",\n              \"from\": \"figures@>=1.3.2 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/figures/-/figures-1.3.5.tgz\"\n            },\n            \"lodash\": {\n              \"version\": \"2.4.1\",\n              \"from\": \"lodash@>=2.4.1 <2.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n            },\n            \"mute-stream\": {\n              \"version\": \"0.0.4\",\n              \"from\": \"mute-stream@0.0.4\",\n              \"resolved\": \"https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz\"\n            },\n            \"readline2\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"readline2@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/readline2/-/readline2-0.1.0.tgz\",\n              \"dependencies\": {\n                \"chalk\": {\n                  \"version\": \"0.4.0\",\n                  \"from\": \"chalk@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz\",\n                  \"dependencies\": {\n                    \"has-color\": {\n                      \"version\": \"0.1.7\",\n                      \"from\": \"has-color@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz\"\n                    },\n                    \"ansi-styles\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"ansi-styles@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz\"\n                    },\n                    \"strip-ansi\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"strip-ansi@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"rx\": {\n              \"version\": \"2.3.20\",\n              \"from\": \"rx@>=2.2.27 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/rx/-/rx-2.3.20.tgz\"\n            },\n            \"through\": {\n              \"version\": \"2.3.6\",\n              \"from\": \"through@>=2.3.4 <2.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/through/-/through-2.3.6.tgz\"\n            }\n          }\n        },\n        \"insight\": {\n          \"version\": \"0.4.3\",\n          \"from\": \"insight@0.4.3\",\n          \"resolved\": \"https://registry.npmjs.org/insight/-/insight-0.4.3.tgz\",\n          \"dependencies\": {\n            \"async\": {\n              \"version\": \"0.9.0\",\n              \"from\": \"async@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n            },\n            \"chalk\": {\n              \"version\": \"0.5.1\",\n              \"from\": \"chalk@>=0.5.1 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n              \"dependencies\": {\n                \"ansi-styles\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"ansi-styles@1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                },\n                \"escape-string-regexp\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                },\n                \"has-ansi\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"has-ansi@0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                  \"dependencies\": {\n                    \"ansi-regex\": {\n                      \"version\": \"0.2.1\",\n                      \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                    }\n                  }\n                },\n                \"strip-ansi\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"strip-ansi@0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                  \"dependencies\": {\n                    \"ansi-regex\": {\n                      \"version\": \"0.2.1\",\n                      \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                    }\n                  }\n                },\n                \"supports-color\": {\n                  \"version\": \"0.2.0\",\n                  \"from\": \"supports-color@0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                }\n              }\n            },\n            \"configstore\": {\n              \"version\": \"0.3.1\",\n              \"from\": \"configstore@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/configstore/-/configstore-0.3.1.tgz\",\n              \"dependencies\": {\n                \"js-yaml\": {\n                  \"version\": \"3.0.2\",\n                  \"from\": \"js-yaml@3.0.2\",\n                  \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.0.2.tgz\",\n                  \"dependencies\": {\n                    \"argparse\": {\n                      \"version\": \"0.1.16\",\n                      \"from\": \"argparse@>=0.1.11 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz\",\n                      \"dependencies\": {\n                        \"underscore\": {\n                          \"version\": \"1.7.0\",\n                          \"from\": \"underscore@>=1.7.0 <1.8.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz\"\n                        },\n                        \"underscore.string\": {\n                          \"version\": \"2.4.0\",\n                          \"from\": \"underscore.string@>=2.4.0 <2.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz\"\n                        }\n                      }\n                    },\n                    \"esprima\": {\n                      \"version\": \"1.0.4\",\n                      \"from\": \"esprima@>=1.0.2 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz\"\n                    }\n                  }\n                },\n                \"object-assign\": {\n                  \"version\": \"0.3.1\",\n                  \"from\": \"object-assign@0.3.1\",\n                  \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz\"\n                },\n                \"uuid\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"uuid@1.4.2\",\n                  \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz\"\n                }\n              }\n            },\n            \"inquirer\": {\n              \"version\": \"0.6.0\",\n              \"from\": \"inquirer@0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/inquirer/-/inquirer-0.6.0.tgz\",\n              \"dependencies\": {\n                \"cli-color\": {\n                  \"version\": \"0.3.2\",\n                  \"from\": \"cli-color@>=0.3.2 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz\",\n                  \"dependencies\": {\n                    \"d\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"d@>=0.1.1 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/d/-/d-0.1.1.tgz\"\n                    },\n                    \"es5-ext\": {\n                      \"version\": \"0.10.4\",\n                      \"from\": \"es5-ext@>=0.10.2 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.4.tgz\",\n                      \"dependencies\": {\n                        \"es6-iterator\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"es6-iterator@>=0.1.1 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.2.tgz\"\n                        },\n                        \"es6-symbol\": {\n                          \"version\": \"0.1.1\",\n                          \"from\": \"es6-symbol@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/es6-symbol/-/es6-symbol-0.1.1.tgz\"\n                        }\n                      }\n                    },\n                    \"memoizee\": {\n                      \"version\": \"0.3.8\",\n                      \"from\": \"memoizee@>=0.3.0 <0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/memoizee/-/memoizee-0.3.8.tgz\",\n                      \"dependencies\": {\n                        \"es6-weak-map\": {\n                          \"version\": \"0.1.2\",\n                          \"from\": \"es6-weak-map@>=0.1.2 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.2.tgz\",\n                          \"dependencies\": {\n                            \"es6-iterator\": {\n                              \"version\": \"0.1.2\",\n                              \"from\": \"es6-iterator@>=0.1.1 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.2.tgz\"\n                            },\n                            \"es6-symbol\": {\n                              \"version\": \"0.1.1\",\n                              \"from\": \"es6-symbol@>=0.1.0 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/es6-symbol/-/es6-symbol-0.1.1.tgz\"\n                            }\n                          }\n                        },\n                        \"event-emitter\": {\n                          \"version\": \"0.3.1\",\n                          \"from\": \"event-emitter@>=0.3.1 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.1.tgz\"\n                        },\n                        \"lru-queue\": {\n                          \"version\": \"0.1.0\",\n                          \"from\": \"lru-queue@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz\"\n                        },\n                        \"next-tick\": {\n                          \"version\": \"0.2.2\",\n                          \"from\": \"next-tick@>=0.2.2 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz\"\n                        }\n                      }\n                    },\n                    \"timers-ext\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"timers-ext@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.0.tgz\",\n                      \"dependencies\": {\n                        \"next-tick\": {\n                          \"version\": \"0.2.2\",\n                          \"from\": \"next-tick@>=0.2.2 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"lodash\": {\n                  \"version\": \"2.4.1\",\n                  \"from\": \"lodash@>=2.4.1 <2.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n                },\n                \"mute-stream\": {\n                  \"version\": \"0.0.4\",\n                  \"from\": \"mute-stream@0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz\"\n                },\n                \"readline2\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"readline2@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readline2/-/readline2-0.1.0.tgz\",\n                  \"dependencies\": {\n                    \"chalk\": {\n                      \"version\": \"0.4.0\",\n                      \"from\": \"chalk@>=0.4.0 <0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz\",\n                      \"dependencies\": {\n                        \"has-color\": {\n                          \"version\": \"0.1.7\",\n                          \"from\": \"has-color@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz\"\n                        },\n                        \"ansi-styles\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"ansi-styles@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz\"\n                        },\n                        \"strip-ansi\": {\n                          \"version\": \"0.1.1\",\n                          \"from\": \"strip-ansi@>=0.1.0 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"rx\": {\n                  \"version\": \"2.3.20\",\n                  \"from\": \"rx@>=2.2.27 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/rx/-/rx-2.3.20.tgz\"\n                },\n                \"through\": {\n                  \"version\": \"2.3.6\",\n                  \"from\": \"through@>=2.3.4 <2.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/through/-/through-2.3.6.tgz\"\n                }\n              }\n            },\n            \"lodash.debounce\": {\n              \"version\": \"2.4.1\",\n              \"from\": \"lodash.debounce@>=2.4.1 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-2.4.1.tgz\",\n              \"dependencies\": {\n                \"lodash.isfunction\": {\n                  \"version\": \"2.4.1\",\n                  \"from\": \"lodash.isfunction@>=2.4.1 <2.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz\"\n                },\n                \"lodash.isobject\": {\n                  \"version\": \"2.4.1\",\n                  \"from\": \"lodash.isobject@>=2.4.1 <2.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz\",\n                  \"dependencies\": {\n                    \"lodash._objecttypes\": {\n                      \"version\": \"2.4.1\",\n                      \"from\": \"lodash._objecttypes@>=2.4.1 <2.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz\"\n                    }\n                  }\n                },\n                \"lodash.now\": {\n                  \"version\": \"2.4.1\",\n                  \"from\": \"lodash.now@>=2.4.1 <2.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lodash.now/-/lodash.now-2.4.1.tgz\",\n                  \"dependencies\": {\n                    \"lodash._isnative\": {\n                      \"version\": \"2.4.1\",\n                      \"from\": \"lodash._isnative@>=2.4.1 <2.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"object-assign\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"object-assign@1.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz\"\n            },\n            \"os-name\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"os-name@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/os-name/-/os-name-1.0.1.tgz\",\n              \"dependencies\": {\n                \"osx-release\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"osx-release@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/osx-release/-/osx-release-1.0.0.tgz\"\n                }\n              }\n            },\n            \"request\": {\n              \"version\": \"2.49.0\",\n              \"from\": \"request@2.49.0\",\n              \"resolved\": \"https://registry.npmjs.org/request/-/request-2.49.0.tgz\",\n              \"dependencies\": {\n                \"bl\": {\n                  \"version\": \"0.9.3\",\n                  \"from\": \"bl@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                  \"dependencies\": {\n                    \"readable-stream\": {\n                      \"version\": \"1.0.33\",\n                      \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                      \"dependencies\": {\n                        \"core-util-is\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                        },\n                        \"isarray\": {\n                          \"version\": \"0.0.1\",\n                          \"from\": \"isarray@0.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                        },\n                        \"string_decoder\": {\n                          \"version\": \"0.10.31\",\n                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"caseless\": {\n                  \"version\": \"0.8.0\",\n                  \"from\": \"caseless@>=0.8.0 <0.9.0\",\n                  \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz\"\n                },\n                \"forever-agent\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                },\n                \"form-data\": {\n                  \"version\": \"0.1.4\",\n                  \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                  \"dependencies\": {\n                    \"mime\": {\n                      \"version\": \"1.2.11\",\n                      \"from\": \"mime@>=1.2.11 <1.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                    }\n                  }\n                },\n                \"json-stringify-safe\": {\n                  \"version\": \"5.0.0\",\n                  \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                },\n                \"mime-types\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                },\n                \"node-uuid\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                },\n                \"qs\": {\n                  \"version\": \"2.3.3\",\n                  \"from\": \"qs@>=2.3.1 <2.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.3.3.tgz\"\n                },\n                \"tunnel-agent\": {\n                  \"version\": \"0.4.0\",\n                  \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                },\n                \"http-signature\": {\n                  \"version\": \"0.10.0\",\n                  \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                  \"dependencies\": {\n                    \"assert-plus\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"assert-plus@0.1.2\",\n                      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                    },\n                    \"asn1\": {\n                      \"version\": \"0.1.11\",\n                      \"from\": \"asn1@0.1.11\",\n                      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                    },\n                    \"ctype\": {\n                      \"version\": \"0.5.2\",\n                      \"from\": \"ctype@0.5.2\",\n                      \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                    }\n                  }\n                },\n                \"oauth-sign\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"oauth-sign@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz\"\n                },\n                \"hawk\": {\n                  \"version\": \"1.1.1\",\n                  \"from\": \"hawk@1.1.1\",\n                  \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                  \"dependencies\": {\n                    \"hoek\": {\n                      \"version\": \"0.9.1\",\n                      \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                    },\n                    \"boom\": {\n                      \"version\": \"0.4.2\",\n                      \"from\": \"boom@>=0.4.0 <0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                    },\n                    \"cryptiles\": {\n                      \"version\": \"0.2.2\",\n                      \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                    },\n                    \"sntp\": {\n                      \"version\": \"0.2.4\",\n                      \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                    }\n                  }\n                },\n                \"aws-sign2\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                },\n                \"stringstream\": {\n                  \"version\": \"0.0.4\",\n                  \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                },\n                \"combined-stream\": {\n                  \"version\": \"0.0.7\",\n                  \"from\": \"combined-stream@>=0.0.5 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                  \"dependencies\": {\n                    \"delayed-stream\": {\n                      \"version\": \"0.0.5\",\n                      \"from\": \"delayed-stream@0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"tough-cookie\": {\n              \"version\": \"0.12.1\",\n              \"from\": \"tough-cookie@>=0.12.1 <0.13.0\",\n              \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n              \"dependencies\": {\n                \"punycode\": {\n                  \"version\": \"1.3.2\",\n                  \"from\": \"punycode@>=0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"is-root\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"is-root@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz\"\n        },\n        \"junk\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"junk@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/junk/-/junk-1.0.0.tgz\"\n        },\n        \"lockfile\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"lockfile@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/lockfile/-/lockfile-1.0.0.tgz\"\n        },\n        \"lru-cache\": {\n          \"version\": \"2.5.0\",\n          \"from\": \"lru-cache@>=2.5.0 <2.6.0\",\n          \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n        },\n        \"mout\": {\n          \"version\": \"0.9.1\",\n          \"from\": \"mout@0.9.1\",\n          \"resolved\": \"https://registry.npmjs.org/mout/-/mout-0.9.1.tgz\"\n        },\n        \"nopt\": {\n          \"version\": \"3.0.1\",\n          \"from\": \"nopt@>=3.0.0 <3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz\"\n        },\n        \"osenv\": {\n          \"version\": \"0.1.0\",\n          \"from\": \"osenv@0.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/osenv/-/osenv-0.1.0.tgz\"\n        },\n        \"p-throttler\": {\n          \"version\": \"0.1.0\",\n          \"from\": \"p-throttler@0.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/p-throttler/-/p-throttler-0.1.0.tgz\",\n          \"dependencies\": {\n            \"q\": {\n              \"version\": \"0.9.7\",\n              \"from\": \"q@>=0.9.2 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/q/-/q-0.9.7.tgz\"\n            }\n          }\n        },\n        \"promptly\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"promptly@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/promptly/-/promptly-0.2.0.tgz\",\n          \"dependencies\": {\n            \"read\": {\n              \"version\": \"1.0.5\",\n              \"from\": \"read@>=1.0.4 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/read/-/read-1.0.5.tgz\",\n              \"dependencies\": {\n                \"mute-stream\": {\n                  \"version\": \"0.0.4\",\n                  \"from\": \"mute-stream@>=0.0.4 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"q\": {\n          \"version\": \"1.0.1\",\n          \"from\": \"q@1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/q/-/q-1.0.1.tgz\"\n        },\n        \"request\": {\n          \"version\": \"2.42.0\",\n          \"from\": \"request@2.42.0\",\n          \"resolved\": \"https://registry.npmjs.org/request/-/request-2.42.0.tgz\",\n          \"dependencies\": {\n            \"bl\": {\n              \"version\": \"0.9.3\",\n              \"from\": \"bl@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n              \"dependencies\": {\n                \"readable-stream\": {\n                  \"version\": \"1.0.33\",\n                  \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"caseless\": {\n              \"version\": \"0.6.0\",\n              \"from\": \"caseless@>=0.6.0 <0.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz\"\n            },\n            \"forever-agent\": {\n              \"version\": \"0.5.2\",\n              \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n            },\n            \"qs\": {\n              \"version\": \"1.2.2\",\n              \"from\": \"qs@>=1.2.0 <1.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/qs/-/qs-1.2.2.tgz\"\n            },\n            \"json-stringify-safe\": {\n              \"version\": \"5.0.0\",\n              \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n            },\n            \"mime-types\": {\n              \"version\": \"1.0.2\",\n              \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n            },\n            \"node-uuid\": {\n              \"version\": \"1.4.2\",\n              \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n            },\n            \"tunnel-agent\": {\n              \"version\": \"0.4.0\",\n              \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n            },\n            \"tough-cookie\": {\n              \"version\": \"0.12.1\",\n              \"from\": \"tough-cookie@>=0.12.0\",\n              \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n              \"dependencies\": {\n                \"punycode\": {\n                  \"version\": \"1.3.2\",\n                  \"from\": \"punycode@>=0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                }\n              }\n            },\n            \"form-data\": {\n              \"version\": \"0.1.4\",\n              \"from\": \"form-data@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n              \"dependencies\": {\n                \"combined-stream\": {\n                  \"version\": \"0.0.7\",\n                  \"from\": \"combined-stream@>=0.0.4 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                  \"dependencies\": {\n                    \"delayed-stream\": {\n                      \"version\": \"0.0.5\",\n                      \"from\": \"delayed-stream@0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                    }\n                  }\n                },\n                \"mime\": {\n                  \"version\": \"1.2.11\",\n                  \"from\": \"mime@>=1.2.11 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                },\n                \"async\": {\n                  \"version\": \"0.9.0\",\n                  \"from\": \"async@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                }\n              }\n            },\n            \"http-signature\": {\n              \"version\": \"0.10.0\",\n              \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n              \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n              \"dependencies\": {\n                \"assert-plus\": {\n                  \"version\": \"0.1.2\",\n                  \"from\": \"assert-plus@0.1.2\",\n                  \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                },\n                \"asn1\": {\n                  \"version\": \"0.1.11\",\n                  \"from\": \"asn1@0.1.11\",\n                  \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                },\n                \"ctype\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"ctype@0.5.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                }\n              }\n            },\n            \"oauth-sign\": {\n              \"version\": \"0.4.0\",\n              \"from\": \"oauth-sign@>=0.4.0 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz\"\n            },\n            \"hawk\": {\n              \"version\": \"1.1.1\",\n              \"from\": \"hawk@1.1.1\",\n              \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n              \"dependencies\": {\n                \"hoek\": {\n                  \"version\": \"0.9.1\",\n                  \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                },\n                \"boom\": {\n                  \"version\": \"0.4.2\",\n                  \"from\": \"boom@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                },\n                \"cryptiles\": {\n                  \"version\": \"0.2.2\",\n                  \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                },\n                \"sntp\": {\n                  \"version\": \"0.2.4\",\n                  \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                }\n              }\n            },\n            \"aws-sign2\": {\n              \"version\": \"0.5.0\",\n              \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n            },\n            \"stringstream\": {\n              \"version\": \"0.0.4\",\n              \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n            }\n          }\n        },\n        \"request-progress\": {\n          \"version\": \"0.3.0\",\n          \"from\": \"request-progress@0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/request-progress/-/request-progress-0.3.0.tgz\",\n          \"dependencies\": {\n            \"throttleit\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"throttleit@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz\"\n            }\n          }\n        },\n        \"retry\": {\n          \"version\": \"0.6.0\",\n          \"from\": \"retry@0.6.0\",\n          \"resolved\": \"https://registry.npmjs.org/retry/-/retry-0.6.0.tgz\"\n        },\n        \"rimraf\": {\n          \"version\": \"2.2.8\",\n          \"from\": \"rimraf@>=2.2.0 <2.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n        },\n        \"semver\": {\n          \"version\": \"2.3.2\",\n          \"from\": \"semver@2.3.2\",\n          \"resolved\": \"https://registry.npmjs.org/semver/-/semver-2.3.2.tgz\"\n        },\n        \"shell-quote\": {\n          \"version\": \"1.4.2\",\n          \"from\": \"shell-quote@>=1.4.1 <1.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/shell-quote/-/shell-quote-1.4.2.tgz\",\n          \"dependencies\": {\n            \"jsonify\": {\n              \"version\": \"0.0.0\",\n              \"from\": \"jsonify@>=0.0.0 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz\"\n            },\n            \"array-filter\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"array-filter@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz\"\n            },\n            \"array-reduce\": {\n              \"version\": \"0.0.0\",\n              \"from\": \"array-reduce@>=0.0.0 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz\"\n            },\n            \"array-map\": {\n              \"version\": \"0.0.0\",\n              \"from\": \"array-map@>=0.0.0 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz\"\n            }\n          }\n        },\n        \"stringify-object\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"stringify-object@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/stringify-object/-/stringify-object-1.0.0.tgz\"\n        },\n        \"tar-fs\": {\n          \"version\": \"0.5.2\",\n          \"from\": \"tar-fs@0.5.2\",\n          \"resolved\": \"https://registry.npmjs.org/tar-fs/-/tar-fs-0.5.2.tgz\",\n          \"dependencies\": {\n            \"mkdirp\": {\n              \"version\": \"0.5.0\",\n              \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n              \"dependencies\": {\n                \"minimist\": {\n                  \"version\": \"0.0.8\",\n                  \"from\": \"minimist@0.0.8\",\n                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                }\n              }\n            },\n            \"pump\": {\n              \"version\": \"0.3.5\",\n              \"from\": \"pump@>=0.3.5 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/pump/-/pump-0.3.5.tgz\",\n              \"dependencies\": {\n                \"once\": {\n                  \"version\": \"1.2.0\",\n                  \"from\": \"once@>=1.2.0 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/once/-/once-1.2.0.tgz\"\n                },\n                \"end-of-stream\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"end-of-stream@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz\",\n                  \"dependencies\": {\n                    \"once\": {\n                      \"version\": \"1.3.1\",\n                      \"from\": \"once@>=1.3.0 <1.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                      \"dependencies\": {\n                        \"wrappy\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"tar-stream\": {\n              \"version\": \"0.4.7\",\n              \"from\": \"tar-stream@>=0.4.6 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-0.4.7.tgz\",\n              \"dependencies\": {\n                \"bl\": {\n                  \"version\": \"0.9.3\",\n                  \"from\": \"bl@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                },\n                \"end-of-stream\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                  \"dependencies\": {\n                    \"once\": {\n                      \"version\": \"1.3.1\",\n                      \"from\": \"once@>=1.3.0 <1.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                      \"dependencies\": {\n                        \"wrappy\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"readable-stream\": {\n                  \"version\": \"1.0.33\",\n                  \"from\": \"readable-stream@>=1.0.27-1 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"xtend\": {\n                  \"version\": \"4.0.0\",\n                  \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"tmp\": {\n          \"version\": \"0.0.23\",\n          \"from\": \"tmp@0.0.23\",\n          \"resolved\": \"https://registry.npmjs.org/tmp/-/tmp-0.0.23.tgz\"\n        },\n        \"update-notifier\": {\n          \"version\": \"0.2.0\",\n          \"from\": \"update-notifier@0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/update-notifier/-/update-notifier-0.2.0.tgz\",\n          \"dependencies\": {\n            \"configstore\": {\n              \"version\": \"0.3.1\",\n              \"from\": \"configstore@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/configstore/-/configstore-0.3.1.tgz\",\n              \"dependencies\": {\n                \"graceful-fs\": {\n                  \"version\": \"3.0.5\",\n                  \"from\": \"graceful-fs@>=3.0.1 <3.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                },\n                \"js-yaml\": {\n                  \"version\": \"3.0.2\",\n                  \"from\": \"js-yaml@>=3.0.1 <3.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.0.2.tgz\",\n                  \"dependencies\": {\n                    \"argparse\": {\n                      \"version\": \"0.1.16\",\n                      \"from\": \"argparse@>=0.1.11 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz\",\n                      \"dependencies\": {\n                        \"underscore\": {\n                          \"version\": \"1.7.0\",\n                          \"from\": \"underscore@>=1.7.0 <1.8.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz\"\n                        },\n                        \"underscore.string\": {\n                          \"version\": \"2.4.0\",\n                          \"from\": \"underscore.string@>=2.4.0 <2.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz\"\n                        }\n                      }\n                    },\n                    \"esprima\": {\n                      \"version\": \"1.0.4\",\n                      \"from\": \"esprima@>=1.0.4 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz\"\n                    }\n                  }\n                },\n                \"mkdirp\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                  \"dependencies\": {\n                    \"minimist\": {\n                      \"version\": \"0.0.8\",\n                      \"from\": \"minimist@0.0.8\",\n                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                    }\n                  }\n                },\n                \"object-assign\": {\n                  \"version\": \"0.3.1\",\n                  \"from\": \"object-assign@>=0.3.1 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz\"\n                },\n                \"uuid\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"uuid@>=1.4.1 <1.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz\"\n                }\n              }\n            },\n            \"latest-version\": {\n              \"version\": \"0.2.0\",\n              \"from\": \"latest-version@>=0.2.0 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/latest-version/-/latest-version-0.2.0.tgz\",\n              \"dependencies\": {\n                \"package-json\": {\n                  \"version\": \"0.2.0\",\n                  \"from\": \"package-json@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/package-json/-/package-json-0.2.0.tgz\",\n                  \"dependencies\": {\n                    \"got\": {\n                      \"version\": \"0.3.0\",\n                      \"from\": \"got@>=0.3.0 <0.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/got/-/got-0.3.0.tgz\",\n                      \"dependencies\": {\n                        \"object-assign\": {\n                          \"version\": \"0.3.1\",\n                          \"from\": \"object-assign@>=0.3.0 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz\"\n                        }\n                      }\n                    },\n                    \"registry-url\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"registry-url@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/registry-url/-/registry-url-0.1.1.tgz\",\n                      \"dependencies\": {\n                        \"npmconf\": {\n                          \"version\": \"2.1.1\",\n                          \"from\": \"npmconf@>=2.0.1 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz\",\n                          \"dependencies\": {\n                            \"config-chain\": {\n                              \"version\": \"1.1.8\",\n                              \"from\": \"config-chain@>=1.1.8 <1.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz\",\n                              \"dependencies\": {\n                                \"proto-list\": {\n                                  \"version\": \"1.2.3\",\n                                  \"from\": \"proto-list@>=1.2.1 <1.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz\"\n                                }\n                              }\n                            },\n                            \"inherits\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"inherits@>=2.0.0 <2.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                            },\n                            \"ini\": {\n                              \"version\": \"1.3.2\",\n                              \"from\": \"ini@>=1.2.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.3.2.tgz\"\n                            },\n                            \"mkdirp\": {\n                              \"version\": \"0.5.0\",\n                              \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                              \"dependencies\": {\n                                \"minimist\": {\n                                  \"version\": \"0.0.8\",\n                                  \"from\": \"minimist@0.0.8\",\n                                  \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                                }\n                              }\n                            },\n                            \"once\": {\n                              \"version\": \"1.3.1\",\n                              \"from\": \"once@>=1.3.0 <1.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                              \"dependencies\": {\n                                \"wrappy\": {\n                                  \"version\": \"1.0.1\",\n                                  \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                                }\n                              }\n                            },\n                            \"uid-number\": {\n                              \"version\": \"0.0.5\",\n                              \"from\": \"uid-number@0.0.5\",\n                              \"resolved\": \"https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"semver-diff\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"semver-diff@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/semver-diff/-/semver-diff-0.1.0.tgz\"\n            },\n            \"string-length\": {\n              \"version\": \"0.1.2\",\n              \"from\": \"string-length@>=0.1.2 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/string-length/-/string-length-0.1.2.tgz\",\n              \"dependencies\": {\n                \"strip-ansi\": {\n                  \"version\": \"0.2.2\",\n                  \"from\": \"strip-ansi@>=0.2.1 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.2.2.tgz\",\n                  \"dependencies\": {\n                    \"ansi-regex\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"ansi-regex@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.1.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"which\": {\n          \"version\": \"1.0.8\",\n          \"from\": \"which@>=1.0.5 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.8.tgz\"\n        }\n      }\n    },\n    \"connect\": {\n      \"version\": \"3.3.3\",\n      \"from\": \"connect@>=3.3.0 <4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/connect/-/connect-3.3.3.tgz\",\n      \"dependencies\": {\n        \"debug\": {\n          \"version\": \"2.1.0\",\n          \"from\": \"debug@>=2.1.0 <2.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.1.0.tgz\",\n          \"dependencies\": {\n            \"ms\": {\n              \"version\": \"0.6.2\",\n              \"from\": \"ms@0.6.2\",\n              \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n            }\n          }\n        },\n        \"finalhandler\": {\n          \"version\": \"0.3.2\",\n          \"from\": \"finalhandler@0.3.2\",\n          \"resolved\": \"https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.2.tgz\",\n          \"dependencies\": {\n            \"escape-html\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"escape-html@1.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n            },\n            \"on-finished\": {\n              \"version\": \"2.1.1\",\n              \"from\": \"on-finished@>=2.1.1 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.1.tgz\",\n              \"dependencies\": {\n                \"ee-first\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"ee-first@1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"parseurl\": {\n          \"version\": \"1.3.0\",\n          \"from\": \"parseurl@>=1.3.0 <1.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz\"\n        },\n        \"utils-merge\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"utils-merge@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz\"\n        }\n      }\n    },\n    \"fb-flo\": {\n      \"version\": \"0.3.1\",\n      \"from\": \"fb-flo@>=0.3.0 <0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/fb-flo/-/fb-flo-0.3.1.tgz\",\n      \"dependencies\": {\n        \"websocket\": {\n          \"version\": \"1.0.14\",\n          \"from\": \"websocket@>=1.0.8 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/websocket/-/websocket-1.0.14.tgz\",\n          \"dependencies\": {\n            \"debug\": {\n              \"version\": \"2.1.0\",\n              \"from\": \"debug@>=2.1.0 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.1.0.tgz\",\n              \"dependencies\": {\n                \"ms\": {\n                  \"version\": \"0.6.2\",\n                  \"from\": \"ms@0.6.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n                }\n              }\n            },\n            \"nan\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"nan@1.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.0.0.tgz\"\n            },\n            \"typedarray-to-buffer\": {\n              \"version\": \"3.0.0\",\n              \"from\": \"typedarray-to-buffer@>=3.0.0 <3.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.0.0.tgz\",\n              \"dependencies\": {\n                \"is-typedarray\": {\n                  \"version\": \"0.0.0\",\n                  \"from\": \"is-typedarray@0.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/is-typedarray/-/is-typedarray-0.0.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"sane\": {\n          \"version\": \"0.7.1\",\n          \"from\": \"sane@0.7.1\",\n          \"resolved\": \"https://registry.npmjs.org/sane/-/sane-0.7.1.tgz\",\n          \"dependencies\": {\n            \"walker\": {\n              \"version\": \"1.0.6\",\n              \"from\": \"walker@>=1.0.5 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/walker/-/walker-1.0.6.tgz\",\n              \"dependencies\": {\n                \"makeerror\": {\n                  \"version\": \"1.0.8\",\n                  \"from\": \"makeerror@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/makeerror/-/makeerror-1.0.8.tgz\",\n                  \"dependencies\": {\n                    \"tmpl\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"tmpl@>=1.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/tmpl/-/tmpl-1.0.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"minimatch\": {\n              \"version\": \"0.2.14\",\n              \"from\": \"minimatch@>=0.2.14 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n              \"dependencies\": {\n                \"lru-cache\": {\n                  \"version\": \"2.5.0\",\n                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                },\n                \"sigmund\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                }\n              }\n            },\n            \"watch\": {\n              \"version\": \"0.10.0\",\n              \"from\": \"watch@>=0.10.0 <0.11.0\",\n              \"resolved\": \"https://registry.npmjs.org/watch/-/watch-0.10.0.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"glob\": {\n      \"version\": \"4.3.1\",\n      \"from\": \"glob@>=4.0.6 <5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n      \"dependencies\": {\n        \"inflight\": {\n          \"version\": \"1.0.4\",\n          \"from\": \"inflight@>=1.0.4 <2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n          \"dependencies\": {\n            \"wrappy\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n            }\n          }\n        },\n        \"inherits\": {\n          \"version\": \"2.0.1\",\n          \"from\": \"inherits@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n        },\n        \"minimatch\": {\n          \"version\": \"2.0.1\",\n          \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n          \"dependencies\": {\n            \"brace-expansion\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n              \"dependencies\": {\n                \"balanced-match\": {\n                  \"version\": \"0.2.0\",\n                  \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                },\n                \"concat-map\": {\n                  \"version\": \"0.0.0\",\n                  \"from\": \"concat-map@0.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"once\": {\n          \"version\": \"1.3.1\",\n          \"from\": \"once@>=1.3.0 <2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n          \"dependencies\": {\n            \"wrappy\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"graceful-fs\": {\n      \"version\": \"3.0.5\",\n      \"from\": \"graceful-fs@>=3.0.5 <4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n    },\n    \"jasmine-core\": {\n      \"version\": \"2.1.3\",\n      \"from\": \"jasmine-core@>=2.1.2 <3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.1.3.tgz\"\n    },\n    \"jshint\": {\n      \"version\": \"2.5.10\",\n      \"from\": \"jshint@>=2.5.6 <3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/jshint/-/jshint-2.5.10.tgz\",\n      \"dependencies\": {\n        \"cli\": {\n          \"version\": \"0.6.5\",\n          \"from\": \"cli@>=0.6.0 <0.7.0\",\n          \"resolved\": \"https://registry.npmjs.org/cli/-/cli-0.6.5.tgz\",\n          \"dependencies\": {\n            \"glob\": {\n              \"version\": \"3.2.11\",\n              \"from\": \"glob@3.2.11\",\n              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n              \"dependencies\": {\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                },\n                \"minimatch\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                  \"dependencies\": {\n                    \"lru-cache\": {\n                      \"version\": \"2.5.0\",\n                      \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                    },\n                    \"sigmund\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"console-browserify\": {\n          \"version\": \"1.1.0\",\n          \"from\": \"console-browserify@>=1.1.0 <1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz\",\n          \"dependencies\": {\n            \"date-now\": {\n              \"version\": \"0.1.4\",\n              \"from\": \"date-now@0.1.4\",\n              \"resolved\": \"https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz\"\n            }\n          }\n        },\n        \"exit\": {\n          \"version\": \"0.1.2\",\n          \"from\": \"exit@>=0.1.0 <0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/exit/-/exit-0.1.2.tgz\"\n        },\n        \"htmlparser2\": {\n          \"version\": \"3.8.2\",\n          \"from\": \"htmlparser2@>=3.8.0 <3.9.0\",\n          \"resolved\": \"https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz\",\n          \"dependencies\": {\n            \"domhandler\": {\n              \"version\": \"2.3.0\",\n              \"from\": \"domhandler@>=2.3.0 <2.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz\"\n            },\n            \"domutils\": {\n              \"version\": \"1.5.0\",\n              \"from\": \"domutils@>=1.5.0 <1.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/domutils/-/domutils-1.5.0.tgz\"\n            },\n            \"domelementtype\": {\n              \"version\": \"1.1.3\",\n              \"from\": \"domelementtype@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz\"\n            },\n            \"readable-stream\": {\n              \"version\": \"1.1.13\",\n              \"from\": \"readable-stream@1.1.13\",\n              \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n              \"dependencies\": {\n                \"core-util-is\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                },\n                \"isarray\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"isarray@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                },\n                \"string_decoder\": {\n                  \"version\": \"0.10.31\",\n                  \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                },\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                }\n              }\n            },\n            \"entities\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"entities@1.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/entities/-/entities-1.0.0.tgz\"\n            }\n          }\n        },\n        \"minimatch\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"minimatch@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz\",\n          \"dependencies\": {\n            \"lru-cache\": {\n              \"version\": \"2.5.0\",\n              \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n            },\n            \"sigmund\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n            }\n          }\n        },\n        \"shelljs\": {\n          \"version\": \"0.3.0\",\n          \"from\": \"shelljs@>=0.3.0 <0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz\"\n        },\n        \"strip-json-comments\": {\n          \"version\": \"1.0.2\",\n          \"from\": \"strip-json-comments@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz\"\n        },\n        \"underscore\": {\n          \"version\": \"1.6.0\",\n          \"from\": \"underscore@1.6.0\",\n          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz\"\n        }\n      }\n    },\n    \"karma\": {\n      \"version\": \"0.12.28\",\n      \"from\": \"karma@>=0.12.24 <0.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma/-/karma-0.12.28.tgz\",\n      \"dependencies\": {\n        \"di\": {\n          \"version\": \"0.0.1\",\n          \"from\": \"di@>=0.0.1 <0.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/di/-/di-0.0.1.tgz\"\n        },\n        \"socket.io\": {\n          \"version\": \"0.9.17\",\n          \"from\": \"socket.io@0.9.17\",\n          \"resolved\": \"https://registry.npmjs.org/socket.io/-/socket.io-0.9.17.tgz\",\n          \"dependencies\": {\n            \"socket.io-client\": {\n              \"version\": \"0.9.16\",\n              \"from\": \"socket.io-client@0.9.16\",\n              \"resolved\": \"https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.16.tgz\",\n              \"dependencies\": {\n                \"uglify-js\": {\n                  \"version\": \"1.2.5\",\n                  \"from\": \"uglify-js@1.2.5\",\n                  \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz\"\n                },\n                \"ws\": {\n                  \"version\": \"0.4.32\",\n                  \"from\": \"ws@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ws/-/ws-0.4.32.tgz\",\n                  \"dependencies\": {\n                    \"commander\": {\n                      \"version\": \"2.1.0\",\n                      \"from\": \"commander@>=2.1.0 <2.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.1.0.tgz\"\n                    },\n                    \"nan\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"nan@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.0.0.tgz\"\n                    },\n                    \"tinycolor\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"tinycolor@>=0.0.0 <1.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz\"\n                    },\n                    \"options\": {\n                      \"version\": \"0.0.6\",\n                      \"from\": \"options@>=0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/options/-/options-0.0.6.tgz\"\n                    }\n                  }\n                },\n                \"xmlhttprequest\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"xmlhttprequest@1.4.2\",\n                  \"resolved\": \"https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz\"\n                },\n                \"active-x-obfuscator\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"active-x-obfuscator@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz\",\n                  \"dependencies\": {\n                    \"zeparser\": {\n                      \"version\": \"0.0.5\",\n                      \"from\": \"zeparser@0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"policyfile\": {\n              \"version\": \"0.0.4\",\n              \"from\": \"policyfile@0.0.4\",\n              \"resolved\": \"https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz\"\n            },\n            \"base64id\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"base64id@0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz\"\n            },\n            \"redis\": {\n              \"version\": \"0.7.3\",\n              \"from\": \"redis@0.7.3\",\n              \"resolved\": \"https://registry.npmjs.org/redis/-/redis-0.7.3.tgz\"\n            }\n          }\n        },\n        \"chokidar\": {\n          \"version\": \"0.12.0\",\n          \"from\": \"chokidar@>=0.8.2\",\n          \"resolved\": \"https://registry.npmjs.org/chokidar/-/chokidar-0.12.0.tgz\",\n          \"dependencies\": {\n            \"readdirp\": {\n              \"version\": \"1.2.0\",\n              \"from\": \"readdirp@>=1.2.0 <1.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/readdirp/-/readdirp-1.2.0.tgz\",\n              \"dependencies\": {\n                \"graceful-fs\": {\n                  \"version\": \"2.0.3\",\n                  \"from\": \"graceful-fs@2.0.3\",\n                  \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz\"\n                },\n                \"minimatch\": {\n                  \"version\": \"0.2.14\",\n                  \"from\": \"minimatch@0.2.14\",\n                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n                  \"dependencies\": {\n                    \"lru-cache\": {\n                      \"version\": \"2.5.0\",\n                      \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                    },\n                    \"sigmund\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                    }\n                  }\n                },\n                \"readable-stream\": {\n                  \"version\": \"1.0.33\",\n                  \"from\": \"readable-stream@>=1.0.26-2 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.0 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"async-each\": {\n              \"version\": \"0.1.6\",\n              \"from\": \"async-each@>=0.1.5 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz\"\n            },\n            \"fsevents\": {\n              \"version\": \"0.3.1\",\n              \"from\": \"fsevents@>=0.3.1 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/fsevents/-/fsevents-0.3.1.tgz\",\n              \"dependencies\": {\n                \"nan\": {\n                  \"version\": \"1.3.0\",\n                  \"from\": \"nan@1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/nan/-/nan-1.3.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"glob\": {\n          \"version\": \"3.2.11\",\n          \"from\": \"glob@3.2.11\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n          \"dependencies\": {\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            },\n            \"minimatch\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n              \"dependencies\": {\n                \"lru-cache\": {\n                  \"version\": \"2.5.0\",\n                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                },\n                \"sigmund\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"minimatch\": {\n          \"version\": \"0.2.14\",\n          \"from\": \"minimatch@0.2.14\",\n          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n          \"dependencies\": {\n            \"lru-cache\": {\n              \"version\": \"2.5.0\",\n              \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n            },\n            \"sigmund\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n            }\n          }\n        },\n        \"http-proxy\": {\n          \"version\": \"0.10.4\",\n          \"from\": \"http-proxy@0.10.4\",\n          \"resolved\": \"https://registry.npmjs.org/http-proxy/-/http-proxy-0.10.4.tgz\",\n          \"dependencies\": {\n            \"pkginfo\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"pkginfo@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz\"\n            },\n            \"utile\": {\n              \"version\": \"0.2.1\",\n              \"from\": \"utile@>=0.2.1 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/utile/-/utile-0.2.1.tgz\",\n              \"dependencies\": {\n                \"async\": {\n                  \"version\": \"0.2.10\",\n                  \"from\": \"async@>=0.2.9 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n                },\n                \"deep-equal\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"deep-equal@*\",\n                  \"resolved\": \"https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.1.tgz\"\n                },\n                \"i\": {\n                  \"version\": \"0.3.2\",\n                  \"from\": \"i@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/i/-/i-0.3.2.tgz\"\n                },\n                \"mkdirp\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"mkdirp@>=0.0.0 <1.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n                  \"dependencies\": {\n                    \"minimist\": {\n                      \"version\": \"0.0.8\",\n                      \"from\": \"minimist@0.0.8\",\n                      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n                    }\n                  }\n                },\n                \"ncp\": {\n                  \"version\": \"0.4.2\",\n                  \"from\": \"ncp@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"optimist\": {\n          \"version\": \"0.6.1\",\n          \"from\": \"optimist@>=0.6.0 <0.7.0\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n          \"dependencies\": {\n            \"wordwrap\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n            },\n            \"minimist\": {\n              \"version\": \"0.0.10\",\n              \"from\": \"minimist@0.0.10\",\n              \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n            }\n          }\n        },\n        \"rimraf\": {\n          \"version\": \"2.2.8\",\n          \"from\": \"rimraf@>=2.2.5 <2.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n        },\n        \"q\": {\n          \"version\": \"0.9.7\",\n          \"from\": \"q@0.9.7\",\n          \"resolved\": \"https://registry.npmjs.org/q/-/q-0.9.7.tgz\"\n        },\n        \"colors\": {\n          \"version\": \"0.6.2\",\n          \"from\": \"colors@0.6.2\",\n          \"resolved\": \"https://registry.npmjs.org/colors/-/colors-0.6.2.tgz\"\n        },\n        \"log4js\": {\n          \"version\": \"0.6.21\",\n          \"from\": \"log4js@>=0.6.3 <0.7.0\",\n          \"resolved\": \"https://registry.npmjs.org/log4js/-/log4js-0.6.21.tgz\",\n          \"dependencies\": {\n            \"async\": {\n              \"version\": \"0.2.10\",\n              \"from\": \"async@0.2.10\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n            },\n            \"readable-stream\": {\n              \"version\": \"1.0.33\",\n              \"from\": \"readable-stream@>=1.0.2 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n              \"dependencies\": {\n                \"core-util-is\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                },\n                \"isarray\": {\n                  \"version\": \"0.0.1\",\n                  \"from\": \"isarray@0.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                },\n                \"string_decoder\": {\n                  \"version\": \"0.10.31\",\n                  \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                },\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                }\n              }\n            },\n            \"semver\": {\n              \"version\": \"1.1.4\",\n              \"from\": \"semver@1.1.4\",\n              \"resolved\": \"https://registry.npmjs.org/semver/-/semver-1.1.4.tgz\"\n            }\n          }\n        },\n        \"useragent\": {\n          \"version\": \"2.0.10\",\n          \"from\": \"useragent@2.0.10\",\n          \"resolved\": \"https://registry.npmjs.org/useragent/-/useragent-2.0.10.tgz\",\n          \"dependencies\": {\n            \"lru-cache\": {\n              \"version\": \"2.2.4\",\n              \"from\": \"lru-cache@>=2.2.0 <2.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz\"\n            }\n          }\n        },\n        \"graceful-fs\": {\n          \"version\": \"2.0.3\",\n          \"from\": \"graceful-fs@2.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz\"\n        },\n        \"connect\": {\n          \"version\": \"2.26.6\",\n          \"from\": \"connect@2.26.6\",\n          \"resolved\": \"https://registry.npmjs.org/connect/-/connect-2.26.6.tgz\",\n          \"dependencies\": {\n            \"basic-auth-connect\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"basic-auth-connect@1.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz\"\n            },\n            \"body-parser\": {\n              \"version\": \"1.8.4\",\n              \"from\": \"body-parser@>=1.8.4 <1.9.0\",\n              \"resolved\": \"https://registry.npmjs.org/body-parser/-/body-parser-1.8.4.tgz\",\n              \"dependencies\": {\n                \"iconv-lite\": {\n                  \"version\": \"0.4.4\",\n                  \"from\": \"iconv-lite@0.4.4\",\n                  \"resolved\": \"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.4.tgz\"\n                },\n                \"on-finished\": {\n                  \"version\": \"2.1.0\",\n                  \"from\": \"on-finished@2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz\",\n                  \"dependencies\": {\n                    \"ee-first\": {\n                      \"version\": \"1.0.5\",\n                      \"from\": \"ee-first@1.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz\"\n                    }\n                  }\n                },\n                \"raw-body\": {\n                  \"version\": \"1.3.0\",\n                  \"from\": \"raw-body@1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/raw-body/-/raw-body-1.3.0.tgz\"\n                }\n              }\n            },\n            \"bytes\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"bytes@1.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz\"\n            },\n            \"cookie\": {\n              \"version\": \"0.1.2\",\n              \"from\": \"cookie@0.1.2\",\n              \"resolved\": \"https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz\"\n            },\n            \"cookie-parser\": {\n              \"version\": \"1.3.3\",\n              \"from\": \"cookie-parser@>=1.3.3 <1.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.3.tgz\"\n            },\n            \"cookie-signature\": {\n              \"version\": \"1.0.5\",\n              \"from\": \"cookie-signature@1.0.5\",\n              \"resolved\": \"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz\"\n            },\n            \"compression\": {\n              \"version\": \"1.1.2\",\n              \"from\": \"compression@>=1.1.2 <1.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/compression/-/compression-1.1.2.tgz\",\n              \"dependencies\": {\n                \"accepts\": {\n                  \"version\": \"1.1.3\",\n                  \"from\": \"accepts@>=1.1.2 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/accepts/-/accepts-1.1.3.tgz\",\n                  \"dependencies\": {\n                    \"mime-types\": {\n                      \"version\": \"2.0.3\",\n                      \"from\": \"mime-types@>=2.0.3 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.0.3.tgz\",\n                      \"dependencies\": {\n                        \"mime-db\": {\n                          \"version\": \"1.2.0\",\n                          \"from\": \"mime-db@>=1.2.0 <1.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.2.0.tgz\"\n                        }\n                      }\n                    },\n                    \"negotiator\": {\n                      \"version\": \"0.4.9\",\n                      \"from\": \"negotiator@0.4.9\",\n                      \"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz\"\n                    }\n                  }\n                },\n                \"compressible\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"compressible@>=2.0.1 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/compressible/-/compressible-2.0.1.tgz\",\n                  \"dependencies\": {\n                    \"mime-db\": {\n                      \"version\": \"1.3.0\",\n                      \"from\": \"mime-db@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.3.0.tgz\"\n                    }\n                  }\n                },\n                \"vary\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"vary@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/vary/-/vary-1.0.0.tgz\"\n                }\n              }\n            },\n            \"connect-timeout\": {\n              \"version\": \"1.3.0\",\n              \"from\": \"connect-timeout@>=1.3.0 <1.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.3.0.tgz\",\n              \"dependencies\": {\n                \"ms\": {\n                  \"version\": \"0.6.2\",\n                  \"from\": \"ms@0.6.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n                }\n              }\n            },\n            \"csurf\": {\n              \"version\": \"1.6.3\",\n              \"from\": \"csurf@>=1.6.2 <1.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/csurf/-/csurf-1.6.3.tgz\",\n              \"dependencies\": {\n                \"csrf\": {\n                  \"version\": \"2.0.2\",\n                  \"from\": \"csrf@>=2.0.2 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/csrf/-/csrf-2.0.2.tgz\",\n                  \"dependencies\": {\n                    \"rndm\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"rndm@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/rndm/-/rndm-1.0.0.tgz\"\n                    },\n                    \"scmp\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"scmp@1.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/scmp/-/scmp-1.0.0.tgz\"\n                    },\n                    \"uid-safe\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"uid-safe@>=1.0.1 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/uid-safe/-/uid-safe-1.0.1.tgz\",\n                      \"dependencies\": {\n                        \"mz\": {\n                          \"version\": \"1.1.0\",\n                          \"from\": \"mz@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/mz/-/mz-1.1.0.tgz\",\n                          \"dependencies\": {\n                            \"native-or-bluebird\": {\n                              \"version\": \"1.1.2\",\n                              \"from\": \"native-or-bluebird@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"base64-url\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"base64-url@1.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/base64-url/-/base64-url-1.0.0.tgz\"\n                    }\n                  }\n                },\n                \"http-errors\": {\n                  \"version\": \"1.2.7\",\n                  \"from\": \"http-errors@>=1.2.7 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/http-errors/-/http-errors-1.2.7.tgz\",\n                  \"dependencies\": {\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    },\n                    \"statuses\": {\n                      \"version\": \"1.2.0\",\n                      \"from\": \"statuses@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/statuses/-/statuses-1.2.0.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"debug\": {\n              \"version\": \"2.0.0\",\n              \"from\": \"debug@>=2.0.0 <2.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.0.0.tgz\",\n              \"dependencies\": {\n                \"ms\": {\n                  \"version\": \"0.6.2\",\n                  \"from\": \"ms@0.6.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n                }\n              }\n            },\n            \"depd\": {\n              \"version\": \"0.4.5\",\n              \"from\": \"depd@0.4.5\",\n              \"resolved\": \"https://registry.npmjs.org/depd/-/depd-0.4.5.tgz\"\n            },\n            \"errorhandler\": {\n              \"version\": \"1.2.3\",\n              \"from\": \"errorhandler@>=1.2.2 <1.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/errorhandler/-/errorhandler-1.2.3.tgz\",\n              \"dependencies\": {\n                \"accepts\": {\n                  \"version\": \"1.1.3\",\n                  \"from\": \"accepts@>=1.1.2 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/accepts/-/accepts-1.1.3.tgz\",\n                  \"dependencies\": {\n                    \"mime-types\": {\n                      \"version\": \"2.0.3\",\n                      \"from\": \"mime-types@>=2.0.3 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.0.3.tgz\",\n                      \"dependencies\": {\n                        \"mime-db\": {\n                          \"version\": \"1.2.0\",\n                          \"from\": \"mime-db@>=1.2.0 <1.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.2.0.tgz\"\n                        }\n                      }\n                    },\n                    \"negotiator\": {\n                      \"version\": \"0.4.9\",\n                      \"from\": \"negotiator@0.4.9\",\n                      \"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz\"\n                    }\n                  }\n                },\n                \"escape-html\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"escape-html@1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n                }\n              }\n            },\n            \"express-session\": {\n              \"version\": \"1.8.2\",\n              \"from\": \"express-session@>=1.8.2 <1.9.0\",\n              \"resolved\": \"https://registry.npmjs.org/express-session/-/express-session-1.8.2.tgz\",\n              \"dependencies\": {\n                \"crc\": {\n                  \"version\": \"3.0.0\",\n                  \"from\": \"crc@3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/crc/-/crc-3.0.0.tgz\"\n                },\n                \"uid-safe\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"uid-safe@1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/uid-safe/-/uid-safe-1.0.1.tgz\",\n                  \"dependencies\": {\n                    \"mz\": {\n                      \"version\": \"1.1.0\",\n                      \"from\": \"mz@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mz/-/mz-1.1.0.tgz\",\n                      \"dependencies\": {\n                        \"native-or-bluebird\": {\n                          \"version\": \"1.1.2\",\n                          \"from\": \"native-or-bluebird@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz\"\n                        }\n                      }\n                    },\n                    \"base64-url\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"base64-url@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/base64-url/-/base64-url-1.0.0.tgz\"\n                    }\n                  }\n                },\n                \"utils-merge\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"utils-merge@1.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz\"\n                }\n              }\n            },\n            \"finalhandler\": {\n              \"version\": \"0.2.0\",\n              \"from\": \"finalhandler@0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/finalhandler/-/finalhandler-0.2.0.tgz\",\n              \"dependencies\": {\n                \"escape-html\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"escape-html@1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n                }\n              }\n            },\n            \"fresh\": {\n              \"version\": \"0.2.4\",\n              \"from\": \"fresh@0.2.4\",\n              \"resolved\": \"https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz\"\n            },\n            \"media-typer\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"media-typer@0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz\"\n            },\n            \"method-override\": {\n              \"version\": \"2.2.0\",\n              \"from\": \"method-override@>=2.2.0 <2.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/method-override/-/method-override-2.2.0.tgz\",\n              \"dependencies\": {\n                \"methods\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"methods@1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/methods/-/methods-1.1.0.tgz\"\n                },\n                \"vary\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"vary@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/vary/-/vary-1.0.0.tgz\"\n                }\n              }\n            },\n            \"morgan\": {\n              \"version\": \"1.3.2\",\n              \"from\": \"morgan@>=1.3.2 <1.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/morgan/-/morgan-1.3.2.tgz\",\n              \"dependencies\": {\n                \"basic-auth\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"basic-auth@1.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.0.tgz\"\n                },\n                \"on-finished\": {\n                  \"version\": \"2.1.0\",\n                  \"from\": \"on-finished@2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz\",\n                  \"dependencies\": {\n                    \"ee-first\": {\n                      \"version\": \"1.0.5\",\n                      \"from\": \"ee-first@1.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"multiparty\": {\n              \"version\": \"3.3.2\",\n              \"from\": \"multiparty@3.3.2\",\n              \"resolved\": \"https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz\",\n              \"dependencies\": {\n                \"readable-stream\": {\n                  \"version\": \"1.1.13\",\n                  \"from\": \"readable-stream@>=1.1.9 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"stream-counter\": {\n                  \"version\": \"0.2.0\",\n                  \"from\": \"stream-counter@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz\"\n                }\n              }\n            },\n            \"on-headers\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"on-headers@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/on-headers/-/on-headers-1.0.0.tgz\"\n            },\n            \"parseurl\": {\n              \"version\": \"1.3.0\",\n              \"from\": \"parseurl@>=1.3.0 <1.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz\"\n            },\n            \"qs\": {\n              \"version\": \"2.2.4\",\n              \"from\": \"qs@2.2.4\",\n              \"resolved\": \"https://registry.npmjs.org/qs/-/qs-2.2.4.tgz\"\n            },\n            \"response-time\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"response-time@>=2.0.1 <2.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/response-time/-/response-time-2.0.1.tgz\"\n            },\n            \"serve-favicon\": {\n              \"version\": \"2.1.7\",\n              \"from\": \"serve-favicon@>=2.1.5 <2.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.1.7.tgz\",\n              \"dependencies\": {\n                \"etag\": {\n                  \"version\": \"1.5.1\",\n                  \"from\": \"etag@>=1.5.0 <1.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/etag/-/etag-1.5.1.tgz\",\n                  \"dependencies\": {\n                    \"crc\": {\n                      \"version\": \"3.2.1\",\n                      \"from\": \"crc@3.2.1\",\n                      \"resolved\": \"https://registry.npmjs.org/crc/-/crc-3.2.1.tgz\"\n                    }\n                  }\n                },\n                \"ms\": {\n                  \"version\": \"0.6.2\",\n                  \"from\": \"ms@0.6.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n                }\n              }\n            },\n            \"serve-index\": {\n              \"version\": \"1.2.1\",\n              \"from\": \"serve-index@>=1.2.1 <1.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/serve-index/-/serve-index-1.2.1.tgz\",\n              \"dependencies\": {\n                \"accepts\": {\n                  \"version\": \"1.1.3\",\n                  \"from\": \"accepts@>=1.1.0 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/accepts/-/accepts-1.1.3.tgz\",\n                  \"dependencies\": {\n                    \"mime-types\": {\n                      \"version\": \"2.0.3\",\n                      \"from\": \"mime-types@>=2.0.3 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.0.3.tgz\",\n                      \"dependencies\": {\n                        \"mime-db\": {\n                          \"version\": \"1.2.0\",\n                          \"from\": \"mime-db@>=1.2.0 <1.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.2.0.tgz\"\n                        }\n                      }\n                    },\n                    \"negotiator\": {\n                      \"version\": \"0.4.9\",\n                      \"from\": \"negotiator@0.4.9\",\n                      \"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz\"\n                    }\n                  }\n                },\n                \"batch\": {\n                  \"version\": \"0.5.1\",\n                  \"from\": \"batch@0.5.1\",\n                  \"resolved\": \"https://registry.npmjs.org/batch/-/batch-0.5.1.tgz\"\n                }\n              }\n            },\n            \"serve-static\": {\n              \"version\": \"1.6.4\",\n              \"from\": \"serve-static@>=1.6.4 <1.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/serve-static/-/serve-static-1.6.4.tgz\",\n              \"dependencies\": {\n                \"escape-html\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"escape-html@1.0.1\",\n                  \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n                },\n                \"send\": {\n                  \"version\": \"0.9.3\",\n                  \"from\": \"send@0.9.3\",\n                  \"resolved\": \"https://registry.npmjs.org/send/-/send-0.9.3.tgz\",\n                  \"dependencies\": {\n                    \"destroy\": {\n                      \"version\": \"1.0.3\",\n                      \"from\": \"destroy@1.0.3\",\n                      \"resolved\": \"https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz\"\n                    },\n                    \"etag\": {\n                      \"version\": \"1.4.0\",\n                      \"from\": \"etag@>=1.4.0 <1.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/etag/-/etag-1.4.0.tgz\",\n                      \"dependencies\": {\n                        \"crc\": {\n                          \"version\": \"3.0.0\",\n                          \"from\": \"crc@3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/crc/-/crc-3.0.0.tgz\"\n                        }\n                      }\n                    },\n                    \"mime\": {\n                      \"version\": \"1.2.11\",\n                      \"from\": \"mime@>=1.2.11 <1.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                    },\n                    \"ms\": {\n                      \"version\": \"0.6.2\",\n                      \"from\": \"ms@0.6.2\",\n                      \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n                    },\n                    \"on-finished\": {\n                      \"version\": \"2.1.0\",\n                      \"from\": \"on-finished@2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz\",\n                      \"dependencies\": {\n                        \"ee-first\": {\n                          \"version\": \"1.0.5\",\n                          \"from\": \"ee-first@1.0.5\",\n                          \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz\"\n                        }\n                      }\n                    },\n                    \"range-parser\": {\n                      \"version\": \"1.0.2\",\n                      \"from\": \"range-parser@>=1.0.2 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz\"\n                    }\n                  }\n                },\n                \"utils-merge\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"utils-merge@1.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz\"\n                }\n              }\n            },\n            \"type-is\": {\n              \"version\": \"1.5.3\",\n              \"from\": \"type-is@>=1.5.2 <1.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/type-is/-/type-is-1.5.3.tgz\",\n              \"dependencies\": {\n                \"mime-types\": {\n                  \"version\": \"2.0.3\",\n                  \"from\": \"mime-types@>=2.0.3 <2.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.0.3.tgz\",\n                  \"dependencies\": {\n                    \"mime-db\": {\n                      \"version\": \"1.2.0\",\n                      \"from\": \"mime-db@>=1.2.0 <1.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.2.0.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"vhost\": {\n              \"version\": \"3.0.0\",\n              \"from\": \"vhost@>=3.0.0 <3.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/vhost/-/vhost-3.0.0.tgz\"\n            },\n            \"pause\": {\n              \"version\": \"0.0.1\",\n              \"from\": \"pause@0.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/pause/-/pause-0.0.1.tgz\"\n            }\n          }\n        },\n        \"source-map\": {\n          \"version\": \"0.1.40\",\n          \"from\": \"source-map@>=0.1.40 <0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n          \"dependencies\": {\n            \"amdefine\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"amdefine@>=0.0.4\",\n              \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"karma-chrome-launcher\": {\n      \"version\": \"0.1.7\",\n      \"from\": \"karma-chrome-launcher@>=0.1.5 <0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-0.1.7.tgz\"\n    },\n    \"karma-cli\": {\n      \"version\": \"0.0.4\",\n      \"from\": \"karma-cli@>=0.0.4 <0.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/karma-cli/-/karma-cli-0.0.4.tgz\",\n      \"dependencies\": {\n        \"resolve\": {\n          \"version\": \"0.5.1\",\n          \"from\": \"resolve@0.5.1\",\n          \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-0.5.1.tgz\"\n        }\n      }\n    },\n    \"karma-firefox-launcher\": {\n      \"version\": \"0.1.3\",\n      \"from\": \"karma-firefox-launcher@>=0.1.3 <0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-0.1.3.tgz\"\n    },\n    \"karma-jasmine\": {\n      \"version\": \"0.3.2\",\n      \"from\": \"karma-jasmine@>=0.3.1 <0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-0.3.2.tgz\"\n    },\n    \"karma-safari-launcher\": {\n      \"version\": \"0.1.1\",\n      \"from\": \"karma-safari-launcher@>=0.1.1 <0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-0.1.1.tgz\"\n    },\n    \"karma-sauce-launcher\": {\n      \"version\": \"0.2.10\",\n      \"from\": \"karma-sauce-launcher@>=0.2.10 <0.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-0.2.10.tgz\",\n      \"dependencies\": {\n        \"wd\": {\n          \"version\": \"0.3.11\",\n          \"from\": \"wd@>=0.3.4 <0.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/wd/-/wd-0.3.11.tgz\",\n          \"dependencies\": {\n            \"archiver\": {\n              \"version\": \"0.12.0\",\n              \"from\": \"archiver@0.12.0\",\n              \"resolved\": \"https://registry.npmjs.org/archiver/-/archiver-0.12.0.tgz\",\n              \"dependencies\": {\n                \"buffer-crc32\": {\n                  \"version\": \"0.2.5\",\n                  \"from\": \"buffer-crc32@>=0.2.1 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz\"\n                },\n                \"glob\": {\n                  \"version\": \"4.0.6\",\n                  \"from\": \"glob@>=4.0.6 <4.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.0.6.tgz\",\n                  \"dependencies\": {\n                    \"graceful-fs\": {\n                      \"version\": \"3.0.5\",\n                      \"from\": \"graceful-fs@>=3.0.2 <4.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    },\n                    \"minimatch\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"minimatch@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz\",\n                      \"dependencies\": {\n                        \"lru-cache\": {\n                          \"version\": \"2.5.0\",\n                          \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                        },\n                        \"sigmund\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                        }\n                      }\n                    },\n                    \"once\": {\n                      \"version\": \"1.3.1\",\n                      \"from\": \"once@>=1.3.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                      \"dependencies\": {\n                        \"wrappy\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"lazystream\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"lazystream@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz\"\n                },\n                \"lodash\": {\n                  \"version\": \"2.4.1\",\n                  \"from\": \"lodash@>=2.4.1 <2.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n                },\n                \"readable-stream\": {\n                  \"version\": \"1.0.33\",\n                  \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                  \"dependencies\": {\n                    \"core-util-is\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                    },\n                    \"isarray\": {\n                      \"version\": \"0.0.1\",\n                      \"from\": \"isarray@0.0.1\",\n                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                    },\n                    \"string_decoder\": {\n                      \"version\": \"0.10.31\",\n                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                    },\n                    \"inherits\": {\n                      \"version\": \"2.0.1\",\n                      \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                    }\n                  }\n                },\n                \"tar-stream\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"tar-stream@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tar-stream/-/tar-stream-1.0.2.tgz\",\n                  \"dependencies\": {\n                    \"bl\": {\n                      \"version\": \"0.9.3\",\n                      \"from\": \"bl@>=0.9.0 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\"\n                    },\n                    \"end-of-stream\": {\n                      \"version\": \"1.1.0\",\n                      \"from\": \"end-of-stream@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz\",\n                      \"dependencies\": {\n                        \"once\": {\n                          \"version\": \"1.3.1\",\n                          \"from\": \"once@>=1.3.0 <1.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                          \"dependencies\": {\n                            \"wrappy\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"xtend\": {\n                      \"version\": \"4.0.0\",\n                      \"from\": \"xtend@>=4.0.0 <5.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz\"\n                    }\n                  }\n                },\n                \"zip-stream\": {\n                  \"version\": \"0.4.1\",\n                  \"from\": \"zip-stream@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/zip-stream/-/zip-stream-0.4.1.tgz\",\n                  \"dependencies\": {\n                    \"compress-commons\": {\n                      \"version\": \"0.1.6\",\n                      \"from\": \"compress-commons@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/compress-commons/-/compress-commons-0.1.6.tgz\",\n                      \"dependencies\": {\n                        \"crc32-stream\": {\n                          \"version\": \"0.3.1\",\n                          \"from\": \"crc32-stream@>=0.3.1 <0.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"async\": {\n              \"version\": \"0.9.0\",\n              \"from\": \"async@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n            },\n            \"q\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"q@1.0.1\",\n              \"resolved\": \"https://registry.npmjs.org/q/-/q-1.0.1.tgz\"\n            },\n            \"request\": {\n              \"version\": \"2.46.0\",\n              \"from\": \"request@2.46.0\",\n              \"resolved\": \"https://registry.npmjs.org/request/-/request-2.46.0.tgz\",\n              \"dependencies\": {\n                \"bl\": {\n                  \"version\": \"0.9.3\",\n                  \"from\": \"bl@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/bl/-/bl-0.9.3.tgz\",\n                  \"dependencies\": {\n                    \"readable-stream\": {\n                      \"version\": \"1.0.33\",\n                      \"from\": \"readable-stream@>=1.0.26 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz\",\n                      \"dependencies\": {\n                        \"core-util-is\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                        },\n                        \"isarray\": {\n                          \"version\": \"0.0.1\",\n                          \"from\": \"isarray@0.0.1\",\n                          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                        },\n                        \"string_decoder\": {\n                          \"version\": \"0.10.31\",\n                          \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"caseless\": {\n                  \"version\": \"0.6.0\",\n                  \"from\": \"caseless@>=0.6.0 <0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz\"\n                },\n                \"forever-agent\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n                },\n                \"form-data\": {\n                  \"version\": \"0.1.4\",\n                  \"from\": \"form-data@>=0.1.0 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n                  \"dependencies\": {\n                    \"combined-stream\": {\n                      \"version\": \"0.0.7\",\n                      \"from\": \"combined-stream@>=0.0.4 <0.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                      \"dependencies\": {\n                        \"delayed-stream\": {\n                          \"version\": \"0.0.5\",\n                          \"from\": \"delayed-stream@0.0.5\",\n                          \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                        }\n                      }\n                    },\n                    \"mime\": {\n                      \"version\": \"1.2.11\",\n                      \"from\": \"mime@>=1.2.11 <1.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n                    }\n                  }\n                },\n                \"json-stringify-safe\": {\n                  \"version\": \"5.0.0\",\n                  \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n                },\n                \"mime-types\": {\n                  \"version\": \"1.0.2\",\n                  \"from\": \"mime-types@>=1.0.1 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz\"\n                },\n                \"node-uuid\": {\n                  \"version\": \"1.4.2\",\n                  \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n                },\n                \"qs\": {\n                  \"version\": \"1.2.2\",\n                  \"from\": \"qs@>=1.2.0 <1.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/qs/-/qs-1.2.2.tgz\"\n                },\n                \"tunnel-agent\": {\n                  \"version\": \"0.4.0\",\n                  \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n                },\n                \"tough-cookie\": {\n                  \"version\": \"0.12.1\",\n                  \"from\": \"tough-cookie@>=0.12.0\",\n                  \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n                  \"dependencies\": {\n                    \"punycode\": {\n                      \"version\": \"1.3.2\",\n                      \"from\": \"punycode@>=0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                    }\n                  }\n                },\n                \"http-signature\": {\n                  \"version\": \"0.10.0\",\n                  \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n                  \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n                  \"dependencies\": {\n                    \"assert-plus\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"assert-plus@0.1.2\",\n                      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                    },\n                    \"asn1\": {\n                      \"version\": \"0.1.11\",\n                      \"from\": \"asn1@0.1.11\",\n                      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                    },\n                    \"ctype\": {\n                      \"version\": \"0.5.2\",\n                      \"from\": \"ctype@0.5.2\",\n                      \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                    }\n                  }\n                },\n                \"oauth-sign\": {\n                  \"version\": \"0.4.0\",\n                  \"from\": \"oauth-sign@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz\"\n                },\n                \"hawk\": {\n                  \"version\": \"1.1.1\",\n                  \"from\": \"hawk@1.1.1\",\n                  \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz\",\n                  \"dependencies\": {\n                    \"hoek\": {\n                      \"version\": \"0.9.1\",\n                      \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                    },\n                    \"boom\": {\n                      \"version\": \"0.4.2\",\n                      \"from\": \"boom@>=0.4.0 <0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                    },\n                    \"cryptiles\": {\n                      \"version\": \"0.2.2\",\n                      \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                    },\n                    \"sntp\": {\n                      \"version\": \"0.2.4\",\n                      \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                    }\n                  }\n                },\n                \"aws-sign2\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n                },\n                \"stringstream\": {\n                  \"version\": \"0.0.4\",\n                  \"from\": \"stringstream@>=0.0.4 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz\"\n                }\n              }\n            },\n            \"underscore.string\": {\n              \"version\": \"2.3.3\",\n              \"from\": \"underscore.string@2.3.3\",\n              \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz\"\n            },\n            \"vargs\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"vargs@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz\"\n            }\n          }\n        },\n        \"sauce-connect-launcher\": {\n          \"version\": \"0.6.1\",\n          \"from\": \"sauce-connect-launcher@0.6.1\",\n          \"resolved\": \"https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.6.1.tgz\",\n          \"dependencies\": {\n            \"lodash\": {\n              \"version\": \"2.4.1\",\n              \"from\": \"lodash@2.4.1\",\n              \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n            },\n            \"async\": {\n              \"version\": \"0.9.0\",\n              \"from\": \"async@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n            },\n            \"adm-zip\": {\n              \"version\": \"0.4.4\",\n              \"from\": \"adm-zip@>=0.4.3 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz\"\n            },\n            \"rimraf\": {\n              \"version\": \"2.2.8\",\n              \"from\": \"rimraf@>=2.2.6 <2.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n            }\n          }\n        },\n        \"q\": {\n          \"version\": \"0.9.7\",\n          \"from\": \"q@0.9.7\",\n          \"resolved\": \"https://registry.npmjs.org/q/-/q-0.9.7.tgz\"\n        },\n        \"saucelabs\": {\n          \"version\": \"0.1.1\",\n          \"from\": \"saucelabs@>=0.1.0 <0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/saucelabs/-/saucelabs-0.1.1.tgz\"\n        }\n      }\n    },\n    \"karma-traceur-preprocessor\": {\n      \"version\": \"0.4.0\",\n      \"from\": \"karma-traceur-preprocessor@>=0.4.0 <0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/karma-traceur-preprocessor/-/karma-traceur-preprocessor-0.4.0.tgz\"\n    },\n    \"lodash\": {\n      \"version\": \"2.4.1\",\n      \"from\": \"lodash@>=2.4.1 <3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n    },\n    \"mime\": {\n      \"version\": \"1.2.11\",\n      \"from\": \"mime@>=1.2.11 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n    },\n    \"minimist\": {\n      \"version\": \"1.1.0\",\n      \"from\": \"minimist@>=1.1.0 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz\"\n    },\n    \"mkdirp\": {\n      \"version\": \"0.5.0\",\n      \"from\": \"mkdirp@>=0.5.0 <0.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz\",\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"0.0.8\",\n          \"from\": \"minimist@0.0.8\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\"\n        }\n      }\n    },\n    \"morgan\": {\n      \"version\": \"1.5.0\",\n      \"from\": \"morgan@>=1.4.0 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/morgan/-/morgan-1.5.0.tgz\",\n      \"dependencies\": {\n        \"basic-auth\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"basic-auth@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.0.tgz\"\n        },\n        \"debug\": {\n          \"version\": \"2.1.0\",\n          \"from\": \"debug@>=2.1.0 <2.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.1.0.tgz\",\n          \"dependencies\": {\n            \"ms\": {\n              \"version\": \"0.6.2\",\n              \"from\": \"ms@0.6.2\",\n              \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n            }\n          }\n        },\n        \"depd\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"depd@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/depd/-/depd-1.0.0.tgz\"\n        },\n        \"on-finished\": {\n          \"version\": \"2.1.1\",\n          \"from\": \"on-finished@2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.1.tgz\",\n          \"dependencies\": {\n            \"ee-first\": {\n              \"version\": \"1.1.0\",\n              \"from\": \"ee-first@1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"opn\": {\n      \"version\": \"1.0.0\",\n      \"from\": \"opn@>=1.0.0 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/opn/-/opn-1.0.0.tgz\"\n    },\n    \"protractor\": {\n      \"version\": \"1.5.0\",\n      \"from\": \"protractor@>=1.3.1 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/protractor/-/protractor-1.5.0.tgz\",\n      \"dependencies\": {\n        \"request\": {\n          \"version\": \"2.36.0\",\n          \"from\": \"request@2.36.0\",\n          \"resolved\": \"https://registry.npmjs.org/request/-/request-2.36.0.tgz\",\n          \"dependencies\": {\n            \"qs\": {\n              \"version\": \"0.6.6\",\n              \"from\": \"qs@>=0.6.0 <0.7.0\",\n              \"resolved\": \"https://registry.npmjs.org/qs/-/qs-0.6.6.tgz\"\n            },\n            \"json-stringify-safe\": {\n              \"version\": \"5.0.0\",\n              \"from\": \"json-stringify-safe@>=5.0.0 <5.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz\"\n            },\n            \"mime\": {\n              \"version\": \"1.2.11\",\n              \"from\": \"mime@>=1.2.9 <1.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.2.11.tgz\"\n            },\n            \"forever-agent\": {\n              \"version\": \"0.5.2\",\n              \"from\": \"forever-agent@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz\"\n            },\n            \"node-uuid\": {\n              \"version\": \"1.4.2\",\n              \"from\": \"node-uuid@>=1.4.0 <1.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz\"\n            },\n            \"tough-cookie\": {\n              \"version\": \"0.12.1\",\n              \"from\": \"tough-cookie@>=0.12.0\",\n              \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz\",\n              \"dependencies\": {\n                \"punycode\": {\n                  \"version\": \"1.3.2\",\n                  \"from\": \"punycode@>=0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz\"\n                }\n              }\n            },\n            \"form-data\": {\n              \"version\": \"0.1.4\",\n              \"from\": \"form-data@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz\",\n              \"dependencies\": {\n                \"combined-stream\": {\n                  \"version\": \"0.0.7\",\n                  \"from\": \"combined-stream@>=0.0.4 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz\",\n                  \"dependencies\": {\n                    \"delayed-stream\": {\n                      \"version\": \"0.0.5\",\n                      \"from\": \"delayed-stream@0.0.5\",\n                      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz\"\n                    }\n                  }\n                },\n                \"async\": {\n                  \"version\": \"0.9.0\",\n                  \"from\": \"async@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n                }\n              }\n            },\n            \"tunnel-agent\": {\n              \"version\": \"0.4.0\",\n              \"from\": \"tunnel-agent@>=0.4.0 <0.5.0\",\n              \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz\"\n            },\n            \"http-signature\": {\n              \"version\": \"0.10.0\",\n              \"from\": \"http-signature@>=0.10.0 <0.11.0\",\n              \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz\",\n              \"dependencies\": {\n                \"assert-plus\": {\n                  \"version\": \"0.1.2\",\n                  \"from\": \"assert-plus@0.1.2\",\n                  \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz\"\n                },\n                \"asn1\": {\n                  \"version\": \"0.1.11\",\n                  \"from\": \"asn1@0.1.11\",\n                  \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz\"\n                },\n                \"ctype\": {\n                  \"version\": \"0.5.2\",\n                  \"from\": \"ctype@0.5.2\",\n                  \"resolved\": \"https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz\"\n                }\n              }\n            },\n            \"oauth-sign\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"oauth-sign@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz\"\n            },\n            \"hawk\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"hawk@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz\",\n              \"dependencies\": {\n                \"hoek\": {\n                  \"version\": \"0.9.1\",\n                  \"from\": \"hoek@>=0.9.0 <0.10.0\",\n                  \"resolved\": \"https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz\"\n                },\n                \"boom\": {\n                  \"version\": \"0.4.2\",\n                  \"from\": \"boom@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/boom/-/boom-0.4.2.tgz\"\n                },\n                \"cryptiles\": {\n                  \"version\": \"0.2.2\",\n                  \"from\": \"cryptiles@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz\"\n                },\n                \"sntp\": {\n                  \"version\": \"0.2.4\",\n                  \"from\": \"sntp@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz\"\n                }\n              }\n            },\n            \"aws-sign2\": {\n              \"version\": \"0.5.0\",\n              \"from\": \"aws-sign2@>=0.5.0 <0.6.0\",\n              \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz\"\n            }\n          }\n        },\n        \"selenium-webdriver\": {\n          \"version\": \"2.44.0\",\n          \"from\": \"selenium-webdriver@2.44.0\",\n          \"resolved\": \"https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.44.0.tgz\",\n          \"dependencies\": {\n            \"tmp\": {\n              \"version\": \"0.0.24\",\n              \"from\": \"tmp@0.0.24\",\n              \"resolved\": \"https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz\"\n            },\n            \"xml2js\": {\n              \"version\": \"0.4.4\",\n              \"from\": \"xml2js@0.4.4\",\n              \"resolved\": \"https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz\",\n              \"dependencies\": {\n                \"sax\": {\n                  \"version\": \"0.6.1\",\n                  \"from\": \"sax@>=0.6.0 <0.7.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sax/-/sax-0.6.1.tgz\"\n                },\n                \"xmlbuilder\": {\n                  \"version\": \"2.4.5\",\n                  \"from\": \"xmlbuilder@>=1.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.4.5.tgz\",\n                  \"dependencies\": {\n                    \"lodash-node\": {\n                      \"version\": \"2.4.1\",\n                      \"from\": \"lodash-node@>=2.4.1 <2.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lodash-node/-/lodash-node-2.4.1.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"minijasminenode\": {\n          \"version\": \"1.1.1\",\n          \"from\": \"minijasminenode@1.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/minijasminenode/-/minijasminenode-1.1.1.tgz\"\n        },\n        \"jasminewd\": {\n          \"version\": \"1.1.0\",\n          \"from\": \"jasminewd@1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/jasminewd/-/jasminewd-1.1.0.tgz\"\n        },\n        \"saucelabs\": {\n          \"version\": \"0.1.1\",\n          \"from\": \"saucelabs@>=0.1.0 <0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/saucelabs/-/saucelabs-0.1.1.tgz\"\n        },\n        \"glob\": {\n          \"version\": \"3.2.11\",\n          \"from\": \"glob@3.2.11\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n          \"dependencies\": {\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            },\n            \"minimatch\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n              \"dependencies\": {\n                \"lru-cache\": {\n                  \"version\": \"2.5.0\",\n                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                },\n                \"sigmund\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"adm-zip\": {\n          \"version\": \"0.4.4\",\n          \"from\": \"adm-zip@>=0.4.4 <0.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz\"\n        },\n        \"optimist\": {\n          \"version\": \"0.6.1\",\n          \"from\": \"optimist@>=0.6.0 <0.7.0\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n          \"dependencies\": {\n            \"wordwrap\": {\n              \"version\": \"0.0.2\",\n              \"from\": \"wordwrap@>=0.0.2 <0.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n            },\n            \"minimist\": {\n              \"version\": \"0.0.10\",\n              \"from\": \"minimist@0.0.10\",\n              \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\"\n            }\n          }\n        },\n        \"q\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"q@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/q/-/q-1.0.0.tgz\"\n        },\n        \"source-map-support\": {\n          \"version\": \"0.2.8\",\n          \"from\": \"source-map-support@>=0.2.6 <0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.8.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.32\",\n              \"from\": \"source-map@0.1.32\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"read-file-stdin\": {\n      \"version\": \"0.2.0\",\n      \"from\": \"read-file-stdin@>=0.2.0 <0.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.0.tgz\",\n      \"dependencies\": {\n        \"gather-stream\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"gather-stream@>=1.0.0 <2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz\"\n        }\n      }\n    },\n    \"rework\": {\n      \"version\": \"1.0.1\",\n      \"from\": \"rework@>=1.0.1 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/rework/-/rework-1.0.1.tgz\",\n      \"dependencies\": {\n        \"css\": {\n          \"version\": \"2.1.0\",\n          \"from\": \"css@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/css/-/css-2.1.0.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.40\",\n              \"from\": \"source-map@>=0.1.38 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"source-map-resolve\": {\n              \"version\": \"0.3.1\",\n              \"from\": \"source-map-resolve@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz\",\n              \"dependencies\": {\n                \"source-map-url\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"source-map-url@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz\"\n                },\n                \"atob\": {\n                  \"version\": \"1.1.2\",\n                  \"from\": \"atob@>=1.1.0 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/atob/-/atob-1.1.2.tgz\"\n                },\n                \"resolve-url\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"resolve-url@>=0.2.1 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz\"\n                }\n              }\n            },\n            \"urix\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"urix@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/urix/-/urix-0.1.0.tgz\"\n            },\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.1 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            }\n          }\n        },\n        \"convert-source-map\": {\n          \"version\": \"0.3.5\",\n          \"from\": \"convert-source-map@0.3.5\",\n          \"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz\"\n        }\n      }\n    },\n    \"rework-import\": {\n      \"version\": \"2.0.0\",\n      \"from\": \"rework-import@2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/rework-import/-/rework-import-2.0.0.tgz\",\n      \"dependencies\": {\n        \"css\": {\n          \"version\": \"2.1.0\",\n          \"from\": \"css@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/css/-/css-2.1.0.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.40\",\n              \"from\": \"source-map@>=0.1.38 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"source-map-resolve\": {\n              \"version\": \"0.3.1\",\n              \"from\": \"source-map-resolve@>=0.3.0 <0.4.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz\",\n              \"dependencies\": {\n                \"source-map-url\": {\n                  \"version\": \"0.3.0\",\n                  \"from\": \"source-map-url@>=0.3.0 <0.4.0\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz\"\n                },\n                \"atob\": {\n                  \"version\": \"1.1.2\",\n                  \"from\": \"atob@>=1.1.0 <1.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/atob/-/atob-1.1.2.tgz\"\n                },\n                \"resolve-url\": {\n                  \"version\": \"0.2.1\",\n                  \"from\": \"resolve-url@>=0.2.1 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz\"\n                }\n              }\n            },\n            \"urix\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"urix@>=0.1.0 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/urix/-/urix-0.1.0.tgz\"\n            },\n            \"inherits\": {\n              \"version\": \"2.0.1\",\n              \"from\": \"inherits@>=2.0.1 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n            }\n          }\n        },\n        \"globby\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"globby@>=1.0.0 <2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/globby/-/globby-1.0.0.tgz\",\n          \"dependencies\": {\n            \"array-differ\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"array-differ@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz\"\n            },\n            \"array-union\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"array-union@>=1.0.1 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/array-union/-/array-union-1.0.1.tgz\",\n              \"dependencies\": {\n                \"array-uniq\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"array-uniq@>=1.0.1 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.1.tgz\"\n                }\n              }\n            },\n            \"async\": {\n              \"version\": \"0.9.0\",\n              \"from\": \"async@>=0.9.0 <0.10.0\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.0.tgz\"\n            }\n          }\n        },\n        \"parse-import\": {\n          \"version\": \"2.0.0\",\n          \"from\": \"parse-import@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/parse-import/-/parse-import-2.0.0.tgz\",\n          \"dependencies\": {\n            \"get-imports\": {\n              \"version\": \"1.0.0\",\n              \"from\": \"get-imports@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/get-imports/-/get-imports-1.0.0.tgz\",\n              \"dependencies\": {\n                \"array-uniq\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"array-uniq@>=1.0.1 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.1.tgz\"\n                },\n                \"import-regex\": {\n                  \"version\": \"1.1.0\",\n                  \"from\": \"import-regex@>=1.1.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/import-regex/-/import-regex-1.1.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"url-regex\": {\n          \"version\": \"2.1.2\",\n          \"from\": \"url-regex@>=2.1.1 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/url-regex/-/url-regex-2.1.2.tgz\",\n          \"dependencies\": {\n            \"ip-regex\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"ip-regex@>=1.0.1 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.1.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"rework-vars\": {\n      \"version\": \"3.1.1\",\n      \"from\": \"rework-vars@>=3.1.1 <4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/rework-vars/-/rework-vars-3.1.1.tgz\",\n      \"dependencies\": {\n        \"rework-visit\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"rework-visit@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz\"\n        },\n        \"balanced-match\": {\n          \"version\": \"0.1.0\",\n          \"from\": \"balanced-match@0.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz\"\n        }\n      }\n    },\n    \"send\": {\n      \"version\": \"0.10.1\",\n      \"from\": \"send@>=0.10.0 <0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/send/-/send-0.10.1.tgz\",\n      \"dependencies\": {\n        \"debug\": {\n          \"version\": \"2.1.0\",\n          \"from\": \"debug@>=2.1.0 <2.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.1.0.tgz\",\n          \"dependencies\": {\n            \"ms\": {\n              \"version\": \"0.6.2\",\n              \"from\": \"ms@0.6.2\",\n              \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n            }\n          }\n        },\n        \"depd\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"depd@>=1.0.0 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/depd/-/depd-1.0.0.tgz\"\n        },\n        \"destroy\": {\n          \"version\": \"1.0.3\",\n          \"from\": \"destroy@1.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz\"\n        },\n        \"escape-html\": {\n          \"version\": \"1.0.1\",\n          \"from\": \"escape-html@1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n        },\n        \"etag\": {\n          \"version\": \"1.5.1\",\n          \"from\": \"etag@>=1.5.0 <1.6.0\",\n          \"resolved\": \"https://registry.npmjs.org/etag/-/etag-1.5.1.tgz\",\n          \"dependencies\": {\n            \"crc\": {\n              \"version\": \"3.2.1\",\n              \"from\": \"crc@3.2.1\",\n              \"resolved\": \"https://registry.npmjs.org/crc/-/crc-3.2.1.tgz\"\n            }\n          }\n        },\n        \"fresh\": {\n          \"version\": \"0.2.4\",\n          \"from\": \"fresh@0.2.4\",\n          \"resolved\": \"https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz\"\n        },\n        \"ms\": {\n          \"version\": \"0.6.2\",\n          \"from\": \"ms@0.6.2\",\n          \"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.6.2.tgz\"\n        },\n        \"on-finished\": {\n          \"version\": \"2.1.1\",\n          \"from\": \"on-finished@2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.1.1.tgz\",\n          \"dependencies\": {\n            \"ee-first\": {\n              \"version\": \"1.1.0\",\n              \"from\": \"ee-first@1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz\"\n            }\n          }\n        },\n        \"range-parser\": {\n          \"version\": \"1.0.2\",\n          \"from\": \"range-parser@>=1.0.2 <1.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz\"\n        }\n      }\n    },\n    \"serve-static\": {\n      \"version\": \"1.7.1\",\n      \"from\": \"serve-static@>=1.7.0 <2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/serve-static/-/serve-static-1.7.1.tgz\",\n      \"dependencies\": {\n        \"escape-html\": {\n          \"version\": \"1.0.1\",\n          \"from\": \"escape-html@1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz\"\n        },\n        \"parseurl\": {\n          \"version\": \"1.3.0\",\n          \"from\": \"parseurl@>=1.3.0 <1.4.0\",\n          \"resolved\": \"https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz\"\n        },\n        \"utils-merge\": {\n          \"version\": \"1.0.0\",\n          \"from\": \"utils-merge@1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz\"\n        }\n      }\n    },\n    \"systemjs-assetgraph\": {\n      \"version\": \"0.1.0\",\n      \"from\": \"systemjs-assetgraph@*\",\n      \"resolved\": \"https://registry.npmjs.org/systemjs-assetgraph/-/systemjs-assetgraph-0.1.0.tgz\",\n      \"dependencies\": {\n        \"rsvp\": {\n          \"version\": \"3.0.14\",\n          \"from\": \"rsvp@>=3.0.14 <4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/rsvp/-/rsvp-3.0.14.tgz\"\n        }\n      }\n    },\n    \"systemjs-builder\": {\n      \"version\": \"0.4.5\",\n      \"from\": \"systemjs-builder@>=0.4.5 <0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/systemjs-builder/-/systemjs-builder-0.4.5.tgz\",\n      \"dependencies\": {\n        \"rsvp\": {\n          \"version\": \"3.0.14\",\n          \"from\": \"rsvp@>=3.0.14 <4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/rsvp/-/rsvp-3.0.14.tgz\"\n        },\n        \"source-map\": {\n          \"version\": \"0.1.40\",\n          \"from\": \"source-map@>=0.1.8 <0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.40.tgz\",\n          \"dependencies\": {\n            \"amdefine\": {\n              \"version\": \"0.1.0\",\n              \"from\": \"amdefine@>=0.0.4\",\n              \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n            }\n          }\n        },\n        \"systemjs\": {\n          \"version\": \"0.10.2\",\n          \"from\": \"systemjs@>=0.10.2 <0.11.0\",\n          \"resolved\": \"https://registry.npmjs.org/systemjs/-/systemjs-0.10.2.tgz\",\n          \"dependencies\": {\n            \"es6-module-loader\": {\n              \"version\": \"0.10.0\",\n              \"from\": \"es6-module-loader@>=0.10.0 <0.11.0\",\n              \"resolved\": \"https://registry.npmjs.org/es6-module-loader/-/es6-module-loader-0.10.0.tgz\",\n              \"dependencies\": {\n                \"grunt-contrib-uglify\": {\n                  \"version\": \"0.6.0\",\n                  \"from\": \"grunt-contrib-uglify@0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.6.0.tgz\",\n                  \"dependencies\": {\n                    \"chalk\": {\n                      \"version\": \"0.5.1\",\n                      \"from\": \"chalk@>=0.5.1 <0.6.0\",\n                      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n                      \"dependencies\": {\n                        \"ansi-styles\": {\n                          \"version\": \"1.1.0\",\n                          \"from\": \"ansi-styles@1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\"\n                        },\n                        \"escape-string-regexp\": {\n                          \"version\": \"1.0.2\",\n                          \"from\": \"escape-string-regexp@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz\"\n                        },\n                        \"has-ansi\": {\n                          \"version\": \"0.1.0\",\n                          \"from\": \"has-ansi@0.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n                          \"dependencies\": {\n                            \"ansi-regex\": {\n                              \"version\": \"0.2.1\",\n                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                            }\n                          }\n                        },\n                        \"strip-ansi\": {\n                          \"version\": \"0.3.0\",\n                          \"from\": \"strip-ansi@0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n                          \"dependencies\": {\n                            \"ansi-regex\": {\n                              \"version\": \"0.2.1\",\n                              \"from\": \"ansi-regex@>=0.2.0 <0.3.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\"\n                            }\n                          }\n                        },\n                        \"supports-color\": {\n                          \"version\": \"0.2.0\",\n                          \"from\": \"supports-color@0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\"\n                        }\n                      }\n                    },\n                    \"maxmin\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"maxmin@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/maxmin/-/maxmin-1.0.0.tgz\",\n                      \"dependencies\": {\n                        \"figures\": {\n                          \"version\": \"1.3.5\",\n                          \"from\": \"figures@>=1.0.1 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/figures/-/figures-1.3.5.tgz\"\n                        },\n                        \"gzip-size\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"gzip-size@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz\",\n                          \"dependencies\": {\n                            \"concat-stream\": {\n                              \"version\": \"1.4.7\",\n                              \"from\": \"concat-stream@>=1.4.1 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz\",\n                              \"dependencies\": {\n                                \"inherits\": {\n                                  \"version\": \"2.0.1\",\n                                  \"from\": \"inherits@>=2.0.1 <2.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                                },\n                                \"typedarray\": {\n                                  \"version\": \"0.0.6\",\n                                  \"from\": \"typedarray@>=0.0.5 <0.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\"\n                                },\n                                \"readable-stream\": {\n                                  \"version\": \"1.1.13\",\n                                  \"from\": \"readable-stream@1.1.13\",\n                                  \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz\",\n                                  \"dependencies\": {\n                                    \"core-util-is\": {\n                                      \"version\": \"1.0.1\",\n                                      \"from\": \"core-util-is@>=1.0.0 <1.1.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz\"\n                                    },\n                                    \"isarray\": {\n                                      \"version\": \"0.0.1\",\n                                      \"from\": \"isarray@0.0.1\",\n                                      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\"\n                                    },\n                                    \"string_decoder\": {\n                                      \"version\": \"0.10.31\",\n                                      \"from\": \"string_decoder@>=0.10.0 <0.11.0\",\n                                      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"browserify-zlib\": {\n                              \"version\": \"0.1.4\",\n                              \"from\": \"browserify-zlib@>=0.1.4 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz\",\n                              \"dependencies\": {\n                                \"pako\": {\n                                  \"version\": \"0.2.5\",\n                                  \"from\": \"pako@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/pako/-/pako-0.2.5.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"pretty-bytes\": {\n                          \"version\": \"1.0.2\",\n                          \"from\": \"pretty-bytes@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.2.tgz\",\n                          \"dependencies\": {\n                            \"get-stdin\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"get-stdin@1.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-1.0.0.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"uri-path\": {\n                      \"version\": \"0.0.2\",\n                      \"from\": \"uri-path@0.0.2\",\n                      \"resolved\": \"https://registry.npmjs.org/uri-path/-/uri-path-0.0.2.tgz\"\n                    }\n                  }\n                },\n                \"traceur\": {\n                  \"version\": \"0.0.74\",\n                  \"from\": \"traceur@0.0.74\",\n                  \"resolved\": \"https://registry.npmjs.org/traceur/-/traceur-0.0.74.tgz\",\n                  \"dependencies\": {\n                    \"commander\": {\n                      \"version\": \"2.5.0\",\n                      \"from\": \"commander@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.5.0.tgz\"\n                    },\n                    \"glob\": {\n                      \"version\": \"4.3.1\",\n                      \"from\": \"glob@>=4.0.0 <5.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n                      \"dependencies\": {\n                        \"inflight\": {\n                          \"version\": \"1.0.4\",\n                          \"from\": \"inflight@>=1.0.4 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n                          \"dependencies\": {\n                            \"wrappy\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                            }\n                          }\n                        },\n                        \"inherits\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                        },\n                        \"minimatch\": {\n                          \"version\": \"2.0.1\",\n                          \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n                          \"dependencies\": {\n                            \"brace-expansion\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                              \"dependencies\": {\n                                \"balanced-match\": {\n                                  \"version\": \"0.2.0\",\n                                  \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                                },\n                                \"concat-map\": {\n                                  \"version\": \"0.0.0\",\n                                  \"from\": \"concat-map@0.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"once\": {\n                          \"version\": \"1.3.1\",\n                          \"from\": \"once@>=1.3.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                          \"dependencies\": {\n                            \"wrappy\": {\n                              \"version\": \"1.0.1\",\n                              \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"regexpu\": {\n                      \"version\": \"0.3.0\",\n                      \"from\": \"regexpu@0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/regexpu/-/regexpu-0.3.0.tgz\",\n                      \"dependencies\": {\n                        \"recast\": {\n                          \"version\": \"0.8.8\",\n                          \"from\": \"recast@>=0.8.0 <0.9.0\",\n                          \"resolved\": \"https://registry.npmjs.org/recast/-/recast-0.8.8.tgz\",\n                          \"dependencies\": {\n                            \"esprima-fb\": {\n                              \"version\": \"7001.1.0-dev-harmony-fb\",\n                              \"from\": \"esprima-fb@>=7001.1.0-dev-harmony-fb <7001.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/esprima-fb/-/esprima-fb-7001.1.0-dev-harmony-fb.tgz\"\n                            },\n                            \"source-map\": {\n                              \"version\": \"0.1.32\",\n                              \"from\": \"source-map@0.1.32\",\n                              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n                              \"dependencies\": {\n                                \"amdefine\": {\n                                  \"version\": \"0.1.0\",\n                                  \"from\": \"amdefine@>=0.0.4\",\n                                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                                }\n                              }\n                            },\n                            \"private\": {\n                              \"version\": \"0.1.6\",\n                              \"from\": \"private@>=0.1.5 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/private/-/private-0.1.6.tgz\"\n                            },\n                            \"cls\": {\n                              \"version\": \"0.1.5\",\n                              \"from\": \"cls@>=0.1.3 <0.2.0\",\n                              \"resolved\": \"https://registry.npmjs.org/cls/-/cls-0.1.5.tgz\"\n                            },\n                            \"depd\": {\n                              \"version\": \"1.0.0\",\n                              \"from\": \"depd@>=1.0.0 <1.1.0\",\n                              \"resolved\": \"https://registry.npmjs.org/depd/-/depd-1.0.0.tgz\"\n                            },\n                            \"ast-types\": {\n                              \"version\": \"0.5.7\",\n                              \"from\": \"ast-types@>=0.5.7 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/ast-types/-/ast-types-0.5.7.tgz\"\n                            }\n                          }\n                        },\n                        \"regenerate\": {\n                          \"version\": \"1.0.1\",\n                          \"from\": \"regenerate@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/regenerate/-/regenerate-1.0.1.tgz\"\n                        },\n                        \"regjsgen\": {\n                          \"version\": \"0.2.0\",\n                          \"from\": \"regjsgen@>=0.2.0 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz\"\n                        },\n                        \"regjsparser\": {\n                          \"version\": \"0.1.3\",\n                          \"from\": \"regjsparser@>=0.1.2 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.3.tgz\",\n                          \"dependencies\": {\n                            \"jsesc\": {\n                              \"version\": \"0.5.0\",\n                              \"from\": \"jsesc@>=0.5.0 <0.6.0\",\n                              \"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    },\n                    \"rsvp\": {\n                      \"version\": \"3.0.14\",\n                      \"from\": \"rsvp@>=3.0.13 <4.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/rsvp/-/rsvp-3.0.14.tgz\"\n                    },\n                    \"semver\": {\n                      \"version\": \"2.3.2\",\n                      \"from\": \"semver@>=2.0.0 <3.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/semver/-/semver-2.3.2.tgz\"\n                    },\n                    \"source-map-support\": {\n                      \"version\": \"0.2.8\",\n                      \"from\": \"source-map-support@>=0.2.8 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.8.tgz\",\n                      \"dependencies\": {\n                        \"source-map\": {\n                          \"version\": \"0.1.32\",\n                          \"from\": \"source-map@0.1.32\",\n                          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n                          \"dependencies\": {\n                            \"amdefine\": {\n                              \"version\": \"0.1.0\",\n                              \"from\": \"amdefine@>=0.0.4\",\n                              \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                },\n                \"when\": {\n                  \"version\": \"3.6.3\",\n                  \"from\": \"when@>=3.4.6 <4.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/when/-/when-3.6.3.tgz\"\n                },\n                \"grunt\": {\n                  \"version\": \"0.4.5\",\n                  \"from\": \"grunt@>=0.4.0 <0.5.0\",\n                  \"resolved\": \"https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz\",\n                  \"dependencies\": {\n                    \"async\": {\n                      \"version\": \"0.1.22\",\n                      \"from\": \"async@>=0.1.22 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/async/-/async-0.1.22.tgz\"\n                    },\n                    \"coffee-script\": {\n                      \"version\": \"1.3.3\",\n                      \"from\": \"coffee-script@>=1.3.3 <1.4.0\",\n                      \"resolved\": \"https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz\"\n                    },\n                    \"colors\": {\n                      \"version\": \"0.6.2\",\n                      \"from\": \"colors@>=0.6.2 <0.7.0\",\n                      \"resolved\": \"https://registry.npmjs.org/colors/-/colors-0.6.2.tgz\"\n                    },\n                    \"dateformat\": {\n                      \"version\": \"1.0.2-1.2.3\",\n                      \"from\": \"dateformat@1.0.2-1.2.3\",\n                      \"resolved\": \"https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz\"\n                    },\n                    \"eventemitter2\": {\n                      \"version\": \"0.4.14\",\n                      \"from\": \"eventemitter2@>=0.4.13 <0.5.0\",\n                      \"resolved\": \"https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz\"\n                    },\n                    \"findup-sync\": {\n                      \"version\": \"0.1.3\",\n                      \"from\": \"findup-sync@>=0.1.2 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz\",\n                      \"dependencies\": {\n                        \"glob\": {\n                          \"version\": \"3.2.11\",\n                          \"from\": \"glob@>=3.2.9 <3.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.2.11.tgz\",\n                          \"dependencies\": {\n                            \"inherits\": {\n                              \"version\": \"2.0.1\",\n                              \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                              \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                            },\n                            \"minimatch\": {\n                              \"version\": \"0.3.0\",\n                              \"from\": \"minimatch@>=0.3.0 <0.4.0\",\n                              \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz\",\n                              \"dependencies\": {\n                                \"lru-cache\": {\n                                  \"version\": \"2.5.0\",\n                                  \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                                },\n                                \"sigmund\": {\n                                  \"version\": \"1.0.0\",\n                                  \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                                  \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                                }\n                              }\n                            }\n                          }\n                        },\n                        \"lodash\": {\n                          \"version\": \"2.4.1\",\n                          \"from\": \"lodash@>=2.4.1 <2.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n                        }\n                      }\n                    },\n                    \"glob\": {\n                      \"version\": \"3.1.21\",\n                      \"from\": \"glob@>=3.1.21 <3.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-3.1.21.tgz\",\n                      \"dependencies\": {\n                        \"graceful-fs\": {\n                          \"version\": \"1.2.3\",\n                          \"from\": \"graceful-fs@>=1.2.0 <1.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz\"\n                        },\n                        \"inherits\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"inherits@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz\"\n                        }\n                      }\n                    },\n                    \"hooker\": {\n                      \"version\": \"0.2.3\",\n                      \"from\": \"hooker@>=0.2.3 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz\"\n                    },\n                    \"iconv-lite\": {\n                      \"version\": \"0.2.11\",\n                      \"from\": \"iconv-lite@>=0.2.11 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz\"\n                    },\n                    \"minimatch\": {\n                      \"version\": \"0.2.14\",\n                      \"from\": \"minimatch@>=0.2.12 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz\",\n                      \"dependencies\": {\n                        \"lru-cache\": {\n                          \"version\": \"2.5.0\",\n                          \"from\": \"lru-cache@>=2.0.0 <3.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz\"\n                        },\n                        \"sigmund\": {\n                          \"version\": \"1.0.0\",\n                          \"from\": \"sigmund@>=1.0.0 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz\"\n                        }\n                      }\n                    },\n                    \"nopt\": {\n                      \"version\": \"1.0.10\",\n                      \"from\": \"nopt@>=1.0.10 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz\",\n                      \"dependencies\": {\n                        \"abbrev\": {\n                          \"version\": \"1.0.5\",\n                          \"from\": \"abbrev@>=1.0.0 <2.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz\"\n                        }\n                      }\n                    },\n                    \"rimraf\": {\n                      \"version\": \"2.2.8\",\n                      \"from\": \"rimraf@>=2.2.8 <2.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\"\n                    },\n                    \"lodash\": {\n                      \"version\": \"0.9.2\",\n                      \"from\": \"lodash@>=0.9.2 <0.10.0\",\n                      \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz\"\n                    },\n                    \"underscore.string\": {\n                      \"version\": \"2.2.1\",\n                      \"from\": \"underscore.string@>=2.2.1 <2.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz\"\n                    },\n                    \"which\": {\n                      \"version\": \"1.0.8\",\n                      \"from\": \"which@>=1.0.5 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/which/-/which-1.0.8.tgz\"\n                    },\n                    \"js-yaml\": {\n                      \"version\": \"2.0.5\",\n                      \"from\": \"js-yaml@>=2.0.5 <2.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz\",\n                      \"dependencies\": {\n                        \"argparse\": {\n                          \"version\": \"0.1.16\",\n                          \"from\": \"argparse@>=0.1.11 <0.2.0\",\n                          \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz\",\n                          \"dependencies\": {\n                            \"underscore\": {\n                              \"version\": \"1.7.0\",\n                              \"from\": \"underscore@>=1.7.0 <1.8.0\",\n                              \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz\"\n                            },\n                            \"underscore.string\": {\n                              \"version\": \"2.4.0\",\n                              \"from\": \"underscore.string@>=2.4.0 <2.5.0\",\n                              \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz\"\n                            }\n                          }\n                        },\n                        \"esprima\": {\n                          \"version\": \"1.0.4\",\n                          \"from\": \"esprima@>=1.0.2 <1.1.0\",\n                          \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz\"\n                        }\n                      }\n                    },\n                    \"exit\": {\n                      \"version\": \"0.1.2\",\n                      \"from\": \"exit@>=0.1.1 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/exit/-/exit-0.1.2.tgz\"\n                    },\n                    \"getobject\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"getobject@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz\"\n                    },\n                    \"grunt-legacy-util\": {\n                      \"version\": \"0.2.0\",\n                      \"from\": \"grunt-legacy-util@>=0.2.0 <0.3.0\",\n                      \"resolved\": \"https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz\"\n                    },\n                    \"grunt-legacy-log\": {\n                      \"version\": \"0.1.1\",\n                      \"from\": \"grunt-legacy-log@>=0.1.0 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz\",\n                      \"dependencies\": {\n                        \"lodash\": {\n                          \"version\": \"2.4.1\",\n                          \"from\": \"lodash@>=2.4.1 <2.5.0\",\n                          \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz\"\n                        },\n                        \"underscore.string\": {\n                          \"version\": \"2.3.3\",\n                          \"from\": \"underscore.string@>=2.3.3 <2.4.0\",\n                          \"resolved\": \"https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"traceur\": {\n          \"version\": \"0.0.74\",\n          \"from\": \"traceur@0.0.74\",\n          \"resolved\": \"https://registry.npmjs.org/traceur/-/traceur-0.0.74.tgz\",\n          \"dependencies\": {\n            \"commander\": {\n              \"version\": \"2.5.0\",\n              \"from\": \"commander@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.5.0.tgz\"\n            },\n            \"glob\": {\n              \"version\": \"4.3.1\",\n              \"from\": \"glob@>=4.0.0 <5.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/glob/-/glob-4.3.1.tgz\",\n              \"dependencies\": {\n                \"inflight\": {\n                  \"version\": \"1.0.4\",\n                  \"from\": \"inflight@>=1.0.4 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz\",\n                  \"dependencies\": {\n                    \"wrappy\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                    }\n                  }\n                },\n                \"inherits\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"inherits@>=2.0.0 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz\"\n                },\n                \"minimatch\": {\n                  \"version\": \"2.0.1\",\n                  \"from\": \"minimatch@>=2.0.1 <3.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz\",\n                  \"dependencies\": {\n                    \"brace-expansion\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"brace-expansion@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz\",\n                      \"dependencies\": {\n                        \"balanced-match\": {\n                          \"version\": \"0.2.0\",\n                          \"from\": \"balanced-match@>=0.2.0 <0.3.0\",\n                          \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz\"\n                        },\n                        \"concat-map\": {\n                          \"version\": \"0.0.0\",\n                          \"from\": \"concat-map@0.0.0\",\n                          \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz\"\n                        }\n                      }\n                    }\n                  }\n                },\n                \"once\": {\n                  \"version\": \"1.3.1\",\n                  \"from\": \"once@>=1.3.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/once/-/once-1.3.1.tgz\",\n                  \"dependencies\": {\n                    \"wrappy\": {\n                      \"version\": \"1.0.1\",\n                      \"from\": \"wrappy@>=1.0.0 <2.0.0\",\n                      \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"regexpu\": {\n              \"version\": \"0.3.0\",\n              \"from\": \"regexpu@0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/regexpu/-/regexpu-0.3.0.tgz\",\n              \"dependencies\": {\n                \"recast\": {\n                  \"version\": \"0.8.8\",\n                  \"from\": \"recast@>=0.8.0 <0.9.0\",\n                  \"resolved\": \"https://registry.npmjs.org/recast/-/recast-0.8.8.tgz\",\n                  \"dependencies\": {\n                    \"esprima-fb\": {\n                      \"version\": \"7001.1.0-dev-harmony-fb\",\n                      \"from\": \"esprima-fb@>=7001.1.0-dev-harmony-fb <7001.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/esprima-fb/-/esprima-fb-7001.1.0-dev-harmony-fb.tgz\"\n                    },\n                    \"source-map\": {\n                      \"version\": \"0.1.32\",\n                      \"from\": \"source-map@0.1.32\",\n                      \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n                      \"dependencies\": {\n                        \"amdefine\": {\n                          \"version\": \"0.1.0\",\n                          \"from\": \"amdefine@>=0.0.4\",\n                          \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                        }\n                      }\n                    },\n                    \"private\": {\n                      \"version\": \"0.1.6\",\n                      \"from\": \"private@>=0.1.5 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/private/-/private-0.1.6.tgz\"\n                    },\n                    \"cls\": {\n                      \"version\": \"0.1.5\",\n                      \"from\": \"cls@>=0.1.3 <0.2.0\",\n                      \"resolved\": \"https://registry.npmjs.org/cls/-/cls-0.1.5.tgz\"\n                    },\n                    \"depd\": {\n                      \"version\": \"1.0.0\",\n                      \"from\": \"depd@>=1.0.0 <1.1.0\",\n                      \"resolved\": \"https://registry.npmjs.org/depd/-/depd-1.0.0.tgz\"\n                    },\n                    \"ast-types\": {\n                      \"version\": \"0.5.7\",\n                      \"from\": \"ast-types@>=0.5.7 <0.6.0\",\n                      \"resolved\": \"https://registry.npmjs.org/ast-types/-/ast-types-0.5.7.tgz\"\n                    }\n                  }\n                },\n                \"regenerate\": {\n                  \"version\": \"1.0.1\",\n                  \"from\": \"regenerate@>=1.0.0 <2.0.0\",\n                  \"resolved\": \"https://registry.npmjs.org/regenerate/-/regenerate-1.0.1.tgz\"\n                },\n                \"regjsgen\": {\n                  \"version\": \"0.2.0\",\n                  \"from\": \"regjsgen@>=0.2.0 <0.3.0\",\n                  \"resolved\": \"https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz\"\n                },\n                \"regjsparser\": {\n                  \"version\": \"0.1.3\",\n                  \"from\": \"regjsparser@>=0.1.2 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.3.tgz\",\n                  \"dependencies\": {\n                    \"jsesc\": {\n                      \"version\": \"0.5.0\",\n                      \"from\": \"jsesc@>=0.5.0 <0.6.0\",\n                      \"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz\"\n                    }\n                  }\n                }\n              }\n            },\n            \"semver\": {\n              \"version\": \"2.3.2\",\n              \"from\": \"semver@>=2.0.0 <3.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/semver/-/semver-2.3.2.tgz\"\n            },\n            \"source-map-support\": {\n              \"version\": \"0.2.8\",\n              \"from\": \"source-map-support@>=0.2.8 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.8.tgz\",\n              \"dependencies\": {\n                \"source-map\": {\n                  \"version\": \"0.1.32\",\n                  \"from\": \"source-map@0.1.32\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"uglify-js\": {\n          \"version\": \"2.4.15\",\n          \"from\": \"uglify-js@>=2.4.15 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.15.tgz\",\n          \"dependencies\": {\n            \"async\": {\n              \"version\": \"0.2.10\",\n              \"from\": \"async@0.2.10\",\n              \"resolved\": \"https://registry.npmjs.org/async/-/async-0.2.10.tgz\"\n            },\n            \"source-map\": {\n              \"version\": \"0.1.34\",\n              \"from\": \"source-map@0.1.34\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            },\n            \"optimist\": {\n              \"version\": \"0.3.7\",\n              \"from\": \"optimist@0.3.7\",\n              \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n              \"dependencies\": {\n                \"wordwrap\": {\n                  \"version\": \"0.0.2\",\n                  \"from\": \"wordwrap@>=0.0.1 <0.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz\"\n                }\n              }\n            },\n            \"uglify-to-browserify\": {\n              \"version\": \"1.0.2\",\n              \"from\": \"uglify-to-browserify@>=1.0.0 <1.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz\"\n            }\n          }\n        }\n      }\n    },\n    \"traceur\": {\n      \"version\": \"0.0.74\",\n      \"from\": \"traceur@0.0.74\",\n      \"resolved\": \"https://registry.npmjs.org/traceur/-/traceur-0.0.74.tgz\",\n      \"dependencies\": {\n        \"commander\": {\n          \"version\": \"2.5.0\",\n          \"from\": \"commander@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.5.0.tgz\"\n        },\n        \"regexpu\": {\n          \"version\": \"0.3.0\",\n          \"from\": \"regexpu@0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/regexpu/-/regexpu-0.3.0.tgz\",\n          \"dependencies\": {\n            \"recast\": {\n              \"version\": \"0.8.8\",\n              \"from\": \"recast@>=0.8.0 <0.9.0\",\n              \"resolved\": \"https://registry.npmjs.org/recast/-/recast-0.8.8.tgz\",\n              \"dependencies\": {\n                \"esprima-fb\": {\n                  \"version\": \"7001.1.0-dev-harmony-fb\",\n                  \"from\": \"esprima-fb@>=7001.1.0-dev-harmony-fb <7001.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/esprima-fb/-/esprima-fb-7001.1.0-dev-harmony-fb.tgz\"\n                },\n                \"source-map\": {\n                  \"version\": \"0.1.32\",\n                  \"from\": \"source-map@0.1.32\",\n                  \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n                  \"dependencies\": {\n                    \"amdefine\": {\n                      \"version\": \"0.1.0\",\n                      \"from\": \"amdefine@>=0.0.4\",\n                      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                    }\n                  }\n                },\n                \"private\": {\n                  \"version\": \"0.1.6\",\n                  \"from\": \"private@>=0.1.5 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/private/-/private-0.1.6.tgz\"\n                },\n                \"cls\": {\n                  \"version\": \"0.1.5\",\n                  \"from\": \"cls@>=0.1.3 <0.2.0\",\n                  \"resolved\": \"https://registry.npmjs.org/cls/-/cls-0.1.5.tgz\"\n                },\n                \"depd\": {\n                  \"version\": \"1.0.0\",\n                  \"from\": \"depd@>=1.0.0 <1.1.0\",\n                  \"resolved\": \"https://registry.npmjs.org/depd/-/depd-1.0.0.tgz\"\n                },\n                \"ast-types\": {\n                  \"version\": \"0.5.7\",\n                  \"from\": \"ast-types@>=0.5.7 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/ast-types/-/ast-types-0.5.7.tgz\"\n                }\n              }\n            },\n            \"regenerate\": {\n              \"version\": \"1.0.1\",\n              \"from\": \"regenerate@>=1.0.0 <2.0.0\",\n              \"resolved\": \"https://registry.npmjs.org/regenerate/-/regenerate-1.0.1.tgz\"\n            },\n            \"regjsgen\": {\n              \"version\": \"0.2.0\",\n              \"from\": \"regjsgen@>=0.2.0 <0.3.0\",\n              \"resolved\": \"https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz\"\n            },\n            \"regjsparser\": {\n              \"version\": \"0.1.3\",\n              \"from\": \"regjsparser@>=0.1.2 <0.2.0\",\n              \"resolved\": \"https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.3.tgz\",\n              \"dependencies\": {\n                \"jsesc\": {\n                  \"version\": \"0.5.0\",\n                  \"from\": \"jsesc@>=0.5.0 <0.6.0\",\n                  \"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz\"\n                }\n              }\n            }\n          }\n        },\n        \"rsvp\": {\n          \"version\": \"3.0.14\",\n          \"from\": \"rsvp@>=3.0.13 <4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/rsvp/-/rsvp-3.0.14.tgz\"\n        },\n        \"semver\": {\n          \"version\": \"2.3.2\",\n          \"from\": \"semver@>=2.0.0 <3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/semver/-/semver-2.3.2.tgz\"\n        },\n        \"source-map-support\": {\n          \"version\": \"0.2.8\",\n          \"from\": \"source-map-support@>=0.2.8 <0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.8.tgz\",\n          \"dependencies\": {\n            \"source-map\": {\n              \"version\": \"0.1.32\",\n              \"from\": \"source-map@0.1.32\",\n              \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz\",\n              \"dependencies\": {\n                \"amdefine\": {\n                  \"version\": \"0.1.0\",\n                  \"from\": \"amdefine@>=0.0.4\",\n                  \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"write-file-stdout\": {\n      \"version\": \"0.0.2\",\n      \"from\": \"write-file-stdout@0.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz\"\n    }\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"es6-angular\",\n  \"author\": \"GoCardless\",\n  \"version\": \"0.0.1-pre\",\n  \"description\": \"ES6 + AngularJS\",\n  \"scripts\": {\n    \"postinstall\": \"./node_modules/.bin/webdriver-manager update\",\n    \"test\": \"./script/test\",\n    \"start\": \"ulimit -n 10240 && ./script/start\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/gocardless/es6-angularjs.git\"\n  },\n  \"dependencies\": {\n    \"assetgraph\": \"^1.12.1\",\n    \"assetgraph-builder\": \"^2.5.1\",\n    \"autoprefixer\": \"^4.0.0\",\n    \"autoprefixer-core\": \"^4.0.1\",\n    \"bower\": \"^1.3.12\",\n    \"connect\": \"^3.3.0\",\n    \"fb-flo\": \"^0.3.0\",\n    \"glob\": \"^4.0.6\",\n    \"graceful-fs\": \"^3.0.5\",\n    \"jasmine-core\": \"^2.1.2\",\n    \"jshint\": \"^2.5.6\",\n    \"karma\": \"^0.12.24\",\n    \"karma-chrome-launcher\": \"^0.1.5\",\n    \"karma-cli\": \"^0.0.4\",\n    \"karma-firefox-launcher\": \"^0.1.3\",\n    \"karma-jasmine\": \"^0.3.1\",\n    \"karma-safari-launcher\": \"^0.1.1\",\n    \"karma-sauce-launcher\": \"^0.2.10\",\n    \"karma-traceur-preprocessor\": \"^0.4.0\",\n    \"lodash\": \"^2.4.1\",\n    \"mime\": \"^1.2.11\",\n    \"minimist\": \"^1.1.0\",\n    \"mkdirp\": \"^0.5.0\",\n    \"morgan\": \"^1.4.0\",\n    \"opn\": \"^1.0.0\",\n    \"protractor\": \"^1.3.1\",\n    \"read-file-stdin\": \"^0.2.0\",\n    \"rework\": \"^1.0.1\",\n    \"rework-import\": \"^2.0.0\",\n    \"rework-vars\": \"^3.1.1\",\n    \"send\": \"^0.10.0\",\n    \"serve-static\": \"^1.7.0\",\n    \"systemjs-assetgraph\": \"^0.1.0\",\n    \"systemjs-builder\": \"^0.4.5\",\n    \"traceur\": \"^0.0.74\",\n    \"write-file-stdout\": \"0.0.2\"\n  }\n}\n"
  },
  {
    "path": "script/build",
    "content": "#!/bin/bash\n# Usage: script/build\n# Runs the projects's build.\n\ntrap \"exit 1\" TERM\n\nif [[ -z \"$DIST\" ]]; then\n  echo \"Missing DIST\"\n  kill -s TERM $$\nfi\n\n# Add trailing slash and prepend ./\nDIST=$(echo \"./$DIST\" | sed \"s/\\/$//\")\"/\"\n\n# Make sure DIST exists\nmkdir -p $DIST\n\n# Clean\nrm -r $DIST\n\n# Copy\ncp -a ./client/. $DIST\n\n# Build\n./script/css\n./script/precompile\n\n# Increas the max number of file descriptiors\nulimit -n 4096\n\nscript/lib/build-production.js --root ./client --outroot $DIST *.html\n\nrm -r $DIST/app $DIST/app-compiled $DIST/components $DIST/assets/stylesheets $DIST/*.js $DIST/*.css\n"
  },
  {
    "path": "script/css",
    "content": "#!/bin/bash\n# Usage: script/css\n# Runs the projects's citest suite.\n\nset -e errexit\n\n./script/lib/css.js client/assets/stylesheets/main.css client/main.css\n"
  },
  {
    "path": "script/e2etest",
    "content": "#!/bin/bash\n# Usage: script/e2etest\n# Runs the projects integration tests.\n\nset -e errexit\n\nHTTP_PORT=9393\n\nDIST=./e2e-dist/ ./script/build\n\n./script/lib/server.js --port=$HTTP_PORT --root ./e2e-dist &\nE2E_TEST_PID=$!\n\ntrap \"kill $E2E_TEST_PID\" INT TERM EXIT\n\nHTTP_PORT=$HTTP_PORT ./node_modules/.bin/protractor\n"
  },
  {
    "path": "script/ensure-no-ddescribe",
    "content": "#!/bin/bash\n\nDDESCRIBE_LINES=`grep 'ddescribe\\|iit\\|browser.pause\\(\\)' -l --include \\*.js -r client/app`\n\nDDESCRIBE_COUNT=`echo $DDESCRIBE_LINES | awk 'NF > 0' | wc -l | awk '{ print $1}'`\n\nZERO=\"0\"\n\nif [ \"$DDESCRIBE_COUNT\" != \"$ZERO\" ];\nthen\n  echo \"WARNING: found ddescribe, iit or browser.pause(), exiting 1:\"\n  echo $DDESCRIBE_LINES\n  exit 1\nelse\n  exit 0\nfi\n\n"
  },
  {
    "path": "script/lib/build-production.js",
    "content": "#!/usr/bin/env node\n\n'use strict';\n\nvar AssetGraph = require('assetgraph-builder');\nvar systemJsAssetGraph = require('systemjs-assetgraph');\n\nvar argv = require('minimist')(process.argv.slice(2));\nvar config = {\n  root: argv.root,\n  outRoot: argv.outroot,\n  loadAssets: (argv._[0] ? argv._ : ['*.html', 'favicon.ico']),\n  optimizeImages: false,\n  inlineSize: 4096,\n  sharedBundles: false,\n  manifest: false,\n  version: undefined,\n  noCompress: false,\n  stripDebug: false,\n  browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']\n};\n\nif (!config.root || !config.outRoot) {\n  throw new Error('--root and --outroot need to set');\n}\n\nnew AssetGraph({ root: config.root })\n  .logEvents({\n    repl: undefined,\n    stopOnWarning: false,\n    suppressJavaScriptCommonJsRequireWarnings: true\n  })\n  .registerRequireJsConfig({\n    preventPopulationOfJavaScriptAssetsUntilConfigHasBeenFound: true\n  })\n  .loadAssets(config.loadAssets)\n  .queue(systemJsAssetGraph({\n    outRoot: config.outRoot,\n\n    // comment out the below to use injection instead of bundling\n    // override use of app-compiled to ensure source maps\n    configOverride: {\n      map: {\n        app: 'app'\n      }\n    },\n    bundle: true\n  }))\n  .buildProduction({\n    version: config.version,\n    optimizeImages: config.optimizeImages,\n    inlineSize: config.inlineSize,\n    browsers: config.browsers,\n    manifest: config.manifest,\n    sharedBundles: config.sharedBundles,\n    noCompress: config.noCompress,\n    stripDebug: config.stripDebug\n  })\n  .writeAssetsToDisc({ url: /^file:/, isLoaded: true }, config.outRoot)\n  .writeStatsToStderr()\n  .run();\n"
  },
  {
    "path": "script/lib/css.js",
    "content": "#!/usr/bin/env node\n\nvar path = require('path');\n\nvar rework = require('rework');\nvar reworkImport = require('rework-import');\nvar reworkVars = require('rework-vars');\nvar argv = require('minimist')(process.argv.slice(2));\nvar read = require('read-file-stdin');\nvar write = require('write-file-stdout');\nvar autoprefixer = require('autoprefixer-core')();\n\nvar options = {\n  input: path.resolve(argv._[0]),\n  output: path.resolve(argv._[1])\n};\n\nread(options.input, function(err, buffer){\n  if (err) {\n    console.error(err);\n    console.error(err.stack);\n  }\n  var css = buffer.toString();\n\n  try {\n    css = rework(css, { source: options.input })\n      .use(reworkImport())\n      .use(reworkVars())\n      .toString();\n\n    css = autoprefixer.process(css);\n  } catch (err) {\n    console.error(err);\n    console.error(err.stack);\n    console.error(css);\n  }\n\n  write(options.output, css);\n});\n"
  },
  {
    "path": "script/lib/precompile.js",
    "content": "'use strict';\n\n// # Precompile\n// Builds ES6 into System.register\n//\n// Use:\n// precompile(inFile, outFile);\n\nvar traceur = require('traceur');\nvar path = require('path');\nvar fs = require('graceful-fs');\n\nvar traceurConfig;\nfunction loadConfig() {\n  traceurConfig = require('../../config/traceur.config.js');\n  traceurConfig.modules = 'instantiate';\n  traceurConfig.script = false;\n  traceurConfig.sourceMaps = 'memory';\n}\n\nfunction precompile(inFile, outFile, basePath, callback) {\n  if (!traceurConfig) {\n    loadConfig();\n  }\n\n  traceurConfig.moduleName = null;\n\n  var compiler = new traceur.Compiler(traceurConfig);\n\n  var sourceMapFile = outFile.replace(/\\.js$/, '.map');\n\n  fs.readFile(path.resolve(basePath, inFile), function(err, inSource) {\n    if (err)\n      return callback(err);\n\n    var source, sourceMap;\n\n    try {\n      source = compiler.compile(inSource.toString(), '/' + inFile, path.basename(outFile));\n      sourceMap = compiler.getSourceMap();  \n    }\n    catch(e) {\n      return callback(e);\n    }\n\n    fs.writeFile(path.resolve(basePath, outFile), source, function(err) {\n      if (err)\n        return callback(err);\n\n      fs.writeFile(path.resolve(basePath, sourceMapFile), sourceMap, callback);\n    });\n  });\n}\n\nexports.precompile = precompile;\n"
  },
  {
    "path": "script/lib/server.js",
    "content": "#!/usr/bin/env node\n\n'use strict';\n\nvar http = require('http');\nvar url = require('url');\n\nvar connect = require('connect');\nvar serveStatic = require('serve-static');\nvar morgan  = require('morgan');\nvar argv = require('minimist')(process.argv.slice(2));\nvar send = require('send');\nvar _ = require('lodash');\n\nvar options = {\n  port: argv.p || argv.port,\n  root: argv.r || argv.root || _.flatten([argv._])[0],\n  open: argv.open || false,\n  verbose: argv.v || argv.verbose || false,\n  index: argv.index || 'index.html',\n};\n\nvar server = connect()\n  .use(function serveOverrideIndex(req, res, next) {\n    if (options.index !== 'index.html' &&\n        url.parse(req.url).pathname.match(/^(\\/|\\/index.html)$/)) {\n      send(req, '/' + options.index, { root: options.root })\n        .pipe(res);\n    } else {\n      next();\n    }\n  })\n  .use(serveStatic(options.root))\n  .use(function serveIndex(req, res, next) {\n    if (req.method !== 'GET' || !req.headers.accept.match('text/html')) {\n      return next();\n    }\n    send(req, '/' + options.index, { root: options.root })\n      .pipe(res);\n  });\n\nif (options.verbose) {\n  server.use(morgan('tiny'));\n}\n\nhttp.createServer(server)\n  .listen(options.port)\n  .once('error', function (err) {\n    if (err.code === 'EADDRINUSE') {\n      console.log('Port in use: %s', options.port);\n    } else {\n      console.error(err);\n    }\n  })\n  .on('listening', function () {\n    console.log('Started web server on http://localhost:' + options.port);\n    if (options.open) {\n      require('opn')('http://localhost:' + options.port);\n    }\n  });\n"
  },
  {
    "path": "script/lib/watch.js",
    "content": "#!/usr/bin/env node\n\n'use strict';\n\nvar fs = require('fs');\nvar path = require('path');\nvar exec = require('child_process').exec;\n\nvar argv = require('minimist')(process.argv.slice(2));\nvar flo = require('fb-flo');\nvar _ = require('lodash');\n\nvar precompile = require('./precompile');\n\nvar options = {\n  verbose: argv.v || argv.verbose || false,\n  root: argv.r || argv.root || _.flatten([argv._])[0],\n  glob: _.flatten([argv.g || argv.glob || '**/*']),\n  host: argv.h || argv.host || 'localhost',\n  port: argv.p || argv.port || 8888\n};\n\nfunction isIgnorePath(filepath) {\n  return filepath === 'main.css' || path.dirname(filepath).match(/^(app-compiled)(\\/|$)/);\n}\n\nfunction rootPath(filepath) {\n  return path.join(options.root, filepath);\n}\n\nfunction handleCompile(filepath, callback) {\n  var ext = path.extname(filepath);\n  var inUncompiled = path.dirname(filepath).match(/^(app)(\\/|$)/);\n  var compiledFile;\n\n  if (ext === '.css') {\n    exec('./script/css', function (err) {\n      if (err) {\n        return callback(err);\n      }\n      callback(null, 'main.css', false);\n    });\n  } else if (ext === '.js' && inUncompiled) {\n    try {\n      compiledFile = filepath.replace(/^(app)/g, '$1-compiled');\n      precompile.precompile(filepath, compiledFile, options.root, function(err) {\n        callback(err, compiledFile, true);\n      });\n    }\n    catch(e) {\n      callback(e && e[0] || e);\n    }\n  } else if (inUncompiled) {\n    // copy any non-js accross\n    compiledFile = filepath.replace(/^(app)/g, '$1-compiled');\n    fs.writeFileSync(rootPath(compiledFile), fs.readFileSync(rootPath(filepath)));\n    callback(null, compiledFile, true);\n  } else {\n    callback(null, filepath, true);\n  }\n}\n\nvar server = flo(options.root, {\n  port: options.port,\n  host: options.host,\n  verbose: options.verbose,\n  glob: options.glob\n}, function resolver(filepath, callback) {\n  // Minimal debugging\n  if (!options.verbose) {\n    console.log('File changed: %s', filepath);\n  }\n\n  if (isIgnorePath(filepath)) {\n    return;\n  }\n\n  handleCompile(filepath, function(err, compiledFile, reload) {\n    if (err) {\n      console.error('Failed to load %s', filepath);\n      console.error(err);\n      return;\n    }\n    callback({\n      resourceURL: compiledFile,\n      contents: fs.readFileSync(rootPath(compiledFile)).toString(),\n      reload: reload\n    });\n  });\n});\n\nserver.once('ready', function() {\n  console.log(options);\n  console.log('Watching files!');\n});\n"
  },
  {
    "path": "script/precompile",
    "content": "#!/usr/bin/env node\n\n// Usage: script/precompile\n// Precompiles client/app to client/app-compiled and\n\n'use strict';\n\nvar glob = require('glob');\nvar precompile = require('./lib/precompile');\nvar mkdirp = require('mkdirp');\nvar path = require('path');\nvar fs = require('graceful-fs');\n\nvar failed = false;\n\nfunction preCompile(inDir, outDir, baseDir) {\n  glob(path.resolve(baseDir, inDir) + '/**/*', function(err, files) {\n    if (err) throw err;\n\n    files.forEach(function(file) {\n      var relFile = path.relative(baseDir, file);\n\n      var outFile = outDir + '/' + relFile.substr(inDir.length);\n\n      mkdirp(path.resolve(baseDir, path.dirname(outFile)), function(err) {\n        if (err) throw err;\n\n        if (failed) {\n          return;\n        }\n\n        if (relFile.match(/^(app)\\/.+\\.js$/)) {\n          precompile.precompile(relFile, outFile, baseDir, function(err) {\n            if (err)\n              throw err;\n          });\n        } else {\n          fs.readFile(file, function(err, source) {\n            if (err) {\n              if (err.code != 'EISDIR')\n                throw err;\n            } else {\n              fs.writeFile(path.resolve(baseDir, outFile), source, function(err) {\n                if (err)\n                  throw err;\n              });\n            }\n          });\n        }\n      });\n\n    });\n  });\n}\n\npreCompile('app', 'app-compiled', 'client');\n"
  },
  {
    "path": "script/setup",
    "content": "#!/bin/bash\n# Usage: script/setup\n# Installs project dependencies.\n\ntrap \"exit 1\" TERM\n\nif [ ! command -v brew >/dev/null 2>&1 ]; then\n  echo \"Install homebrew: ruby -e \\\"$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)\\\"\"\n  kill -s TERM $$\nelse\n  echo \"Install required brew packages for assetgraph:\"\n  echo \"--> brew install cairo jpeg giflib optipng pngcrush pngquant pango graphicsmagick jpeg-turbo inkscape\"\nfi\n\nif [ command -v node >/dev/null 2>&1 ]; then\n  echo \"Install node: brew install node\"\n  kill -s TERM $$\nfi\n\nnpm install\n./node_modules/.bin/webdriver-manager update\n"
  },
  {
    "path": "script/start",
    "content": "#!/bin/bash\n# Usage: script/start\n# Starts the projects's development server.\n\nset -e errexit\n\n./script/precompile\n./script/css\n\nnode ./script/lib/watch.js --root ./client &\n\nnode ./script/lib/server.js --port=3010 --open=true --verbose --root ./client\n"
  },
  {
    "path": "script/test",
    "content": "#!/bin/bash\n# Usage: script/test\n# Runs the projects test suite.\n\nset -e errexit\n\n./script/ensure-no-ddescribe\n\n./node_modules/.bin/jshint .\n\n./node_modules/.bin/karma start --single-run\n\n./script/e2etest\n"
  }
]